Chinaunix首页 | 论坛 | 博客
  • 博客访问: 395410
  • 博文数量: 119
  • 博客积分: 1796
  • 博客等级: 上尉
  • 技术积分: 890
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-14 10:16
个人简介

守正

文章分类
文章存档

2013年(1)

2011年(40)

2010年(78)

分类: 嵌入式

2010-09-15 19:37:08

发表于:2009-12-29 17:02:29
目标:输入为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封装的各位大侠给予解答,十分感谢!
===================================================
tufaqing #1楼 得分:10回复于:2009-12-30 10:05:09
应该可以吧,stream_type=0x1b,编码器自己会去填啊,不用自己管,关键是你送进来的数据对不对,H264数据流格式有两种,一种是带NAL的,前几个字节是长度,通常这种格式叫AVC,第二种是像MPEG Video,每帧是一0x00 0x00 0x00 0x01开始的。TS只接受第二种。要是第一种的话要转换一下。

===================================================
mediaWorker #2楼 得分:0回复于:2009-12-30 10:28:29
感谢tufaqing!
 
编码之后的H.264码流开始的几bit是0x00 00 00 01 67 42 00 28 E9 01 68 24 C8 00 00 00 01 68 CE 38 80 ......,应该是你所说的“第二种像MPEG Video”,那就不需要转换了。
请问如果TS流中没有PCR、ESCR、PTS、DTS信息是不是视频解码器就无法获得正确的输入码流?
===================================================
blackboyofsnp
#3楼 得分:5回复于:2009-12-31 00:10:40

里面有同步信息,没有它,怎么同步。。。
===================================================
mediaWorker #4楼 得分:0回复于:2010-01-04 09:43:19
我暂时还不考虑同步,现在的问题是经过H.264编码压缩后的码流可以使用VLC player播放,可以在封装成TS之后就无法播放了。请问如果是TS包,播放器一定要找到DTS才能会启动解码器吗?如果是.h264码流,一样也没有DTS和PTS,VLC player是如何知道解码及显示顺序的呢?

我用VLC player调试了这种无法播放的ts码流,发现PAD表、PMT表,还有ES的PID、stream_type这些都能正确解析,但是在解到video PES数据时,h264_packetize解析了所有NAL包,但是送入H264解码器的码流却不完整,不知道是什么原因导致这部分码流数据的丢失?

另外一个问题请问tufaqing或其他知道答案的人:编码之后的H.264码流开始的几bit是0x00 00 00 01 67 42 00 28 E9 01 68 24 C8 00 00 00 01 68 CE 38 80 ......,这种码流是“第一种是带NAL的,前几个字节是长度,通常这种格式叫AVC”?还是“第二种是像MPEG Video,每帧是一0x00 0x00 0x00 0x01开始的。”?
===================================================
tufaqing #5楼 得分:15回复于:2010-01-04 17:16:43
楼主的这种是第二种格式,应该是正确的,你的几个字节正好也是h264的sps和pps头。
时间戳只会影响播放,不会导致解码器解码失败。我没调试过VLC,不知道TS流时间戳不对时送进解码器会不会丢数据,但通常丢帧处理应该是在显示模块里面做的,应该不影响解码过程。
h264能照常播放是因为播放器按照帧率理论值来播放的,显示顺序是解码器解码出来就已经调整好了,然后打上时间戳给显示模块处理。
建议先用其他播放器播放看看,可能是VLC的问题,也可能是你打包时丢掉了数据。因为TS是将每一帧拆分打包的,一个TS包数据大概就184字节,肯定不是一个完整帧的,一般h264的解码器都需要一帧一帧的给,ffmpeg需要调用h264 parser来查找每一帧才行,不知道你送到解码器是不是一个完整帧,每一帧开头应该是0x00 00 00 01。
===================================================
ttxk #7楼 得分:10回复于:2010-01-13 15:18:13
h264封装到TS中,stream_type和stream_id的值跟mpeg2有所不同,另外还需要把sps+pps的信息写到PMT的decoder_specific_info当中。
===================================================
mediaWorker #8楼 得分:0回复于:2010-01-13 16:16:41
H264的stream_type=0x1B,MPEG-2的stream_type = 0x02; H264的stream_id和MPEG-2的相同,都为0xE0。

请问ttsk,decoder_specific_info是PMT中的一个字段吗?我在协议中没找着啊。

请问各位,如果ts文件没有PCR、PTS和DTS能用vlc或者暴风影音播放吗?有没有哪位做过这种实验的?软件播放器还需要这种时间信息吗?ES数据也没有时间信息,vlc也可以播放,是不是软件播放器必须要获取到ts中的时间信息才能将正确的码流数据送给解码器?
===================================================
tonydel #11楼 得分:0回复于:2010-05-10 15:37:26
VLC必须要打PCR才能解
===================================================
zoulie #12楼 得分:0回复于:2010-06-22 22:32:48
试过将H264的TS包parser出来的ES流,暴风影音能播放
===================================================
LIUSHIJUN123456789 #13楼 得分:0回复于:2010-08-21 21:23:03
哪位有ES(h.264编码)到TS的打包源码呀,可以有偿购买。 我的邮箱是gaoxue@mail.sc.cninfo.net
===================================================
oldwizard #14楼 得分:0回复于:2010-09-08 10:52:27
本人有 H264, MPEG2,MPA ES流到TS打包的源代码,邮箱是webwidetalk@hotmail.com. 有意者请联系

阅读(4979) | 评论(0) | 转发(0) |
0

上一篇:【转】ARM VFP的一点体会

下一篇:新MID产品

给主人留下些什么吧!~~