@ -35,6 +35,7 @@ static const AVOption options[] = {
{ " payload_type " , " Specify RTP payload type " , offsetof ( RTPMuxContext , payload_type ) , AV_OPT_TYPE_INT , { . i64 = - 1 } , - 1 , 127 , AV_OPT_FLAG_ENCODING_PARAM } ,
{ " ssrc " , " Stream identifier " , offsetof ( RTPMuxContext , ssrc ) , AV_OPT_TYPE_INT , { . i64 = 0 } , INT_MIN , INT_MAX , AV_OPT_FLAG_ENCODING_PARAM } ,
{ " cname " , " CNAME to include in RTCP SR packets " , offsetof ( RTPMuxContext , cname ) , AV_OPT_TYPE_STRING , { . str = NULL } , 0 , 0 , AV_OPT_FLAG_ENCODING_PARAM } ,
{ " seq " , " Starting sequence number " , offsetof ( RTPMuxContext , seq ) , AV_OPT_TYPE_INT , { . i64 = - 1 } , - 1 , 65535 , AV_OPT_FLAG_ENCODING_PARAM } ,
{ NULL } ,
} ;
@ -124,6 +125,13 @@ static int rtp_write_header(AVFormatContext *s1)
/* Round the NTP time to whole milliseconds. */
s - > first_rtcp_ntp_time = ( s1 - > start_time_realtime / 1000 ) * 1000 +
NTP_OFFSET_US ;
// Pick a random sequence start number, but in the lower end of the
// available range, so that any wraparound doesn't happen immediately.
// (Immediate wraparound would be an issue for SRTP.)
if ( s - > seq < 0 )
s - > seq = av_get_random_seed ( ) & 0x0fff ;
else
s - > seq & = 0xffff ; // Use the given parameter, wrapped to the right interval
if ( s1 - > packet_size ) {
if ( s1 - > pb - > max_packet_size )
@ -309,7 +317,7 @@ void ff_rtp_send_data(AVFormatContext *s1, const uint8_t *buf1, int len, int m)
avio_write ( s1 - > pb , buf1 , len ) ;
avio_flush ( s1 - > pb ) ;
s - > seq + + ;
s - > seq = ( s - > seq + 1 ) & 0xffff ;
s - > octet_count + = len ;
s - > packet_count + + ;
}