2010-09-01 1 views
0

Я создаю видеопроигрыватель в среде, где stream.bytesTotal недоступен. Мне нужно использовать метаданные продолжительности, закодированные в FLV-файлах, для экстраполяции для таких вещей, как ход воспроизведения и отображение времени.видео метаданные - продолжительность не всегда доступна

Проблема заключается в том, что при загрузке FLV метаданные, включая продолжительность, не могут быть доступны 2 раза из трех раз. Вот функция, которая перебирает объекта метаданных: -

общественная функция onMetaDataHandler (metadataObj: Object): пустота {

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

+0

Идея состоит в том, чтобы делать ваши функции в последнем вызове. – Eugene

ответ

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; 
Смежные вопросы