Actionscript 3 NetStream立即暂停不会获取元数据

时间:2010-09-28 21:18:08

标签: actionscript-3 video video-streaming flash-cs5 netstream

我正在Flash CS5和Actionscript 3中编写一个基本的视频播放器。对于这个基本播放器,我将我的NetStream连接到我的NetConnection,然后调用流的.play()方法开始加载。虽然我希望元数据和流开始缓冲,但我不想马上开始播放,所以我立即调用流的.pause()方法。不幸的是,当我立即停顿时,我的流的客户端的onMetaData事件并不总是被调用,所以我不一定得到加载视频的总播放时间。

作为一种解决方法,我将调用放在onMetaData侦听器内的“pause”方法中,但有时我的视频会在接收到它的元数据之前播放一段时间,因此会继续播放直到它出现。

是否有一种很好的方法可以阻止我的视频流播放,仍然可以获取视频元数据?

2 个答案:

答案 0 :(得分:1)

您应该在NetStatusEvent.STATUS事件NetStream.Play.Start被解雇时调用暂停。

<强>更新

对于非常短的流(例如buffer&gt; durationNetStream.Play.Start可能会在onMetaData回调之前被解雇。

在暂停NetStream.Play.Start之前,检查是否已提供metaData,如果不是直接暂停但等待onMetaData暂停(只需设置一个标志,例如pauseOnMetaData = true)。< / p>

答案 1 :(得分:1)

好的,这是一个不同思考方式的简洁方法......不要立即将视频对象附加到流对象上。在显示“请稍候”视觉的同时开始播放流,而不显示您的视频对象。在onMetaData侦听器中,查看以前是否存储了持续时间。如果没有,假设这是第一次调用onMetaData,存储持续时间,暂停播放,搜索流为0,那么附加视频对象。

用户将看到“请等待”一秒钟,然后视频将显示,暂停和播放准备按照预期播放持续时间。用户将完全不知道流在等待时播放了一些。