> I have implemented a multicast out component using SimpleRTPSink and 
> RTCPInstance, and a multicast in component using SimpleRTPSource and 
> RTCPInstance. When the multicast in component is receiving from a multicast 
> out component on the same device, I have them share Groupsocks for RTP and 
> RTCP.
> 
> The issue I'm having is when I go to shutdown one component, it seems to stop 
> the other component. The code tracks how many components own the Groupsock, 
> so I know the Groupsock isn't being deleted.
> 
> Say for example I'm shutting down the multicast out component like so:
> 
> rtp_sink->stopPlaying();
> Medium::close(framed_source);
> Medium::close(rtcp_instance);
> Medium::close(rtp_sink);
> 
> This will cause the multicast in component to stop working and stop receiving 
> any more streams

The reason for this is that a “RTCPInstance” - even when used only in concert 
with a “RTPSink” - both sends *and receives* packets.  Therefore, closing the 
“RTCPInstance” object caused the LIVE555 library to turn off background read 
handling on the ‘groupsock’.

However, I have just released a new version (2015.08.06) of the “LIVE555 
Streaming Media” code that will prevent the “RTCPInstance” destructor from 
turning off background read handling on the ‘groupsock’ if it is being shared 
with a “RTPSource” - i.e., if RTP and RTCP are being multiplexed, with all 
packets being initially received by the “RTPSource”.

This new version should allow you to close the “RTCPInstance”, while allowing 
incoming RTP packets to still get handled by the “RTPSource”.

Note, however, that this will work *only if* you have a *single* “RTCPInstance” 
object for both your input and output components, rather than separate 
“RTCPInstance” objects for each.  I.e., you will need to create your 
“RTPSource” and “RTPSink” objects (in either order), and then create a (single) 
“RTCPInstance” that takes both your “RTPSource” and “RTPSink” objects as 
parameter (to “RTCPInstance::createNew()”).

Then, when closing the “RTCPInstance”, you must do so before closing *either 
of* the “RTPSource” or “RTPSink” instances.  (And, of course, you must close 
the “RTCPInstance” only once.)

This should let you do what you’re trying to do (though I’m not sure why you’re 
trying to do it…).

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

_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to