Hi Ross, Thanks again for your support.
We didn't understood deeply what brings the RTCP sender report flooding, but we has such a behavior using multicast stream that share the same multicast port. Wireshark analysis show that an RTCP sender report is forwarded between 2 RTSP servers without ends. We tried to understand the comment in RTCP.cpp that decide to resend a packet when SSM flag is set and packet comes from another host. It could be again a consequence of the multicast problem in linux using ASM. However we notice that RTCPInstance constructor has an argument to say to use SSM, but the RTCPInstance have a reference to the GroupSock that know if it was created for SSM. Setting this flag according to how groupsock was created seems to solve the problem. For instance in testH264VideoStreamer.cpp seems to make a confusion. 00057 Groupsock<http://www.live555.com/liveMedia/doxygen/html/classGroupsock.html> rtpGroupsock(*env<http://www.live555.com/liveMedia/doxygen/html/MPEG2TransportStreamIndexer_8cpp.html#dfa09dd3866fd8ba8ab69586f9437d19>, destinationAddress, rtpPort, ttl); 00058 rtpGroupsock.multicastSendOnly<http://www.live555.com/liveMedia/doxygen/html/classGroupsock.html#f1d8b7124167e2a5fc12ba3a0039346a>(); // we're a SSM source 00059 Groupsock<http://www.live555.com/liveMedia/doxygen/html/classGroupsock.html> rtcpGroupsock(*env<http://www.live555.com/liveMedia/doxygen/html/MPEG2TransportStreamIndexer_8cpp.html#dfa09dd3866fd8ba8ab69586f9437d19>, destinationAddress, rtcpPort, ttl); 00060 rtcpGroupsock.multicastSendOnly<http://www.live555.com/liveMedia/doxygen/html/classGroupsock.html#f1d8b7124167e2a5fc12ba3a0039346a>(); // we're a SSM source 00061 00062 // Create a 'H264 Video RTP' sink from the RTP 'groupsock': 00063 OutPacketBuffer::maxSize<http://www.live555.com/liveMedia/doxygen/html/classOutPacketBuffer.html#27f745b288df55bbfb39a7564fe40596> = 100000; 00064 videoSink<http://www.live555.com/liveMedia/doxygen/html/testDVVideoStreamer_8cpp.html#d0d95ae4c5a49da3e034e3bb23adea20> = H264VideoRTPSink::createNew<http://www.live555.com/liveMedia/doxygen/html/classH264VideoRTPSink.html#25c497ea6eccc5de3a22677acbcee140>(*env<http://www.live555.com/liveMedia/doxygen/html/MPEG2TransportStreamIndexer_8cpp.html#dfa09dd3866fd8ba8ab69586f9437d19>, &rtpGroupsock, 96); 00065 00066 // Create (and start) a 'RTCP instance' for this RTP sink: 00067 const unsigned estimatedSessionBandwidth = 500; // in kbps; for RTCP b/w share 00068 const unsigned maxCNAMElen = 100; 00069 unsigned char CNAME[maxCNAMElen+1]; 00070 gethostname((char*)CNAME, maxCNAMElen); 00071 CNAME[maxCNAMElen] = '\0'; // just in case 00072 RTCPInstance<http://www.live555.com/liveMedia/doxygen/html/classRTCPInstance.html>* rtcp 00073 = RTCPInstance::createNew<http://www.live555.com/liveMedia/doxygen/html/classRTCPInstance.html#baf83bbbca227116e81dac5a9bf0ce3c>(*env<http://www.live555.com/liveMedia/doxygen/html/MPEG2TransportStreamIndexer_8cpp.html#dfa09dd3866fd8ba8ab69586f9437d19>, &rtcpGroupsock, 00074 estimatedSessionBandwidth, CNAME, 00075 videoSink<http://www.live555.com/liveMedia/doxygen/html/testDVVideoStreamer_8cpp.html#d0d95ae4c5a49da3e034e3bb23adea20>, NULL<http://www.live555.com/liveMedia/doxygen/html/UsageEnvironment_8hh.html#070d2ce7b6bb7e5c05602aa8c308d0c4> /* we're a server */, 00076 True<http://www.live555.com/liveMedia/doxygen/html/Boolean_8hh.html#4ef9178d6bd8f7ce58133fa8c3805842> /* we're a SSM source */); The RTCPIntance is create with SSM flag set but it use the ASM GroupSock, isn't it ? Don't you think it could be more robust to remove the SSM argument in RTCPInstance constructor and get it from RTCPgs->isSSM() ? Thanks & Regards, Michel. [@@ THALES GROUP INTERNAL @@]
_______________________________________________ live-devel mailing list live-devel@lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel