我正在Flash CS5和Actionscript 3中编写一个基本的视频播放器。对于这个基本播放器,我将我的NetStream连接到我的NetConnection,然后调用流的.play()方法开始加载。虽然我希望元数据和流开始缓冲,但我不想马上开始播放,所以我立即调用流的.pause()方法。不幸的是,当我立即停顿时,我的流的客户端的onMetaData事件并不总是被调用,所以我不一定得到加载视频的总播放时间。
作为一种解决方法,我将调用放在onMetaData侦听器内的“pause”方法中,但有时我的视频会在接收到它的元数据之前播放一段时间,因此会继续播放直到它出现。
是否有一种很好的方法可以阻止我的视频流播放,仍然可以获取视频元数据?
答案 0 :(得分:1)
您应该在NetStatusEvent.STATUS
事件NetStream.Play.Start
被解雇时调用暂停。
<强>更新强>
对于非常短的流(例如buffer
&gt; duration
)NetStream.Play.Start
可能会在onMetaData
回调之前被解雇。
在暂停NetStream.Play.Start
之前,检查是否已提供metaData,如果不是直接暂停但等待onMetaData
暂停(只需设置一个标志,例如pauseOnMetaData = true
)。< / p>
答案 1 :(得分:1)
好的,这是一个不同思考方式的简洁方法......不要立即将视频对象附加到流对象上。在显示“请稍候”视觉的同时开始播放流,而不显示您的视频对象。在onMetaData侦听器中,查看以前是否存储了持续时间。如果没有,假设这是第一次调用onMetaData,存储持续时间,暂停播放,搜索流为0,那么附加视频对象。
用户将看到“请等待”一秒钟,然后视频将显示,暂停和播放准备按照预期播放持续时间。用户将完全不知道流在等待时播放了一些。