RTP传输H264视频流,VLC解码失败!!

robing4500 2014-01-21 05:19:22
Hello:
第一步:内容简介
只使用RTP协议,不使用RTCP,读取H264的视频文件,提取NALU单元,打包成RTP发送,在VLC端接收播放。

NALU单元打包成RTP是参考RFC3984规范,只是用了单NALU和分片两种方式,聚合方式未使用
NALU的提取已经测试过正确,RTP的打包发送也正常,在wireshark抓包分析正常

注:发送的是编码后的ES流(即尚未添加PES头等信息的裸流)
第二步:问题描述:
提出的疑问:
1.RTP 传输 H264的码流是ES流吗,还是要经过PES打包的PES流,或者进一步打包的PS流
2.RTP参考RFC3984规范分片传输时,第一个包的的NALU头需要吗?
遇到的现象:VLC接收没问题,但是不能解码,显示信息如下:
main debug: Buffering 0%
main debug: Buffering 3%
main debug: Buffering 6%
packetizer_h264 debug: found NAL_SPS (sps_id=0)
packetizer_h264 debug: found NAL_PPS (pps_id=0 sps_id=0)
main debug: Buffering 9%
main debug: Buffering 13%
main debug: Buffering 16%
main debug: Buffering 19%
main debug: Buffering 23%
main debug: Buffering 26%
main debug: Buffering 29%
main debug: Buffering 33%
main debug: Buffering 36%
main debug: Buffering 39%
main debug: Buffering 43%
main debug: Buffering 46%
main debug: Buffering 49%
main debug: Buffering 53%
main debug: Buffering 56%
main debug: Buffering 59%
main debug: Buffering 63%
main debug: Buffering 66%
main debug: Buffering 69%
main debug: Buffering 73%
main debug: Buffering 76%
main debug: Buffering 79%
main debug: Buffering 83%
main debug: Buffering 86%
main debug: Buffering 89%
main debug: Buffering 93%
main debug: Buffering 96%
main debug: Buffering 99%
main debug: Stream buffering done (1033 ms in 33 ms)
main debug: Decoder buffering done in 24 ms
main error: ES_OUT_SET_(GROUP_)PCR is called too late (pts_delay increased to 1000 ms)
main error: ES_OUT_RESET_PCR called
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
main debug: Buffering 0%
live555 warning: no data received in 10s, eof ?
main debug: EOF reached
main debug: Stream buffering done (0 ms in 8738 ms)
main debug: Decoder buffering done in 0 ms
main debug: removing module "avcodec"
main debug: finished input
avcodec debug: ffmpeg codec (H264 - MPEG-4 AVC (part 10)) stopped
main debug: killing decoder fourcc `h264', 0 PES in FIFO
main debug: removing module "packetizer_h264"
main debug: removing module "live555"
main debug: removing module "filesystem"
main debug: Program doesn't contain anymore ES
main debug: dead input
main debug: changing item without a request (current 0/1)
main debug: nothing to play

SDP文件如下:
m=video 10000 RTP/AVP 97
a=rtpmap:97 H264/90000
a=fmtp:97 packetization-mode=1
a=framerate:10
c=IN IP4 192.168.9.187

第三步:求解
1.目前不知道为什么无法出现图像,在百度上也搜了很多,有提到过改变帧率,我这里试了没什么用。有兴趣的可以一起探讨下

第四步:共同探讨
1.ORTP库是一个开源的C编写的RTP协议的库,使用了下如果调用用例里面的接口来发送数据,那么无法实现分片发送(忽略mark标记的话可以勉强实现)
2.有跟多的ORTP使用的方面知识非常欢迎大家踊跃贡献
3.目前最想知道的是RTP 发送H264流到时是要ES还是PES,或者PS,这个迫切想知道
...全文
2184 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
艳艳lisa 2015-08-07
  • 打赏
  • 举报
回复
[0xb2023cb0] es demux error: cannot peek [h264 @ 0xb2030400] negative number of zero coeffs at 19 14 [h264 @ 0xb2030400] error while decoding MB 19 14 [h264 @ 0xb2030400] concealing 50 DC, 50 AC, 50 MV errors [h264 @ 0xb2017220] corrupted macroblock 19 14 (total_coeff=-1) [h264 @ 0xb2017220] error while decoding MB 19 14 [h264 @ 0xb2017220] concealing 50 DC, 50 AC, 50 MV errors [h264 @ 0xb2030400] corrupted macroblock 19 14 (total_coeff=-1) [h264 @ 0xb2030400] error while decoding MB 19 14 [h264 @ 0xb2030400] concealing 50 DC, 50 AC, 50 MV errors [h264 @ 0xb20f1be0] cbp too large (4294967295) at 15 14 [h264 @ 0xb20f1be0] error while decoding MB 15 14 [h264 @ 0xb20f1be0] concealing 54 DC, 54 AC, 54 MV errors [h264 @ 0xb2030400] concealing 52 DC, 52 AC, 52 MV errors [h264 @ 0xb2017220] concealing 56 DC, 56 AC, 56 MV errors [h264 @ 0xb20f1be0] concealing 56 DC, 56 AC, 56 MV errors [h264 @ 0xb2030400] concealing 71 DC, 71 AC, 71 MV errors [h264 @ 0xb2017220] concealing 71 DC, 71 AC, 71 MV errors [h264 @ 0xb20f1be0] concealing 56 DC, 56 AC, 56 MV errors [h264 @ 0xb2030400] concealing 56 DC, 56 AC, 56 MV errors [h264 @ 0xb2017220] corrupted macroblock 19 14 (total_coeff=-1) [h264 @ 0xb2017220] error while decoding MB 19 14 vlc接收h264 rtp流出现这样的提示,请问是什么原因?
wyt393520798 2014-10-23
  • 打赏
  • 举报
回复
引用 2 楼 lk523412907 的回复:
1、裸的H264码流可以直接通过RTP进行发送,但是发送的方式可以不同,这要看对面对RTP包中的数据做怎样的处理,有的可以直接将裸的H264码流在不进行严格NALU分片的情况下直接对H264数据进行平分,接收端只是简单地对RTP进行拼包,这样可以,同样,严格的对RTP的分包必须对H264码流进行分析,向接海康的平台时,RTP发送H264裸码流必须将H264进行NALU的分包,每个分片再通过RTP发送。接收端通过对RTP中的NALU拼包才还原裸的H264码流。 2、裸的H264码流也可以通过RTP+PS流的方式进行打包发送,但是要对H264(ES)进行分包处理,不然高清的视频帧在 PS封装时会出现无法解码的情况,具体的解决方式:对长度过长的H264数据帧(ES)进行PES分包处理,在打成PS通过RTP发送
请问一下,我们在对接海康平台时用live555打包RTP发送H264裸码流,对方怎么不能解码显示?
zq1564171310 2014-09-19
  • 打赏
  • 举报
回复
引用
main debug: Buffering 0% main debug: Buffering 0% main debug: Buffering 0%
感觉应该是缓冲失败! 都下不下来东西,怎么解码?
lk523412907 2014-08-27
  • 打赏
  • 举报
回复
1、裸的H264码流可以直接通过RTP进行发送,但是发送的方式可以不同,这要看对面对RTP包中的数据做怎样的处理,有的可以直接将裸的H264码流在不进行严格NALU分片的情况下直接对H264数据进行平分,接收端只是简单地对RTP进行拼包,这样可以,同样,严格的对RTP的分包必须对H264码流进行分析,向接海康的平台时,RTP发送H264裸码流必须将H264进行NALU的分包,每个分片再通过RTP发送。接收端通过对RTP中的NALU拼包才还原裸的H264码流。 2、裸的H264码流也可以通过RTP+PS流的方式进行打包发送,但是要对H264(ES)进行分包处理,不然高清的视频帧在 PS封装时会出现无法解码的情况,具体的解决方式:对长度过长的H264数据帧(ES)进行PES分包处理,在打成PS通过RTP发送
robing4500 2014-01-22
  • 打赏
  • 举报
回复 1
问题已经解决: 1.原因:我在分片打包中,分片的负载是从NALU的head开始的 2.解决方法:分片打包的时候,其实NALU的head信息已经在FU_HEAD中体现了,就不需要再次重复了,所以FU的荷载是从NALU->head后开始,不需要传递NALU的头了 注:VLC显示的这些信息,有人回复我是说缺少I帧,确实我在抓包中发现多了一个字节,导致I帧无法解,也就导致了所有的画面都无法解了

23,216

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧