You didn’t say so explicitly in your message, but I presume that you are using 
our “LIVE555 Streaming Media” libraries to implement both your server (i.e., 
your IP camera), and your receiver(s)/client(s).[*]

The multicast streaming RTSP server examples that we provide (in the 
“testProgs” directory) all use a “PassiveServerMediaSubsession” object.  This 
means that the RTSP server - in this case - describes a stream that is 
‘ongoing’.  In this case, RTSP “PLAY”, “PAUSE”, and “TEARDOWN” commands have no 
effect on the stream; it continues regardless.

In contrast, our server implementation of RTSP unicast streams use a 
“OnDemandServerMediaSubsession” object.  This class handles RTSP “PLAY”, 
“PAUSE”, and “TEARDOWN” commands (to start, pause, and end a stream, 
respectively).  However, this class is used only to implement unicast 
streaming, not multicast streaming.

Note that “PassiveServerMediaSubsession” and “OnDemandServerMediaSubsession” 
are both subclasses of an abstract class “ServerMediaSubsession”.  They each 
implement several virtual functions, including:
        - sdpLines()
        - getStreamParameters()
        - startStream()
        - pauseStream()
        - deleteStream()
These virtual functions (and others) are implemented differently in the 
“PassiveServerMediaSubsession” and “OnDemandServerMediaSubsession” subclasses.

What you want, therefore, is a new subclass of “ServerMediaSubsession” that 
serves a multicast session, but does so ‘on demand’ - i.e., in response to RTSP 
“PLAY”, “PAUSE”, and “TEARDOWN” commands.  We do not provide such a subclass; 
you would need to implement it yourself.  In this new subclass of 
“ServerMediaSubsession” (which you might name 
“MulticastOnDemandServerMediaSubsession”), you would have to reimplement 
several virtual functions, e.g.:
        - sdpLines() would be implemented similarly to the implementation in 
“PassiveServerMediaSubsession” 
        - getStreamParameters() would be implemented similarly to the 
implementation in “PassiveServerMediaSubsession” 
        - startStream() would be implemented similarly to the implementation in 
“OnDemandServerMediaSubsession”, except that if the multicast stream has 
already been started, you would not create/start a new one.  Instead, in this 
case, you’d just do nothing.
        - pauseStream() would be implemented similarly to the implementation in 
“OnDemandServerMediaSubsession” (if you wish to implement “PAUSE” at all)
        - deleteStream() would be implemented similarly to the implementation 
in “OnDemandServerMediaSubsession”, assuming that you want one multicast RTP 
receiver (RTSP client) to be able to stop any other clients from receiving the 
stream.


Ross Finlayson
Live Networks, Inc.
http://www.live555.com/

[*] As always, if you are using our code to implement commercial products, you 
are free to do so, but you must comply with the conditions of the LGPL; see 
http://live555.com/liveMedia/faq.html#copyright-and-license



_______________________________________________
live-devel mailing list
[email protected]
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to