播放mpeg1问题(200分)

G

gxlzbig

Unregistered / Unconfirmed
GUEST, unregistred user!
如何用ds pack 做的播放器在播放mpeg1文件时跳过坏的地方,就象解霸跳过VCD的坏道一样?
 
查找下一个特定码流,直到出现下一个流开始,如果想精确点就查找下一个I桢开始
 
能写详细点吗?
 
TO:LVXQ
能否给出一段源码?谢谢!
 
sorry,不提供源码,仅提供思路。
我不知道你想怎么做,但是你绝不能把一切都交给ds去完成,你还必须监视你的位流
(比特流),查找相应的特征字符,这样你可以控制要往后走多少。由于mpeg1是有一个
个图桢组成,而一些图桢的组合就成为图层组,在每一个图层组中有各种图桢组成
一般组合情况是I B B P P I....但是这不是绝对的,尤其对一些特殊的mpeg来说,甚至
有D桢和另外一种图桢,不过我想你没必要了解。在IBP三中图桢中,I桢的数据量最大,
也只有它是可以独立解码的,而p桢相对较小,b桢最小,它的解码需要前后桢的信息,
因此,这也叫图像运动补码。所以,如果你要使你移动后的地方能解码,你必须传递一
个I桢图像给它。由于基本上每个图层组都是以I桢打头的,所以理论上来将,你只要
搜索下个图层组的开始位置,并由此开始就可以了。当然由于没个图层组包含多个I桢,
所以你如果选择从下个I桢开始也是可以的。
至于I桢,和图层组怎么找,请搜索我在本论坛上回答的一些问题,我基本上已经讲到了。
 
lvxq 我有一点明白,但想你能再多说点,我再多给分你
 
其实我不知道你准备怎么做,我上面仅以自己了解的一点知识说了一通。因为你不是自己
做解码,所以实际上没必要知道得太多,否则,你又要去管理声音,有要处理缓冲,对每
桢得数据作校验,解码,会很繁杂。而现在对于你而言,你什么都不要管,你只要办证你
将要处理的下一段马流是以i桢开始的,这就够了。 下面是思路
---Error Occurred , need to jump
While true
Read Next 150k
Find 0x00,0x00,0x01,0xb3 ....
if found then

break;
--Next Send bits followed

 
但是用DS后,有什么事件或什么方法可以找到---Error Occurred , need to jump,并且可以控制跳到前面?
 
解霸用的可不是DS,呵呵...
用DS是无法解决这个问题的,至少用文件的方式不行。
需要自己写解码算法才行。
 
接受答案了.
 
顶部