[vlc-devel] Re: Handling RTP Header Extension

Jean-Paul Saman jean-paul.saman at planet.nl
Fri Sep 30 22:56:03 CEST 2005


For all who like to try an RTP reorder patch for MPEG2-TS over RTP. It 
has the patch from Zohar Loberbaum integrated (thanks for your patch) 
and some idea from Marian Durkovik.

Any comment is welcome.

Grtz,
Jean-Paul Saman.

Jean-Paul Saman wrote:

> Since sometime I am sitting on a patch that implements RTP packet 
> reordering, but have been holding it back because 0.8.4-test1 is 
> started. I will integrate your patch and some of the modifications of 
> Marian Durkovik into this work and issue a separate patch on the 
> vlc-devel list. This to not make 0.8.4-test1 unstable unless the patch 
> has had enough testing.
>
> Greetings,
> Jean-Paul Saman.
>
> Zohar Lorberbaum wrote:
>
>> RFC 1889 allows for RTP header extensions. The extension bit, extension
>> profile, extension length and the actual header extension are not being
>> handled at the moment. This can cause having part of the RTP header to
>> be handled as payload, thus corrupting the actual payload content
>> playback.
>>
>> Following is a patch to latest SVN version of
>> vlc-trunk/modules/access/udp.c which fixes this problem.
>>
>> Cheers,
>> Zohar Lorberbaum
>>
>>
>> --- udp.c  2005-09-29 17:25:50.518065600 -0700
>> +++ udp-rtp-extension.c 2005-09-29 17:28:47.923161600 -0700
>> @@ -328,6 +328,8 @@
>>     int     i_payload_type;
>>     int     i_skip = 0;
>>     int     i_sequence_number = 0;
>> +    int     i_extension_bit = 0;
>> +    int     i_extension_length = 0;
>>
>>     if( p_block == NULL )
>>         return NULL;
>> @@ -342,6 +344,11 @@
>>     i_payload_type = ( p_block->p_buffer[1] & 0x7F );
>>     i_sequence_number = ( (p_block->p_buffer[2] << 8 ) +
>> p_block->p_buffer[3] );
>>
>> +    i_extension_bit  = ( p_block->p_buffer[0] & 0x10 ) >> 4;
>> +
>> +    if ( i_extension_bit == 1)
>> +        i_extension_length = ( (p_block->p_buffer[14] << 8 ) +
>> p_block->p_buffer[15] );
>> +
>>     if ( i_rtp_version != 2 )
>>         msg_Dbg( p_access, "RTP version is %u, should be 2",
>> i_rtp_version );
>>
>> @@ -350,7 +357,7 @@
>>     else if( i_payload_type !=  33 && i_payload_type != 32 )
>>         msg_Dbg( p_access, "unsupported RTP payload type (%u)",
>> i_payload_type );
>>
>> -    i_skip += RTP_HEADER_LEN + 4*i_CSRC_count;
>> +    i_skip += RTP_HEADER_LEN + 4*i_CSRC_count + 4*i_extension_bit +
>> 4*i_extension_length;
>>
>>     /* A CSRC extension field is 32 bits in size (4 bytes) */
>>     if( i_skip >= p_block->i_buffer )
>>
>>
>>
>>
>>  
>>
>

-------------- next part --------------
A non-text attachment was scrubbed...
Name: udp_rtp_reorder.patch
Type: text/x-patch
Size: 11136 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20050930/18a85026/attachment.bin>


More information about the vlc-devel mailing list