http://www.perlmonks.org?node_id=143156

amir has asked for the wisdom of the Perl Monks concerning the following question:

I am writing a RTSP streaming media server in Perl! :-) However, I am not able to find any thing about RTSP or RTP in Perl whatsoever, at least no server-side implementations, code, or hints/tips.

I've read RFC 2326 (get it here) on the RTSP protocol, which by the way is very similar to HTTP/1.1. I cannot get RealPlayer or QuickTime player to talk to my server! The server fork()s on incoming requests and is HTTP/1.1-compliant as well as minimally RTSP/1.0-compliant. I am able to recieve data from the RTSP client, but when I send a reply, the clients just hang there, waiting for something... Currently, I am sending replies in several print() statement, would I need to send everything in a buffer?

So, in RTSP terms, the RealPlayer client sends an OPTIONS request for a particular file, and then hangs. The QuickTime client sends a DESCRIBE request for a file, but both clients don't respond to my server's reply message!

I guess my question is quite vague, but I would appreciate any help, tips, comments, pointers, etc. to lead me in the right direction to writing this server.

Thanks,
Amir

Replies are listed 'Best First'.
Re: RTSP/RTP streaming server in Perl!
by t0mas (Priest) on Feb 04, 2002 at 11:28 UTC
Re: RTSP/RTP streaming server in Perl!
by z3d (Scribe) on Feb 04, 2002 at 13:57 UTC
    Have you checked out the Darwin streaming server from Apple? True, it is intended for Quicktime, not RealMedia, but since both utilize rtsp it might be worth looking at. If I remember right, their server implementation is written entirely in perl (hence my posting).



    "I have never written bad code. There are merely unanticipated features."
Re: RTSP/RTP streaming server in Perl!
by rdfield (Priest) on Feb 04, 2002 at 09:49 UTC
    Have you set 'autoflush' on your IO handle? (see perlipc)

    rdfield

      select(STDOUT); $| = 1;
      Will the above code do the trick for autoflushing my socket filehandle?
        Nope. That'll autoflush STDOUT: replace STDOUT with whatever name you've given your socket handle, and add select(STDOUT); after the $| = 1; which will reset the default filehandle.

        rdfield