2010-09-01 83 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; 
相關問題