2010-09-01 62 views
0

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

问题是,加载flv时,包括持续时间在内的元数据无法被访问2次。下面是通过元数据对象迭代的功能: -

公共职能onMetaDataHandler(metadataObj:对象):无效{

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?

+0

你可以计数一个flv文件流中的函数调用数量? – Eugene 2010-09-01 03:49:28

+0

这个想法是在最后的呼叫中做你的功能的东西。 – Eugene 2010-09-01 03:50:03

回答

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;