dspack 如何实现反向播放?(100分)

  • 主题发起人 主题发起人 craneyu
  • 开始时间 开始时间
C

craneyu

Unregistered / Unconfirmed
GUEST, unregistred user!
先读入内存,在将内存中的数据反转,不过仍然好像不行,因为媒体文件都格式标头,只能从末尾开始,放一帧倒一帧了,不知道速度受影响的程度有多大。
 
等待中....
 
来自:lovinger_2000, 时间:2004-2-28 21:45:45, ID:2476130 | 编辑
先读入内存,在将内存中的数据反转,不过仍然好像不行,因为媒体文件都格式标头,只能从末尾开始,放一帧倒一帧了,不知道速度受影响的程度有多大。

不行吧(技术上是可以实现的),因为MPEG文件都是前后帧顺序关联的,所以你很难倒转放。比如PAL制(每秒25帧)MPEG文件,它的顺序一般是IBBPBBPBBPBBPBBPBBI,而且数据是顺序前后对应的,所以除非你先预存下前后关联的很多帧,然后根据MPEG格式,将每个帧倒置输出。
不过这样难度太大了,你要对MPEG格式,DCT,小波定律都很熟悉才可以,而且成本比较高(因为要先缓存许多数据,才能倒置播放),呵呵,不知道说明白没有:)
 
还有,再补充一点,DirectShow(DSPACK)是没有I帧B帧P帧的概念的,只有像TimeLine等等的概念,所以你要倒置播放,DECODE(在DirectShow中叫Filter)是可以用的,但是可能要脱离DirectShow(DSPACK)去自己作显示输出的。

解释一点:DSPACK 就是 progdigy 组织用DELPHI将基础的DireceShow封装起来的控件,所以会有很多问题的,但凡商业一点的播放器,都会舍弃DSPACK,自己基于DirectShow来开发播放器的。
 
谢谢热心的qince!
不知qince 有没有这方面的资料介绍, 我刚接触到directshow, 感觉到难度较大. 可否给一段 reverse play 代码看看.
 
很简单 用 IMediaSeek 控制流媒体的进度就可以了
 
Mr./ Ms. Amakusa:
IMediaSeek 怎么控制,可否说得详细点? 我们邮箱是craneyu@126.com, 谢谢了.
 
多人接受答案了。
 
IMediaSeek是DirectShow一个标准定位的COM接口,当你的Source Filter支持倒放的时候,只要将IMediaSeeking::SetRate设置为负数据可以了。

to Amakusa兄:
不知你说的支持倒放Filter是那个?偶还真没有见过。[:)]
 
后退
顶部