动作脚本3:使用netstatus和cuepoints排队FLV

时间:2009-09-16 14:35:41

标签: flash video flv

我正在构建一个使用视频转换从一个部分到另一个部分的Flash网站。每个部分的背景都是比过渡视频本身更高分辨率的静帧照片,过渡视频在过渡期间按比例放大。每个视频转换的第一帧是当前背景图像,每个视频转换的最后一帧是目标的背景图像。粗略地说,这是网站上的预期导航流程:

休息状态:
前景中的高分辨率图像,没有视频元素

用户点击导航项目:
Flash通过netstream对象准备FLV并缓冲它,这是通过netstream.play()函数完成的。收到“Netstatus.Buffer.Full”事件后,网络流对象暂停并附加到视频对象,然后将其添加到前景中高分辨率图像后面的显示列表中。一旦视频对象被添加到舞台上,前景中的高分辨率图像就会显示出来(通过补间),只留下背景视频。当前景完成补间时,播放背景中的视频。一旦收到“NetStream.Play.Stop”,该过程就会反向发生;也就是说,一个新的高分辨率前景图像在视频层上进行补间,一旦完成,视频就会从舞台中删除。

我认为上面概述的流程并没有任何错误(至少在原则上),并且听起来不应该那么棘手。但是,我对FLV /视频对象的初始设置没有任何问题。起初,似乎FLV没有正确排队,我的意思是高分辨率的前景图像镊子显示白色屏幕,视频弹出并且仅在一两秒后开始播放。 (FLV的第一帧绝对不是白色)。

我不知道是什么导致了这种行为,但是在接收到“Buffer.Full”之后,却不知不觉地投入了一个播放网络大约100毫秒的计时器,从而使视频超过可能导致白色的任何原因。屏幕。这在本地运行良好,但是一旦我将网站放在开发主机上,它就会在转换期间回到白屏。令人烦恼的是,将黑客延迟时间推迟到大约2秒就摆脱了远程服务器上的白屏问题,但结果是不可预测的;根据连接速度,您可能会看到所有内容都完美无缺,或者您可能会被投入到已经播放了一两秒的视频中。

我也尝试过使用bytesLoaded / bytesTotal而不是netStatus事件的类似方法,但无济于事。我上一次的实验是使用提示点;在FLV编码期间,我将一个提示点投入到FLV中0.2秒并在补间前进之前等待那个;再次,它在本地工作,但在远程服务器上测试视频开始之前,我被视为白色到白色。

我在这里真的没有想法,非常感谢你们提供的任何建议。非常感谢你的时间和考虑!

贾斯汀

1 个答案:

答案 0 :(得分:1)

FLV有时是狡猾的野兽。

我要看看我是否可以挖掘出一些代码,我回过头来处理所有这些。与此同时,我喜欢你关于提示点的想法,我知道你为什么遇到麻烦。提示点实际上与关键帧相关联 - 因此您需要确保您的提示点位于第二个关键帧之后 - 这将确保至少显示第一个视频关键帧。