0

我在 stream.bytesTotal 不可用的环境中创建视频播放器。我需要使用 flv 文件中编码的持续时间元数据来推断播放进度和时间显示等内容。

问题是在加载 flv 时,元数据(包括持续时间)在 3 次中有 2 次无法访问。这是遍历元数据对象的函数:-

公共函数 onMetaDataHandler(metadataObj:Object):void {

for (var metadata:Object in metadataObj) {

    if (metadata == "duration" ) {

        _duration = metadataObj[metadata];

        Debug.log('metadata _duration == ' + _duration );

        playBackTimeText();

    }

    if (metadata == "width" ) {

        video.width = metadataObj[metadata];
    }

    if (metadata == "height" ) {

        video.height = metadataObj[metadata];
    }

    Debug.log(metadata + ": " + metadataObj[metadata], 0xffff00);

}

}

这是最好的方法,还是有办法在不重新加载flv的情况下重新加载元数据?

4

1 回答 1

0

我不确定为什么,但看起来将 onMetaData 函数设置为直接回调已经解决了这个问题。我不认为它很优雅,但它有效..

   client = new Object();

   client.onMetaData = function (metadataObj:Object):void {

                for (var metadata:Object in metadataObj) {

                    if (metadata == "duration" ) {

                        _duration = metadataObj[metadata];

                        Debug.log('metadata _duration == ' + _duration );

                        playBackTimeText();                 
                    }

                    if (metadata == "width" ) {

                        video.width = metadataObj[metadata];
                    }

                    if (metadata == "height" ) {

                        video.height = metadataObj[metadata];
                    }

                    Debug.log(metadata + ": " + metadataObj[metadata], 0xffff00);                   
                }

            }

        client.cuepoint = onCuePoint;

        _stream.client = client;
于 2010-09-01T16:16:32.543 回答