H.264视频数据封装成TS解决思路
发布时间:2011-06-27 19:28:19 文章来源:www.iduyao.cn 采编人员:星星草
H.264视频数据封装成TS
目标:输入为H.264 ES流,输出为TS流,暂不考虑音频。
问题:按照iso-13818协议介绍的格式和ffmpeg的mpegtsenc.c的代码封装出来的TS包无法使用VLC播放。通过VLC播放器的debug信息,可以看到PAT、PMT成功解析,也找到了视频流(H.264 ES)对应的PES包。
mpegtsenc.c将PES头信息写入了一些固定的值,比方PTS_DTS=10,即只有PTS没有DTS,要想正确解码是否每个PES header必须要DTS和PTS?无法解码是不是因为没有DTS导致的?
此外,因为ffmpeg的TS封装都是针对MPEG-2的,例如PMT中的视频stream_type都是0x2。除此以外,还有哪些字段的值对于MPEG-2和H.264是不同的?
请做过TS封装的各位大侠给予解答,十分感谢!
------解决方案--------------------
应该可以吧,stream_type=0x1b,编码器自己会去填啊,不用自己管,关键是你送进来的数据对不对,H264数据流格式有两种,一种是带NAL的,前几个字节是长度,通常这种格式叫AVC,第二种是像MPEG Video,每帧是一0x00 0x00 0x00 0x01开始的。TS只接受第二种。要是第一种的话要转换一下。
------解决方案--------------------
------解决方案--------------------
楼主的这种是第二种格式,应该是正确的,你的几个字节正好也是h264的sps和pps头。
时间戳只会影响播放,不会导致解码器解码失败。我没调试过VLC,不知道TS流时间戳不对时送进解码器会不会丢数据,但通常丢帧处理应该是在显示模块里面做的,应该不影响解码过程。
h264能照常播放是因为播放器按照帧率理论值来播放的,显示顺序是解码器解码出来就已经调整好了,然后打上时间戳给显示模块处理。
建议先用其他播放器播放看看,可能是VLC的问题,也可能是你打包时丢掉了数据。因为TS是将每一帧拆分打包的,一个TS包数据大概就184字节,肯定不是一个完整帧的,一般h264的解码器都需要一帧一帧的给,ffmpeg需要调用h264 parser来查找每一帧才行,不知道你送到解码器是不是一个完整帧,每一帧开头应该是0x00 00 00 01。
------解决方案--------------------
h264封装到TS中,stream_type和stream_id的值跟mpeg2有所不同,另外还需要把sps+pps的信息写到PMT的decoder_specific_info当中。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
DSHOW push
推模式,ConnectDirect 的,为什么我一直反回错误
下级级用的是HAALI的一个东西,用CMemStream拉模式的时候是可以连接的
...
-
ffmpeg编码后视频速度不正确,质量也不好,求助,求助,求助,求助啊
对采集到得摄像头图像进行编码保存,发现得到的视频质量不好,而且速度不...
-
请问怎么在live555中接收jpeg
请问,我现在想接收一个服务器发送的jpeg 不知道怎么用live555做一个客户端, 接收它并显示。
请问应...
-
XP SP3 YUV420 的fiter依赖 在线等答案……
链接时媒体类型为WMMEDIASUBTYPE_I420
有的XP可以播放出来
有的就不行,请问不能播放...
-
如何获取通过麦克风来获取当前说话的音量?
使用Wave系统API采集音频输入的数据,当数据缓存区满了后,收到消息取得数据后,如何根据这里...
-
RFC3984 有没有完整的中文版本呢?
搜了几个 都是一半英文一半中文的。哎 郁闷!
------解决方案--------------------
英文的凑合...
-
介绍一个学习directshow和com、atl技术的网站
有一个学习directshow和com、atl技术的网站,还可以下视频教程,共享给大家: http://www...
-
攻击帖:jrtplib、live555是个垃圾,刚开始搞流媒体就用这玩意就是找s
不解释~
来丢我砖头吧~~
我分太多了用不完~ 支持的散分~~~
...
-
50分,寻找《Visual C++音频/视频处理技术及工程实践》的随书光盘?
急于使用其中的几个例程。若哪位好心人能够提供,非常感谢!!我的QQ:52...
-
h264的高宽比怎么获取?
我看标准里面只有样点的高宽比啊。
还有,bit rate可以读出来吗?
------解决方案--------------------
是要...