社区
多媒体/流媒体开发
帖子详情
MPEG2 TS的IPB帧判断问题
seanzh
2006-03-07 11:35:16
请教,在MPEG2 TS中如何判断和抽取I P B帧?
...全文
819
18
打赏
收藏
MPEG2 TS的IPB帧判断问题
请教,在MPEG2 TS中如何判断和抽取I P B帧?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
nodef
2006-03-09
打赏
举报
回复
seanzh(云剑),如果是基于RTSP 的Server,我想你是要做一个IPTV的系统把,要在Server端实现快放慢放回放这些功能,可是Server端是没有播放的,只提供TS流的发送,依我个人的理解是没有必要分离视频数据再复用的,而且如果一个TS流中不包含控制信息的话接受端是无法播放的。
由于TS流中基本上每个PES包都会提供播放时间PTS和解码时间DTS,我的猜测是可以在复用时更改TS流中的PTS和DTS信息,例如如果要快放的话可以把PTS和DTS提前,这样只要用户播放端的音视频解码器足够快,应该是可以的;当然目前为止没看到这方面的应用,只是个人猜测。
如果是IPTV的话,使用RTP和RTSP协议,也可以试一下MPEG-4的系统层方法,可以使用14496-1中的SL以代替TS和PES,这样会更节约带宽,SL同样也提供了音视频同步的时间信息
seanzh
2006-03-09
打赏
举报
回复
哦,呵呵,我说的是机顶盒的,
我主要是想做一个RTSP 的Server,
在Server端实现快放慢放回放这些功能,
我要把经过处理的TS流发出去,所以只能在最开始的地方来处理。
按照nodef(鞋带) 所说,
那是否我还是要把TS包Demux出来变成原始流,经过处理之后再Mux回TS流?
对于其他的TS控制信息包和Audio包又该如何处理?
日总是我哥
2006-03-09
打赏
举报
回复
IMediaSeeking接口的SetRate方法
更多信息:http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_c/directx/htm/imediaseekinginterface.asp
nodef
2006-03-09
打赏
举报
回复
1.
“记下这个位置pic_start
3. 扫描文件, 一直到下一个PICTURE_START_CODE, 把从pic_start到当前位置的所有信息写入新文件;” 这种方法是可以的,但是由于在TS文件中视频数据时被分割成一个个TS包(188字节),而每个TS包中又包含TS包头和附加信息等,因此要依次把每个TS包中的包头等去除,提取出每个包中的有效负载(即视频数据),再把提取出的数据依次存储为一个完整的picture,相当于每隔188个字节就要进行一次这种处理,即整个文件都要修改。
2.
要根据你用来播放的新文件格式来处理,avi,mpg不同的格式有不同的需求,事实上在PC上ts文件也是可以直接播放的,只要你安装了TS demux插件
支持快放/慢放/回放需要看应用的场合,如果是机顶盒的广播应用,由于TS流的传输速率是固定的,基本上快放/慢放/回放很困难;如果是在PC上播放文件,可以使用DirectShow架构,在filter里来调整媒体数据的播放时间,是比较方便的
seanzh
2006-03-09
打赏
举报
回复
CoolSlob,怎么SetRate?
nodef(鞋带),经过几天苦看13818的一些资料加上CoolSlob的那份代码,已经知道一点点,
加上你的回答又明了了不少,
请教:
如果我抽取I帧, 是否可以这样做?
1. 先把TS的头写到新文件中, 这个头是从TS文件头一直到带PES头的这个帧.
2. 判断PICTURE_START_CODE所带的帧是否所需要的帧, 如果是, 记下这个位置pic_start
3. 扫描文件, 一直到下一个PICTURE_START_CODE, 把从pic_start到当前位置的所有信息写入新文件;
4. 如此循环扫描一个个的帧, 直到文件结束;
但是这样会有问题,:
1. 就是在遇到不是I帧的时候丢弃该包, 而TS封装的包必须是188个字节, 那是否相应的要修改TS包的信息? 这样会不会导致整个的TS文件都要修改?
2. 在扫描文件的过程中, 如果遇到不是Video的TS包(可能有Audio包, 以及一些TS的控制信息包), 是否该全部写入到新文件中才能正确播放?
此外, 如CoolSlob所说, 要支持快放/慢放/回放是否有更好的方法? 谢谢!
nodef
2006-03-09
打赏
举报
回复
1.根据TS包头中的PID找到TS流里的PAT表,其TS的PID为0x00;
2.找到PAT表后,根据其中携带的PMT表的TS包PID找到PMT表;
3.找到PMT表后,根据其中携带视频的TS包PID就可以判断出包含视频数据的TS包;
4.对于mpeg-1和mpeg-2视频,一般在TS复用时一个PES包包含一个picture,对于mpeg-2 video,picture可以是桢图像(frame)或场图像(field)
5.找到视频TS包中一个包含PES头的TS包(PID为PMT中的视频PID,TS包头中payload_unit_start_indicator标志为1),这个包里会包含picture header信息
6.找到picture header(以0x00000100开始)后,根据其中的picture_coding_type信息判断其为I,P,B或D桢,注意,D桢只在mpeg-1 video中使用
有关TS,PES,PAT,PMT信息见13818-1,有关picture header,picture_coding_type信息见13818-2和11176-2
日总是我哥
2006-03-09
打赏
举报
回复
>>快放慢放
不是可以通过SetRate来调节吗?
如果输出这些帧另存为文件是为了实现“快放慢放”,那工程大了吧?!
seanzh
2006-03-09
打赏
举报
回复
加了150分还是没有引起各位高人们的兴趣吗?呵呵
nodef
2006-03-09
打赏
举报
回复
有的,可以使用DitectX开发包自带的graphedit工具,在解复用filter的视频输出pin后直接连
file writer filter,就可以将纯视频数据保存成文件了
seanzh
2006-03-09
打赏
举报
回复
nodef(鞋带),这还真是个不错的主意,我试试看,
对了,有没有能把快放慢放之后的流输出成文件的播放器?
或者就是把I帧输出的也可以?
seanzh
2006-03-08
打赏
举报
回复
是否有播放器可以直接把经过快放慢放处理过后的MPEG流信息输出成文件的?
或者说就是把这些帧直接输出成文件的?
seanzh
2006-03-08
打赏
举报
回复
因为我最根本的是想实现MPEG2的快放慢放等问题,
而根据一些资料显示,这也不失为一种实现的方法,
虽然据我那位同事所说,会有更好的方法,只是我目前也不知道是有什么更好的方法来实现这个
日总是我哥
2006-03-08
打赏
举报
回复
音频和视频的PICTURE_START_CODE不一样的(而各种音频格式的START_CODE也不一样)
你不是只抽取IPB帧吗?怎么会造成不同步呢?
因只是肤浅地了解,更多问题等高人们来解答吧-_-!!
seanzh
2006-03-07
打赏
举报
回复
看到PS的格式里确实有这样的判断,可以根据PICTURE_START_CODE
之后来判断帧类型,
但是这对于音视频混合的怎么办呢?
抽取出来之后会不会造成不同步?
另外,对于TS格式该如何处理?因为TS是PS经过包装后的产物,
这样又该如何处理?
日总是我哥
2006-03-07
打赏
举报
回复
嘿嘿,问深奥了我答不上来。
等高人来回答吧:)
seanzh
2006-03-07
打赏
举报
回复
多谢CoolSlob,
我看到代码里仅仅是把PICTURE_START_CODE后的东东抽取出来,
这样对Audio会不会有影响?
另外,在MPEG的标准里好象没有看到这样的说明?
我请教了一位以前的同事,是根据MPEG2 TS格式来说的,
他说需要根据首部的PID来分析PAT,再找到PMT,
再把相关的信息组合成PS相关的信息,再进行判断,
能否请解释一下?
谢谢!
zhaojian999
2006-03-07
打赏
举报
回复
大傻的贴要顶
日总是我哥
2006-03-07
打赏
举报
回复
??已发往你在另一个贴里的邮箱.
ts
tools-1.11
<strong> </strong> if (is_I_or_IDR_frame(access_unit)) //
判断
是否是I
帧
,I
帧
则p
ts
/d
ts
;否则打pcr err = write_access_unit_as_
TS
_with_p
ts
_d
ts
(access_unit,video_context, output,DEFAULT_VIDEO_PID, TRUE,...
音频和视频编码解码过滤器 Media Player Codec Pack Plus 4.5.7.115 安装版.zip
所有决议案高达,和包括SD(标准清晰度)480I,480P,576I,576P+ HD(高清晰度)720I,720P,1080I,1080P和超越。 通过使用SlySoft AnyDVD的HD通过这个解码包,Windows Vista和Windows 7用户可以播放: 受保护的...
TS
流
判断
I
帧
在哪个字段有
判断
I,B,P
帧
的信息[整理] 在哪个字段有
判断
I,B,P
帧
的信息?(
MPEG
2,H.264) . 1.根据
TS
包头中的PID找到
TS
流里的PAT表,其
TS
的PID为0x00; 2.找到PAT表后,根据其中携带的PMT表的
TS
包PID找到PMT表; 3....
在
MPEG
2
TS
中如何
判断
和抽取I P B
帧
?
mpeg
2中音视频不同步
mpeg
2中音视频不同步1....找到PMT表后,根据其中携带视频的
TS
包PID就可以
判断
出包含视频数据的
TS
包; 4.对于
mpeg
-1和
mpeg
-2视频,一般在
TS
复用时一个PES包包含一个picture,对于mp
ts
找 H264 I
帧
的完整性
一个
mpeg
2
ts
流封装的h264视频流,怎么区分这个
ts
流中i, p, b
帧
起始位置,以及
帧
长?能从
ts
流中提取每个I
帧
,并且能识别I
帧
是否完整初步想法:1、找
帧
起始位置所在的
ts
包找视频PID包,其中 Packet_start_code_...
多媒体/流媒体开发
2,543
社区成员
20,280
社区内容
发帖
与我相关
我的任务
多媒体/流媒体开发
专题开发/技术/项目 多媒体/流媒体开发
复制链接
扫一扫
分享
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章