3D蓝光影碟的SSIF文件
来源:互联网 发布:安妮舞会公主皮肤淘宝 编辑:程序博客网 时间:2024/05/02 01:48
由于产品开发的需要,近期工作涉及到3D蓝光影碟中的SSIF文件解析;
发现目前关于SSIF的资料真是太少了,可供程序员参考的资料则更少;
分析了一下,资料这么少的原因有2个:
第一点,蓝光组织没有免费开放SDK;(获取SDK需加入组织,需要交纳权利金,需要保证不为盗版留漏洞)
第二点,目前盗版3D蓝光影碟不太多;(有需求才有开发,即使开源软件开发者也优先开发需求量大的软件)
不过,我经过近期的努力,已经基本掌握的SSIF文件的解析方法,并且编写了DirectShow下的Parser过滤器;
以下内容比较粗疏,仅供各位同行参考:
1.访问单元:SSIF文件是192字节规格的MPEG2-TS文件,每32个TS包组成一个[访问单元],所以,一个
访问单元是192*32=6144字节,对SSIF文件的应该以6144字节的整倍数读取;
2.传输流解析:对于SSIF的每个192字节的TS包,忽略前面的4个字节,后面的188字节按照标准TS解析
方法,和其他TS流一样,它也包含PAT和PMT以及PES流;不过对于SSIF文件,只有一个[节目],也就
是说,只有一个PMT流,但是对于PMT的内容要注意,如果遇到第一个完整的PMT的section就认为OK,
那么就会无法识别MVC的PES流(有些SSIF的PMT的第一个Section不包括MVC流),所以,要继续读
取后续的PMT数据,直到遇到PMT声明MVC流信息为止;(具体原因是:SSIF文件是由M2TS文件和扩
展数据交错组成的,PMT的第一个Section很可能是M2TS的数据,必须多探测一些PMT数据,直到遇到
SSIF的扩展部分的PMT数据为止);
3.新版本文档:旧版本的ISO13818-1和旧版本的H.264文档,并没有MVC流部分;所以,你必须找到最新
版本的文档,我找到的新版本的标准文档是英文版,相比旧版本的标准文档,只是扩充了一些新东西,
阅读不算吃力;(这些标准文档在ISO/ITU可以找到)
4.参考的代码:如果只是阅读标准文档来写代码,那会很吃力,建议一边阅读FFMPEG的代码,一边阅读
标准文档,这样会更好的理解标准文档,也会有一个参照代码,便于设计自己的代码架构;
5.视频流信息:我需要开发一个用于DirectShow的源过滤器,所以,需要从SSIF文件的AVC流和MVC流里
面提取视频规格信息,总的来说,无论是AVC还是MVC,都是H.264格式的数据,只是MVC流不包含关键
帧,MVC流是依赖AVC流来解码的(MVC在解码时需要参考AVC流,所以可以看作MVC只有P帧和B帧);
提取视频规格消息的具体步骤是:首先对一个H.264的PES帧进行NALU分解,如果这个PES帧包括SPS
或PPS类型的NALU,那么就开始分析SPS的NALU数据,并且保持SPS的NALU数据和PPS的NALU数据,
当然,分析SPS数据之前,还要做脱壳处理(就是针对0x03码做脱壳),然后,以BE位序 读取SPS数据,
必须注意SPS的一些字段是以[哥伦布码]方式存储的,所以,还要考虑解码[哥伦布码],具体的脱壳和哥伦
布码算法,在H.264文档里面有非常明了的说明;我们可以从SPS里面得到[规格][级别][宽度][高度]。。这
类信息,这也是AM_MediaType里面必须的;
6.音频流信息:SSIF文件可以包含AC3/EAC3/DTS/DTS-HD/Ture-HD/LPCM这些音频流,我们必须对这些类
别的音频流一一进行规格解析,不建议完全照抄FFMPEG的解析方法,太山寨了,应该阅读这些音频流的
标准文档,然后规规矩矩的写出解析代码,免得遇到稍微特别的音轨就导致故障;必须提醒一下,这些音
频流的解析大多需要按位读取,而不是按字节读取;(DTS和AC3还存在扩展子流,挺有趣)
7.字幕流信息:一般来说,SSIF包含的大多是PGS格式的字幕流,说白了,就是YUV色系的RLE压缩的位图,
DirectShow的AM_MediaType只需要语言码,我们不需要解析PGS数据;(如果关注PGS解码方法,可以
参考FFMPEG的代码,虽然算法山寨了一些,但是能用);
8.视频的帧率:我所测试的几个SSIF文件,其中的SPS的VUI都没有帧间隔时间,就是说,没有现成的帧率参
数可供读取,那么,我只好先连续读取6个AVC的PES帧,然后用各帧的DTS差值推算,还挺准的;(注意
不要用PTS值来推算,因为PTS值可能 先大后小)
9.跳转的方法:既然是DirectShow的SourceFilter,那就应该实现IMadiaSeeking接口,实现的方法也不太难,
加载SSIF文件的时候,先扫描文件前6M字节,再扫描文件的尾6M字节,记录AVC流的最大PTS和最小PTS
数值,当需要Seeking的时候,用比例推算法 从时间推算文件位置,然后读取一点数据,看看PTS是多少,
如果比目标时间大,那么就以推测位置作为max 以文件开头作为min,再次比例推算;如果比目标时间小,
就以推测位置作为min 以文件结尾作为max,再次比例推算;只要迭代3次,误差就会小于两秒,最后,再
来一次顺序扫描,找到目标时间之前的最接近目标时间的文件位置,然后开始寻找同步点(AVC的IDR);
a.卡碟的预防:如果SSIF文件位于硬盘,那么你可以放心读取;不过,对于光碟,必须要防止光碟划伤造成的
读取卡死现象,预防的方法是采用OverLapped读取方式,可以规定读取超时;
嗯。。。我所遇到的难点和要点就这么多,目前,我的ParserSSIF部件才见过初步测试,以后还会遇到各种问
题,当我一一解决以后,我会继续增补这篇帖子,祝各位顺利
- 3D蓝光影碟的SSIF文件
- 关于蓝光影碟,有一些常识,你不一定知道
- DMP-BDT110 - 短概览松下的新的3D蓝光光盘播放机
- 3畅销的三星蓝光播放机比较
- 蓝港公布3D双端动作游戏《黎明之光》 预告片首曝
- 蓝光播放支持3D ArcSoft TotalMedia Theatre 5.0.1.87 Platinum Retail Multilanguage 破解版
- 索尼BDP-S590 3D蓝光光盘播放机具有Wi-Fi
- 蓝光
- 红蓝3D的原理
- [翻译的]蓝光技术的背景
- 蓝光卷烟回顾为什么是蓝的CIGS热
- 蓝光光盘的区域位置代码
- 复制加密的蓝光光盘
- 如何播放蓝光电影的XBMC
- 蓝光的CIGS,混合起来,省钱
- IEC62778 蓝光危害评估的标准
- 蓝光光盘
- 蓝光密码箱 免费
- 微信公众平台开发入门教程
- perl的箭头
- 如何正确选择合适自己的英文学习方法和材料?
- Python中re(正则表达式)模块学习
- 信息检索之词典及容错式检索
- 3D蓝光影碟的SSIF文件
- java图片处理类(图片水印,图片缩放)
- 小猴子蓝裤黄袄 即时通讯
- error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or di
- 信息检索之索引构建
- Dirichlet Process-非参数贝叶斯(1)
- java图片处理类(图片水印,图片缩放)
- 【eclipse】打开java文件,注释内容为乱码!
- 可变参数宏