[FFmpeg-devel] RTCP question

Fred Rothganger frothga at sandia.gov
Fri Apr 25 01:05:17 CEST 2014

I am dealing with a use-case that may involve long pauses in streaming. 
Because of this, it may be useful to ensure that a fresh RTCP SR packet 
is sent when streaming restarts.

Here is a code fragment from rtpenc.c, round line 500:

     rtcp_bytes = ((s->octet_count - s->last_octet_count) * 
     if ((s->first_packet || ((rtcp_bytes >= RTCP_SR_SIZE) &&
                             (ff_ntp_time() - s->last_rtcp_ntp_time > 
5000000))) &&
         !(s->flags & FF_RTP_FLAG_SKIP_RTCP)) {
         rtcp_send_sr(s1, ff_ntp_time(), 0);
         s->last_octet_count = s->octet_count;
         s->first_packet = 0;

Notice the AND between the byte-ratio and time-elapsed conditions. Would 
it make more sense to make this an OR? IE: shouldn't we send a fresh SR 
message if *either* condition were true, as opposed to both 
simultaneously? As written, there could be a pause for 10 minutes, but 
if not enough bytes have been sent yet, it may be several packets before 
a fresh SR message is sent.

Am I missing something here? I suppose the intention is that if the 
overall bandwidth use is very low, then don't fill it up with SR 
messages. I would argue that in that case, you won't add much to 
bandwidth usage anyway.

More information about the ffmpeg-devel mailing list