環境:
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 に頼っても問題ありません (真剣に、彼らは何をしているのですか?)。