NetStream.seek,以毫秒为单位

时间:2011-02-01 10:42:49

标签: flash flex actionscript-3

我有一个H.264编码的视频,其关键帧大约相隔100毫秒。我观察到我不能寻求某些关键帧。在我进行搜索之后,播放头跳转到所需的时间(关键帧时间)以及一些如何向前或向后跳几毫秒。我对NetStream.time的跟踪输出看起来像是

ns.t:2.86
ns.t:2.86
ns.t:2.86
[10:12:01 GMT + 0100] VideoPlayerNetStream:NetStatusEvent - NetStream.Seek.Notify time:ns.time = 2.86
[10:12:02 GMT + 0100] VideoPlayerNetStream:Seek.Notify info.seekPoint:undefined
ns.t:2.76
ns.t:2.76
ns.t:2.76
ns.t:2.76
ns.t:2.8
ns.t:2.8

我正在寻求2.76(即2秒和76毫秒)。你可以看到它确实寻找所需的关键帧(在2.76处有一个关键帧),然后它跳到2.8。这导致跳帧功能的许多问题。 奇怪的是,它适用于某些关键帧,对某些人来说根本不起作用。视频会出现问题吗?有没有什么方法可以测试视频是否正确编码?在Google上搜索,表明人们在寻找非关键帧时遇到了问题。但在这里,我试图寻找关键帧。该应用程序适用于具有几秒钟的关键帧的视频。当视频编码不同以获得毫秒特征时,问题出现了。

我现在很长时间都在努力解决这个问题,如果我收到任何正确方向的提示/指示来解决它,我将不胜感激。

问候
Vrushali

1 个答案:

答案 0 :(得分:2)

如帮助中所述:

  

在您调用其中一个搜索方法或设置playheadTime以导致搜索后,playheadTime属性可能不会立即具有预期值。对于渐进式下载,您只能搜索关键帧;因此,搜索会将您带到指定时间后第一个关键帧的时间。

[...]

  

正在寻找异步,因此如果您调用seek方法或设置playheadTime属性,则playheadTime 不会立即更新 。要在搜索完成后获取时间,侦听搜索事件,直到playheadTime属性更新后才会启动。

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/fl/video/VideoPlayer.html#seek()

所以http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/fl/video/VideoEvent.html#SEEKED 当播放头实际到达关键帧时,(应该是)调度。

换句话说,拥有少量关键帧会使搜索方法失效。 注意:对于流式视频而言,情况并非如此,其中播放头始终会立即设置为正确的时间/关键帧。

如果启用了提示点,解决方案是“固定”视频的重要帧并使用seekToNavCuePoint(),seekToNextNavCuePoint()和seekToPrevNavCuePoint() 据我所知,那些更精确。