RTP传输H264视频流,VLC解码失败!!
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,这个迫切想知道