9crk

9crk

1个粉丝

34

问答

0

专栏

6

资料

9crk  发布于  2015-05-21 11:38:42
采纳率 0%
34个问答
5502

ortp多播问题

 

问题现象:当数据包大于xxxx时,需要拆分包发送,如http://www.ebaina.com/bbs/thread-4956-1-1.html帖子中的发送函数所示。

但是问题来了: 其中的 buffer[pos-2]=(NALU & 0x60)|28;
buffer[pos-1]=(NALU & 0x1f);
是怎么来的? 可否有相关说明? 因为找到一些资料是直接拆分发送的,也可以用。所以就不清楚了。

但我现在碰到一个问题,在进行多播时,(按照ortp/src/tests/mrtpsend.c来修改的)只有第一个被添加的IP+端口可以正常接收,其他的都会乱码。这是为何?而且抓包分析多路数据完全是一样的。但的确只有一个vlc能正常播放。 但当不拆包,直接使用 rtp_session_send_with_ts发送时,并不会乱码,不过只能发小分辨率的视频。

不能正常播放的VLC会灰色花屏,但仍然有一些运动,提示是这样的。 h264 @ 0xb5031f40] concealing 197 DC, 197 AC, 197 MV errors [h264 @ 0xb50343a0] concealing 170 DC, 170 AC, 170 MV errors [h264 @ 0xb502dbc0] concealing 415 DC, 415 AC, 415 MV errors [h264 @ 0xb5031f40] concealing 386 DC, 386 AC, 386 MV errors [h264 @ 0xb50343a0] concealing 357 DC, 357 AC, 357 MV errors [h264 @ 0xb502dbc0] top block unavailable for requested intra4x4 mode -1 at 5 0 [h264 @ 0xb502dbc0] error while decoding MB 5 0, bytestream (2983) [h264 @ 0xb502dbc0] concealing 432 DC, 432 AC, 432 MV errors [h264 @ 0xb5031f40] top block unavailable for requested intra mode at 11 0 [h264 @ 0xb5031f40] error while decoding MB 11 0, bytestream (3138) [h264 @ 0xb5031f40] concealing 432 DC, 432 AC, 432 MV errors [h264 @ 0xb50343a0] concealing 412 DC, 412 AC, 412 MV errors [h264 @ 0xb502dbc0] concealing 127 DC, 127 AC, 127 MV errors [h264 @ 0xb5031f40] concealing 102 DC, 102 AC, 102 MV errors [h264 @ 0xb50343a0] left block unavailable for requested intra mode at 0 4 [h264 @ 0xb50343a0] error while decoding MB 0 4, bytestrea

求解。。

我来回答
回答2个
时间排序
认可量排序

9crk

1个粉丝

34

问答

0

专栏

6

资料

9crk 2015-05-27 08:51:49
认可0
本帖最后由 9crk 于 2015-5-27 10:01 编辑

已解决,不使用其set、select机制即可,不知为何 。:(

拆包规则来自:[url]http://blog.csdn.net/jwybobo2007/article/details/7235942[/url]

关于h264拆包,按照FU-A方式说明:
1)第一个FU-A包的FU indicator:F应该为当前NALU头的F,而NRI应该为当前NALU头的NRI,Type则等于28,表明它是FU-A包。FU header生成方法:S = 1,E = 0,R = 0,Type则等于NALU头中的Type。
2)后续的N个FU-A包的FU indicator和第一个是完全一样的,如果不是最后一个包,则FU header应该为:S = 0,E = 0,R = 0,Type等于NALU头中的Type。
3)最后一个FU-A包FU header应该为:S = 0,E = 1,R = 0,Type等于NALU头中的Type。

因此总结就是:同一个NALU分包厚的FU indicator头是完全一致的,FU header只有S以及E位有区别,分别标记开始和结束,它们的RTP分包的序列号应该是依次递增的,并且它们的时间戳必须一致,而负载数据为NALU包去掉1个字节的NALU头后对剩余数据的拆分,这点很关键,你可以认为NALU头被拆分成了FU indicator和FU header,所以不再需要1字节的NALU头了。

zcc246

0个粉丝

1

问答

0

专栏

0

资料

zcc246 2016-10-17 11:42:12
认可0
您好 我想问下 我也用的这个帖子的方法   现在运行一段时间后就Segmentation fault 能告诉解决方法吗?
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区