在adobe air中精确搜索本地视频

时间:2012-04-29 14:35:54

标签: video air

我想用adobe air制作一个用于观看视频的应用程序。优先级是使用seek(framneNumber)进行具有非常精细粒度的搜索。我是来自FLVPlayebackAS3.swc的FLVPlayback对象:

import fl.video.FLVPlayback;

首先,我不理解我的搜索精度:它是在任何帧中还是仅在GOF的I帧中(视频压缩中使用的帧组 - 编码)。

然后我正在寻找一种干净的方式来寻找框架。我用了这段代码:

    private function getFrameRate():int {
        if(playerFLV.metadataLoaded) return playerFLV.metadata.videoframerate;
        else return -1;
    }

    private function seek(frame:int):void {
        if(getFrameRate()>0)
            playerFLV.seek( frame / getFrameRate() );
    }

但有时似乎不够精确

1 个答案:

答案 0 :(得分:1)

seek(time:Number)函数需要一个时间int,其精度限制为3个十进制小数。通过上面的计算,框架可能会落在那个框架之外。

作为快速检查,您确定getFrameRate()返回任何内容吗?不应该是:

if(playerFLV.metadataLoaded) return playerFLV.metadata.framerate;

metadata.framerate将为您提供flv帧速率,如果您不关心音频,可以尝试使用:

playerFLV.metadata.videodatarate

至于两部分问题:

RE-首先我不理解我的搜索精度:它是在任何帧中还是仅在GOF的I帧中(视频压缩中使用的帧组 - 编码)。

如果视频是渐进式下载:

Seek会寻找一段时间然后播放组件会显示第一个关键帧。

如果视频正在播放:

FMS将在该确切时间生成所需的关键帧。

如果您不关心文件大小可能是另一种解决方案是使用更多关键帧对您的flv进行编码,或者如果您确实控制了视频的编码并且它们是渐进式的,那么我建议您在每个帧上添加Que点数寻求视频。