免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8828 | 回复: 2
打印 上一主题 下一主题

[C] RTP协议扩展头问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-15 14:25 |只看该作者 |倒序浏览
在看开源的opal的rtp协议实现部分碰到了问题,具体如下:
在取得一个RTP协议的数据报的时候,需要去掉RTP头部,取得真正的数据,代码里计算
RTP头部长度的代码如下:
int GetHeaderSize() const {
    int size;
    size = 12;
&nbsp;&nbsp;&nbsp;&nbsp;if (_frameLen < 12)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&nbsp;&nbsp;&nbsp;&nbsp;size += (_frame[0] & 0x0f) * 4;
&nbsp;&nbsp;&nbsp;&nbsp;//判断有没有设置RTP头部扩展

&nbsp;&nbsp;&nbsp;&nbsp;if (!(_frame[0] & 0x10))/*没有扩展*/
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return size;
&nbsp;&nbsp;&nbsp;&nbsp;/*头部扩展了,扩展头格式见rfc3550的5.3.1*/
&nbsp;&nbsp;&nbsp;&nbsp;if ((size + 4) < _frameLen)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (size + 4 + (_frame[size + 2] << 8) + _frame[size + 3]);
&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&nbsp;&nbsp;}

具体的问题在最后计算扩展头的大小的时候,代码里面算扩展头4个字节后的大小的时候只是把长度直接加上去了,但是我看协议里面,这两个
字节指定的长度是指后面32位数据的个数,应该长度要乘以4才对。
所以想问问是不是我对协议的理解有问题,RFC3550对扩展头部分的描述如下:
If the X bit in the RTP header is one, a variable-length header extension must be appended to
the RTP header, following the CSRC list if present. The header extension contains a 16-bit length
eld that counts the number of 32-bit words in the extension, excluding the four-octet extension
header (therefore zero is a valid length).

论坛徽章:
0
2 [报告]
发表于 2009-10-15 16:12 |只看该作者
字节指定的长度是指后面32位数据的个数

size是int

论坛徽章:
0
3 [报告]
发表于 2009-10-15 17:16 |只看该作者
原帖由 jetking 于 2009-10-15 16:12 发表
字节指定的长度是指后面32位数据的个数

size是int

The header extension contains a 16-bit length
fi eld that counts the number of 32-bit words in the extension
主要是这句话,我的理解是前面16位的区域说明了后面的扩展头的大小,应该是每增加32位的大小,,这个length field就会增加一。
但是看代码里直接就是以8位的字节为单位了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP