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 に答える