1

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

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

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

4

2 回答 2

1

NetStatusEvent.STATUS当事件NetStream.Play.Start被触发时,您应该调用 pause 。

更新:

对于非常短的流(例如buffer> duration)很可能在回调NetStream.Play.Start之前被触发。onMetaData

在暂停之前NetStream.Play.Start,检查是否提供了元数据,如果没有,请不要直接暂停而是等待onMetaData暂停(只需设置一个标志,例如pauseOnMetaData = true)。

于 2010-09-30T04:48:59.427 回答
1

好的,这是一种巧妙的思考方式……不要立即将视频对象附加到流对象。在不显示视频对象的情况下显示“请稍候”视觉效果时开始播放流。在您的 onMetaData 侦听器中,查看您之前是否存储了持续时间。如果不是,假设这是对 onMetaData 的第一次调用,存储持续时间,暂停播放,将流搜索到 0,然后附加视频对象。

用户将看到“请稍等”一秒钟,然后视频将出现、暂停并准备好以预期的持续时间播放。用户将完全不知道在他们等待时流向前播放了一点。

于 2010-09-30T13:49:22.283 回答