我目前有一个可以正常播放的DirectShow.NET图形,但我希望它也能够反向播放(从结尾开始,向后播放到开始)。
我尝试过使用IMediaSeeking::SetRate(double)方法,但这只对正值有效。当我尝试使用负值时,它会崩溃。
帮助!
我正在使用.avi视频文件,但如果可以的话,我愿意尝试不同的格式。
发布于 2009-11-16 02:05:42
实际上,我不确定股票AVI解复用器是否支持任何格式的负速率,即使该格式不使用时间压缩。当然,大多数其他多路分解器将不支持负速率。因此,您可能需要一个自定义的多路分解器来执行此操作。如果这样做,请确保使用带有索引的容器格式(例如mp4)。
如果您使用没有时间压缩的格式(运动jpeg,仅mpeg-2的I帧等),您将在帧压缩方面付出相当大的代价,以便能够反向播放。如果你想很好地做到这一点,可以考虑一些DVD实现所采用的方法。他们中的一些通过只播放I帧来反向播放,所以你有1到2帧。但是顶端实现将解码整个GOP (大约15帧),然后在解码前一个GOP时以相反的顺序呈现这些帧。这在开发方面和系统资源上都很昂贵,但可以获得良好的最终结果。
G
发布于 2009-11-13 05:32:12
你有没有尝试过各种视频文件?由于temporal compression techniques的原因,许多文件只能向前播放(即一帧中的信息取决于前几帧中的信息)。
您可以使用GSpot检查您的文件,看看它是否包含任何P帧;如果包含,您不太可能能够反向播放它。AVI是一个容器,里面的视频可以使用任何编解码器。
发布于 2009-11-20 03:42:19
重复调用IMediaSeeking::SetPositions,一次后退一帧,就可以进行反向播放。它不太可能是平滑的,但我认为这将是你在不编写多个自定义过滤器的情况下所能达到的最好效果。
使用没有任何时间压缩的编解码器,比如mjpeg或jpeg2000,会对这项技术有很大的帮助。对于常规的现代编解码器,降低分辨率和比特率会有所帮助。
你需要能够在任意时间对任意文件进行反向回放吗?如果你可以对你的媒体文件进行预处理,那么准备一个你可以切换到的反向版本并不难。如果您熟悉低级工具,Avisynth可以做到这一点。
https://stackoverflow.com/questions/1725534
复制相似问题