6

私は現在、JavaScript とMediaSource APIを使用して DASH プレーヤーに取り組んでいます

ストリーミングは正常に機能していますが、表現の変更に行き詰まっています。おそらく、再生中に表現を変更する最も強引な方法は、HTML ドキュメントの<video>要素を置き換えることです。

しかし、Media Source API を使用してアダプテーション (表現の変更) を実装する簡単な方法があるかどうか疑問に思っていました。1 つの Media Source オブジェクトで多くのソース バッファを処理できることを読みましたが、2 つ目のビデオ バッファを追加すると例外が発生します。

Chrome 43.0.2357.65m を使用しています

var mediaSource = MediaSource();
var url = URL.createObjectURL(mediaSource);

videoElement.src = url;

mediaSource.addEventListener('sourceopen', function () {
    var buffer1 = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.4d4015"');
    var buffer2 = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.4d4015"');
}

例外:

Uncaught QuotaExceededError: Failed to execute 'addSourceBuffer' on    'MediaSource': This MediaSource has reached the limit of SourceBuffer objects it can handle. No additional SourceBuffer objects may be added.
4

1 に答える 1

6

残念ながら、MSE 仕様では、スムーズに変化する表現についてはあまり言及されていません。それを行う方法を学ぶ方法は、既存のダッシュ プレーヤーのコードを読んで、それがどのように行われるかを確認することです。時間を大幅に節約するために、次のようにします。

  1. まず、必要なソース バッファーは 1 つだけです。異なる表現のコーデックが異なることは問題ではありません。1 つのソース バッファを作成し、それをプレーヤーの存続期間全体にわたって使用します。表現を何回切り替えても問題ありません。

  2. 表現を切り替える方法は、実はとても簡単です。ターゲット表現の初期化ヘッダーをソース バッファーに追加するだけです。以上です。その後、デコーダが再初期化され、新しい表現に属するセグメントの追加を開始できます。

  3. ターゲット表現のセグメントを追加して、スムーズな移行をお楽しみください。

タントです。やるべきことが分かれば難しいことではありません。

于 2015-06-08T09:36:44.687 に答える