无需播放视频即可捕获帧阵列,然后在flash / flex客户端向后播放

时间:2011-04-06 17:11:29

标签: flash flex actionscript video netstream

我看过一些帖子,其中涉及拍摄视频帧的截图。我正在寻找一种向后播放视频的方法,并且通常一次只能移动一帧。理想情况下,我能够在特定i帧之前和之后从闪存视频中提取帧。

最重要的是,这个问题是能够在不实际播放视频的情况下提取帧。我在SO上找到的所有解决方案都需要播放视频,然后它们基本上只是将屏幕打印到位图。

动作脚本中是否可以提取单个视频帧以启用单帧前进和后退?

3 个答案:

答案 0 :(得分:1)

如果没有先播放内容,我认为没有办法。但是......你可以顺序bitmapdata.draw每个帧作为流视频(不一定在显示列表中)播放,直到你有一个大的位图数组来导航。这有两大问题:

显然,一个是你只能访问已经玩过的帧。这可能是由您的应用程序中发生的任何其他事情处理的 - 比如用户在视频流式传输/被捕获时与某些介绍内容进行交互。

另一个,也许是难以克服的问题是记忆。流式传输内容的原因是您在内存中始终没有全部24兆(或更多)的内存。这种情况意味着您必须这样做。话虽如此,取决于帧的大小/数量 - 这可能不是一个大问题。

坦率地说,如果你决定走这条路线,你最好将视频分成闪光之外的帧(后效或首映),然后将它们与swf嵌入(或单独加载)。无论如何,这意味着你可以更好地控制压缩。

也许这有帮助?

答案 1 :(得分:0)

你的部分组合令人困惑,但是......

能够捕获帧数:

bitmapData.draw(video);

无需播放视频:

netStream.pause();
然后播放:

netStream.step(-1);

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/NetStream.html

答案 2 :(得分:0)

如果使用关键帧间隔1(即所有帧都是关键帧)对视频文件进行编码,则向后导航视频不会有问题。这会增加文件的大小,但您可以在播放时立即跳转到任何帧。