50

私は現在、解像度切り替え機能を備えた Flash Web プレーヤーに取り組んでいます。play2()Actionscript でNetStream クラスの機能を利用しようとしています。

私が直面している問題は、ビデオがすぐに変化しないことです。この機能に精通している人にとってはplay2()、プレーヤーが実行しているの"standard switch""fast switch."

ドキュメントによると、オフセット パラメータが -1 の場合、高速切り替えが発生します。実際には、"NetStream.Play.Transition"イベントが受信されると、プレイヤーは で示される時間に達するまで待機しns.time + ns.bufferLengthてから、切り替えを実行します。

ファースト スイッチングによってバッファがクリアされたと思っていましたが、 を確認したns.backbufferlengthところ、すべてがまだキャッシュされていることがわかりました。また、次のようにも言及していますnetstream.time + 3

この問題に関するヘルプ/洞察は大歓迎です。

これは、何が起こっているかを説明するコードのスニペットです (newStream()ユーザーがクリックして新しい解像度、YouTube スタイルに変更すると呼び出されます):

public function newStream(address:String):void
{
    var opts:NetStreamPlayOptions = new NetStreamPlayOptions();
    opts.streamName = address;
    opts.transition = NetStreamPlayTransitions.SWITCH;
    opts.offset = -1;
    ns.play2(opts);
}

private function nsCallback(event:NetStatusEvent)
{
    switch(event.info.code)
    {
        case "NetStream.Play.Transition":
        {
            trace("Current time (on Transition): " + 
                  ns.time, "Buffer: " + ns.bufferLength);
            var estTime:Number = ns.time + ns.bufferLength;
            trace("Estimated Completion Time: " + estTime);
            break;
        }
    }
}
4

2 に答える 2

1

サーバーが現在のオフセットに最も近い i-frame を見つけようとしていて、時間がかかっている可能性があります。FPS と 2 つの i-frame の間の時間がわかっている場合は、次または前の i-frame に非常に近い時間を探すことができます。これにより、検索と提供が高速化されます。

i-frame の詳細: http://en.wikipedia.org/wiki/Video_compression_picture_types

于 2013-01-30T13:34:51.357 に答える
1

ドキュメンテーションにあるように、「オフセットのデフォルト値は -1 であり、デフォルトでスイッチング動作が標準に設定されます。このモードでは、サーバーは、スイッチ コールを受信した時点から前方にあるストリーム間の適切な移行ポイントを決定し、その時点で切り替わります。」

そのため、'offset' パラメータを現在の再生時間(Netstream.time)よりも高い値に変更する必要があります。値が小さい場合、NetStream.Play.Failed ステータス イベントが送信されます。

于 2012-12-28T11:33:04.920 に答える