1

環境:

Media Source Extension プロトコルに基づくアダプティブ ストリーミングを使用して、html5 ビデオ プレーヤーを構築しています。私はmp4を使用しています。

問題:

同じビデオの 2 つのバージョン (高品質と低品質としましょう) があり、ほとんど遅延なくバージョンを切り替えられるようにしたいと考えています。問題は、バージョンを変更するときに、キー フレームで始まるフラグメントが必要であり、ビデオにキー フレームが頻繁にあると、帯域幅に非常に悪いことです。

ユーザーがバージョンを変更したときにキー フレームで始まるフラグメントと、それ以外のキー フレームのないフラグメントを送信する方法を探しています (キー フレームのないフラグメントを持つことに関する Chromiumのバグを認識しています。しかし、今のところそれを無視しましょう。修正されようとしています)

私は、多くのキー フレームを含むビデオの各ストリームを複製し、(明らかに最初のフレームを除いて) キー フレームを含まない別のストリームを複製し、ビデオ バージョンを切り替えるときにキー フレームを含むストリームのみを使用することを考えました。次のようになります。

// *
// * represents a key frame;    * represents a normal frame;    a fragment has 4 frames

           *
Stream A.1 **** **** **** **** **** **** ****  // version A with no key frames

           *    *    *    *    *    *    *
Stream A.2 **** **** **** **** **** **** ****  // version A with key frames
                                               // at the beginning of each fragment


           .
Stream B.1 .... .... .... .... .... .... ....

           .    .    .    .    .    .    .
Stream B.2 .... .... .... .... .... .... ....


           *         .
A -> B     **** **** .... .... .... .... ....
from       A.1  A.2  B.1  B.2  B.2  B.2  B.2

したがって、各フレームはキー フレーム、または先行フレームを正常にデコードできる通常のフレームのいずれかです。これにより、ネットワーク経由で送信されるキー フレームの数が最小限に制限されます。

しかしねえ!A1からへの切り替えA2は、ブラウザによってビデオ ストリームの変更として認識されA2、キー フレームで開始されないため機能しません。

そのような結果がどのように達成されるかについて、賢い考えを持っている人はいますか? 私は現在、クライアントの moov と moof アトムを書き直して、プレーヤーを騙して、すべてが例外であると思わせることを考えています。しかし、私はそれについてあまり知りません...

動機:

私は360プレーヤーに取り組んでいます。360 度は、ストリーミングされているが表示されていないビデオの大部分があるため、困難です。つまり、帯域幅が制限されているため、表示されるビデオの部分は、人々が慣れているものよりもはるかに低品質です。それぞれが異なるビュー方向を中心とする複数のバージョンのビデオを生成するためのツールとテクニックがあり、プレーヤーは実行時にどのバージョンをストリーミングするかを決定します。

ユーザーはいつでもビューの方向を変更できるため、バイト レートの適応よりも、そのような変更に迅速に対応できることが非常に重要です。そして、このことの目的は帯域幅を節約することなので、たくさんのキーフレームを追加することから始めるのは良くありません!

また、iOS Safari は 360 プレーヤーの鍵となるインライン ビデオをサポートしていないため、iOS Safari でサポートされていない MSE に頼っても問題ありません (真剣に、彼らは何をしているのですか?)。

4

1 に答える 1

1

切り替えが正しく行われるように、すべてのフラグメントはキーフレームで開始する必要があります。これを機能させるには、キーフレームの間隔をフラグメントの長さで均等に分割する必要があります。たとえば、正しい組み合わせは次のとおりです。

  • 2 秒ごとのキーフレーム、フラグメントの長さ 6 秒
  • 4 秒ごとのキーフレーム、フラグメントの長さ 8 秒
于 2016-02-28T11:06:06.880 に答える