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,这个迫切想知道
...全文
1896 5 打赏 收藏 转发到动态 举报
写回复
用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帧无法解,也就导致了所有的画面都无法解了
内容由流媒体协议等基本知识,视频媒体基本知识,流媒体服务器搭建实战,流媒体工具使用实战等内容组成。由本人“天地会珠海分舵”(http://blog.csdn.net/zhubaitian)耗时一个月整理而成,现分享给大家。 章节内容分布如下: 第1章Streaming 协议和服务器概览学习摘录 7 1.1 Protocol support 8 1.2 Media Container format support 12 第2章Streaming 协议学习摘录 15 2.1 MMS协议简介 15 2.2 RTP相关协议简介 15 2.2.1 RTP与RTCP协议简介 15 2.2.2 RTSP协议简介 16 2.2.3 流传输过程 17 2.3 RTMP vs RTMFP 18 2.3.1 RTMP协议简介 18 2.3.3 RTMFP 简介 19 2.3.4 RTMP VS RTMFP 20 2.4 MPEG-TS 20 2.4.1 MPEG2-TS与MPEG2-PS的区别 20 2.4.2 PES/ES/TS简介 20 2.5 Smooth Streaming 21 2.5 HLS简介 24 2.6 MPEG-DASH 26 2.6.1 简介 26 2.6.2 Dash播放器列表 28 2.6.3 MPD格式 30 2.6.5 MPD在线检查器 31 2.6.5 MPD 格式理解个人小结 31 2.6.6 PMD格式的多样性 32 2.6.7 MPD 支持的Profiles 44 2.6.8 DASH传输协议支持 44 2.7 HLS VS MPEG-DASH 45 2.8 Real Data Transport Protocol 45 2.9 webM 45 第3章 视频容器格式学习摘录 47 3.1 视频容器VS 视频编码 47 3.2 3GP容器 48 3.2 AVI容器(.avi) 49 3.3 WMV vs ASF 容器(.wmv/.asf) 49 3.3.1 ASF高级串流格式简介以及和WMA/WMV的区别 49 3.3.2 ASF和WMA/WMV的区别官方解析 50 3.4 QuickTime容器(.mov) 50 3.5 Ogg vs Ogm容器(.ogg) 51 3.5.1 Ogg容器格式 51 3.5.2 Ogm 51 3.5.3 Ogg vs Ogm 52 3.6 Matroska容器(.mkv|.mka|.mks) 52 3.7 MP4容器 53 3.7.1 简介 53 3.7.2 MP4格式详解 53 3.8 MPEGE TS容器 61 3.9 FLV容器 62 3.10 ABS – Adaptive Bitrate Streaming 自适应串流容器 62 3.11 码率 63 3.12 流媒体的3种格式 63 3.12.1 压缩媒体文件格式 63 3.12.2 流文件格式 64 3.12.3 流媒体发布格式 64 第4章 视频编码格式学习摘录 66 4.1视频编码格式简介 66 4.2主流视频编码格式比较 67 4.2.1 MPEG编码格式 67 4.2.2 DivX/XviD编码格式 68 4.2.3 H.264/X264编码格式 69 4.2.4 WMA-HD/VC-1编码格式 71 4.2.5 各主流编码格式比较 72 4.3 视频解码 73 第5章ffmpeg学习摘录 74 5.1 简介 74 5.2 功能 74 5.3 支持的格式和编码 75 5.4 支持的流媒体协议 76 5.5 ffmpeg视频解码架构示例简略 76 5.5.1 解复用(Demux) 77 5.5.2 解码 (Decode) 78 5.5.3 Ffmpeg中解码流程对应的API函数 78 第6章GStreamer学习摘录 80 6.1 GStreamer简介 80 6.2 GStreamer编写MP3播放器实例 80 6.2.1 初始化GStreamer 80 6.2.2 创建GStreamer管道元件 81 6.2.3 创建元件三元组之GStreamer数据源 81 6.2.4 创建元件三元组之解码器 (即GStreamer过滤器) 插件 81 6.2.5 创建元件三元组之GStreamer接收器 81 6.2.6 链接GStreamer元件三元组到管道 – 播放 82 6.2.7 启动GStreamer管道数据处理流程 82 6.2.8 MP3命令行播放器源代码完整实例 82 第7章 ffmpeg VS GStreamer比较学习摘录 85 7.1 Pipeline设计模式简介 85 7.2 ffmpeg vs GStreamer 86 7.2.1 网上解析翻译 86 7.2.1 FFmpeg和GStreamer异同小结 87 第8章 流媒体服务器搭建摘录 88 8.1 VLC 88 8.1.1 VLC编码和容器兼容性 88 8.1.1 VLC 配置VOD点播 88 8.1.2 VLC 配置组播服务器 90 8.2 Wowza Streaming Engine 91 8.2.1 简介及安装 91 8.2.2 MPEG-DASH 支持 92 8.2.3 如何使用VLC作为直播源 95 8.2.4 点播VOD配置 112 8.3 Nex Gen Media Server (NGMS) 114 8.3.1 Introduction 114 8.3.2 Feature List 115 8.3.3 Practice in Action 116 8.4 IIS Smooth Streaming(IIS Media Service) 117 8.4.1 Getting Started with IIS Smooth Streaming 117 8.4.2 Use VLC to play the Smooth Stream 128 8.4.3 创建Smooth Stream 文件 129 8.4.4 提供DASH服务时IIS的关键设置 129 8.4.5 Dash on IIS步骤 130 第9章 相关工具学习摘录 137 9.1 Bento4 MP4工具包 137 9.1.1 Introduction 137 9.1.2 所包含的工具简介 138 9.1.3 MPEG DASH Adaptive Streaming 139 9.1.4 Serving DASH Streams 147 9.2 MP4Box 149 9.2.1 简介 149 9.2.2 对DASH的支持命令帮助 150 9.2.3 MP4Box: fragmentation, segmentation, splitting and interleaving 153 9.2.4 把MP4转换成TS 155 9.2.5生成不同profile的MPD 155 9.2.6指定每个Representation的bandwidth 156 9.2.7生成多个period的MPD 156 9.2.8生成多个Representation的MPD 156 9.2.9 生成多个Segment的MPD 156 9.2.10 生成(Subsegment) SegmentBase拥有 indexRangeExact 为true的MPD 157 9.2.11 生成多个AdaptionSet的MPD 158 9.2.12 模拟live直播 158 第10章 流媒体服务器搭建指导 159 10.1 所需搭建服务器Matrix 159 第11章 附录 163 11.1 Wowza支持格式 163 11.2 ISO Base Media File Format (IBMFF) 163 11.3 DASH所支持Profile分类 164

23,131

社区成员

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

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