ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

RTP extension草稿

2022-01-02 09:32:49  阅读:195  来源: 互联网

标签:00 24bits 草稿 extension RTP time ref rtp


RTP 部分
 图1 RTP报文头部格式

1)        V:RTP协议的版本号
2)        P:填充标志
3)        X:扩展标志,占1位,如果X=1,则在RTP报头后跟有一个扩展报头
4)        CC:CSRC计数器
5)        M: mark位置。
6)        PT: 有效荷载类型
7)        序列号:占16位
8)        时戳(Timestamp):占32位,必须使用90 kHz 时钟频率。
9)        同步信源(SSRC)标识符:占32位
10)    特约信源(CSRC)标识符:每个CSRC标识符占32位
注:基本的RTP说明并不定义任何头扩展本身,如果遇到X=1,需要特殊处理

取一段码流如下:

80 e0 00 1e 00 00 d2 f0 00 00 00 00 41 9b 6b 49 €?....??....A?kI
e1 0f 26 53 02 1a ff06 59 97 1d d2 2e 8c 50 01 ?.&S....Y?.?.?P.
cc 13 ec 52 77 4e e50e 7b fd 16 11 66 27 7c b4 ?.?RwN?.{?..f'|?
f6 e1 29 d5 d6 a4 ef3e 12 d8 fd 6c 97 51 e7 e9 ??)????>.??l?Q??
cfc7 5e c8 a9 51 f6 82 65 d6 48 5a 86 b0 e0 8c ??^??Q??e?HZ????
其中,

80              

 是V_P_X_CC

e0             

  是M_PT

00 1e         

 是SequenceNum

00 00 d2 f0 

是Timestamp

00 00 00 00

是SSRC

把前两字节换成二进制如下
1000 0000 1110 0000
按顺序解释如下:

10               

是V

0                 

是P

0                 

是X

0000           

是CC

1                 

是M

110 0000   

 是PT

notes: 没有扩展位,rtp header packet[size] = 0x80.如果有,rtp header packet[size] = 0x90.x位为1.

Rtp 扩展头
RTPFB: rtp 扩展x.
RTP报头扩展:1字节,2字节,3字节扩展。单字节扩展beme.最常见的应用是TransportSequenceNumber

RTP Header Extension
janus的head extension实现 ----to add

int janus_rtp_header_extension_set_abs_sned_time(char *buf, int len, int id,	int64_t time_ms){
    uint32_t time_24bits = janus_ms_to_24bits(time_ms);
    char *ref = NULL;
    if(janus_rtp_header_extension_find(buf, len, id, NULL, NULL, &ref) == 0) {
        ref[1] = time_24bits >> 16;
        ref[2] = time_24bits >> 8;
        ref[3] = time_24bits;
        time_24bits = (ref[1] << 16) & 0x00FF0000| (ref[2] << 8) & 0x0000FF00 | (ref[3]) & 0x000000FF;
        return 0;
    } else if(janus_rtp_header_extension_find(buf, len, JANUS_RTP_TYPE_EXTMAP_TRANSPORT_WIDE_CC, NULL, NULL, &ref) == 0){
        ref[0] = ((uint8_t)id << 4 ) | 0x2;
        ref[1] = time_24bits >> 16;
        ref[2] = time_24bits >> 8;
        ref[3] = time_24bits;
        return 0;
    }
    return -1;
}

int janus_rtp_header_extension_parse_abs_sned_time(char *buf, int len, int id, double *time_ms) {
    char *ref = NULL;
    if(janus_rtp_header_extension_find(buf, len, id, NULL, NULL, &ref) < 0)
        return -1;
    /*  0                   1                   2                   3
           0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
           |  ID   | L=2   |   				24bit  Timestamp 		    	|
           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        */ 
    uint32_t time_24bits = (ref[1] << 16) & 0x00FF0000 | (ref[2] << 8) & 0x0000FF00 | (ref[3]) & 0x000000FF;
    *time_ms = (double)(time_24bits) * 1000 / (1 << 18);
    

WebRTC研究:RTP报头扩展 - 剑痴乎 

标签:00,24bits,草稿,extension,RTP,time,ref,rtp
来源: https://blog.csdn.net/fdsafwagdagadg6576/article/details/122273604

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有