問題タブ [adaptive-bitrate]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
video-streaming - 大多数のブラウザーとデバイスで一貫したアダプティブ ストリーミングの戦略
私は、Web でのビデオ ストリーミングと再生の現状について、多くのことを調査しました。私が要約したことと、大部分のデバイスとブラウザーでアダプティブ ストリーミングをサポートするために従うべきだと思う戦略を投稿しています。私が取り組んでいる戦略に大きな抜け穴/改善点がある場合は、コミュニティからのフィードバックが欲しかった.
まとめ
- 今日のほとんどのブラウザで html の
<video>
要素で動画を再生できるようにするには、少なくとも 3 つの形式の WEBM、OGG、MP4 で動画をエンコードする必要があります。 - ビデオ オン デマンド サービスにアダプティブ ストリーミングを導入するには、MPEG-DASH、Apple の HLS、Microsoft のスムーズ ストリーミング、および Adobe の HDS を利用できます。
- MPEG-DASH は、HDS、HLS、Smooth Streaming に似たオープン スタンダードであり、任意のブラウザや OS でオーディオ/ビデオ コンテンツを提供するための共通プラットフォームを提供するために発明されたため、最初は MPEG-DASH を使用することを好みました。
- しかし、現在のところ、iOS で Safari を実行し、Mac で Safari を実行している Apple デバイスは、MPEG-DASH 標準を完全にはサポートしていません。これは、Apple が MPEG-DASH のベースである html5 の Media Source Extensions API をまだサポートしていないためです。
- だから私はMPEG-DASH(Apple以外のデバイス用)+ HLS(Appleデバイス用)の実装を行っています
- これは、クライアントに提供されるサーバー側で.mpd ( mpeg-dash で使用) と.m3u8 (HLS で使用) ファイルの両方を生成する必要があることを意味します。エンコードの目的でサーバー側で Node.js を使用しています。
mpeg-dashを使用するときに基本的に行うことは、ソースファイルと、クライアントに送信されるストリームに関する説明/ルールを含む構成ファイルから、さまざまなビットレートでさまざまなメディアファイルを作成することです。帯域幅によって異なります。
HLS にも同じロジックが適用されますが、mpeg-dash とは異なる拡張子を持つ構成ファイルが作成される点が異なります。
ビデオで 1020*720、800*600、400*300 などの 3 つの異なる解像度で 3 ビット レートをサポートする場合、サポートする 3 つのフォーマット (つまり、WEBM、 OGG、MP4)
したがって、クライアントによってアップロードされた 1 つのビデオについて、Apple 以外のデバイスと Apple デバイスをサポートするために、.mpd および .m3u8 ファイルを生成するとともに、合計で 3*3 = 9 つのビデオを生成する必要があります。
これは良い習慣だと思いますか?または、クロス ブラウザー アダプティブ ストリーミング ソリューションを使用するために欠けている大きなものはありますか?
ヒント/推奨事項/提案は大歓迎です。
ありがとう !
mpeg-dash - mpdファイルの再生方法
. 私はmpdファイルがどのように再生されるかを理解しようとしており、次のデータセットを参照しています :
mpd ファイル形式には、mp4 チャンクで構成されるセグメント ベースがあり、その中に拡張子 .m4s のチャンク リストがあります。次を使用して mpd ファイルをダウンロードしました。
および次のリンクによる m4s チャンク:
vlc プレーヤーで mp4 と m4s の両方を再生しようとしましたが、これら 2 つのいずれも再生できなかったので、vlc プレーヤーでスタンドアロンで再生できる mpd ファイル形式のチャンク リンクを確認したいと思います。
私の観察のいずれかが間違っている場合は、私を修正してください。
よろしくマヤンク
video - [Apple][HLS] ビデオのアダプティブ ビットレート メタデータ
トランスコードされた .ts ビデオの ABR (アダプティブ ビットレート) メタデータの一部が他のものとは異なる方法でマーク/配置されているとベンダーが言いました。
私がやった事
アダプティブビットレートとは何かをGoogleで検索し、それがAppleが導入したものであることを知っています。しかし、「アダプティブ ビットレート メタデータ」とは何か、どこにあるのかわかりません
また、 MediaInfoを介して問題のない動画と問題のない動画を比較しましたが、失敗の原因は何もないようです。
ここで何か手伝ってもらえますか?ファイルの「メタデータ」を参照する方法や、Apple HLS で問題ないかどうかビデオをテストする方法について
nginx - Nginx VOD トランスコーディング
nginx を使用して MPEG-DASH ビデオ オンデマンド ストリーミングをセットアップしようとしています。dash.js でうまく機能するnginx vod モジュールに出会いましたが、リアルタイムのトランスコーディングを機能させることができた人がいるかどうか疑問に思っています。
現在、H264 MP4 ローカル ファイルを再生するようにセットアップして、単一の MP4 の MPD マニフェストを生成しています。ビデオの複数のバージョンをトランスコードしてサーバーに保存し、マルチ URL マニフェストを作成できることはわかっていますが、サーバー上のスペースが限られているため、これを行うことはできません。代わりに、リアルタイムでトランスコードして、nginx rtmp モジュールと ffmpeg で可能なように、より適応性の高いビットレート ストリーミングを可能にする方法を見つけようとしています (ただし、フラッシュを使用したくないため、RTMP ではなく MPEG-DASH を使用します)。 )。
これを行う方法を知っている人はいますか?ありがとうございます。
audio - 複数のオーディオおよびテキスト トラック/ストリームを含むビデオ URL ストリーム?
特定のストリーム (HLS/Smooth/Dash などのアダプティブ ストリーム) で異なるオーディオまたはテキスト トラックを切り替える機能をテストしています。複数のオーディオ トラック (ドルビー、ステレオ、DTS)、オーディオ言語トラック (英語、スペイン語、フランス語)、およびテキスト トラック (例: さまざまな言語の字幕) を含むサンプル ビデオの URL を提供してもらえますか?
そうでない場合、オーディオまたはテキスト トラックをビデオ ファイルに結合できる推奨ツールはありますか?
ffmpeg - MPEG-DASH 初期化セグメントの作成
HLS と MPEG Dash 間の変換を検討しています。元の完全に連結されたビデオ ファイルにはアクセスせず、個々の HLS セグメントのみにアクセスします。
この MPEG Dash への変換を行うには、Dash マニフェスト .mpd ファイルの初期化セグメントを指定する必要があります。
私の質問は次のとおりです。
- Dash ビデオ初期化セグメントの構造は何ですか?
- 元の完全なファイルを必要とせずに生成/作成するにはどうすればよいですか?
おそらく解決策にはMP4Box
、「.ts」HLS セグメントを自己初期化するダッシュ「.m4s」セグメントに変換することが含まれますが、これについてどうすればよいかわかりませんか?
どんなアイデアでも大歓迎です。
どうもありがとう。
更新: 元の hls セグメントを使用してストリーミングするためのスニペット。ビデオは最後まで再生されますが、真っ黒です。
javascript - html キューに入れられた多数の小さなビデオで構成されたビデオを再生する
多数の小さなビデオ パーツで構成されているビデオを管理するにはどうすればよいですか? たとえば、元のビデオは、現在の帯域幅に応じて各部分を選択できるように、それぞれ異なるバイト レートで使用できる 1 秒のビデオに分割されます。または、元のビデオは 360 ビデオであり、ユーザーが現在見ている場所に対応するチャンクをストリーミングできるように、さまざまな地域でより良い品質で利用できる 1 秒のチャンクに分割されます。
MPEG-DASH プレーヤーは、おそらくもっと多くのことを行っていますが、バイト レートの適応のためにこの問題を解決しているようです。
デスクトップで多数の html5 ビデオ + javascript を使用してこれを行うのは、それほど複雑ではないように思えます。何がストリーミングされるか、およびトランジションを処理することに注意してください。ただし、モバイルでは、ビデオを読み込んで再生するにはユーザーの操作が必要です。しかし、ユーザーが毎秒自分の電話をタップするのは望ましくありません...
理想的には、最終的なものには html5 ビデオのものと非常によく似た API があり、定期的にストリーミング ソースを選択する可能性が追加されます。モバイルで動作することは私にとって非常に重要です。
どうもありがとう!
video-streaming - アダプティブ ストリーミング - 多くのキー フレームを避ける
環境:
Media Source Extension プロトコルに基づくアダプティブ ストリーミングを使用して、html5 ビデオ プレーヤーを構築しています。私はmp4を使用しています。
問題:
同じビデオの 2 つのバージョン (高品質と低品質としましょう) があり、ほとんど遅延なくバージョンを切り替えられるようにしたいと考えています。問題は、バージョンを変更するときに、キー フレームで始まるフラグメントが必要であり、ビデオにキー フレームが頻繁にあると、帯域幅に非常に悪いことです。
ユーザーがバージョンを変更したときにキー フレームで始まるフラグメントと、それ以外のキー フレームのないフラグメントを送信する方法を探しています (キー フレームのないフラグメントを持つことに関する Chromiumのバグを認識しています。しかし、今のところそれを無視しましょう。修正されようとしています)
私は、多くのキー フレームを含むビデオの各ストリームを複製し、(明らかに最初のフレームを除いて) キー フレームを含まない別のストリームを複製し、ビデオ バージョンを切り替えるときにキー フレームを含むストリームのみを使用することを考えました。次のようになります。
したがって、各フレームはキー フレーム、または先行フレームを正常にデコードできる通常のフレームのいずれかです。これにより、ネットワーク経由で送信されるキー フレームの数が最小限に制限されます。
しかしねえ!A1
からへの切り替えA2
は、ブラウザによってビデオ ストリームの変更として認識されA2
、キー フレームで開始されないため機能しません。
そのような結果がどのように達成されるかについて、賢い考えを持っている人はいますか? 私は現在、クライアントの moov と moof アトムを書き直して、プレーヤーを騙して、すべてが例外であると思わせることを考えています。しかし、私はそれについてあまり知りません...
動機:
私は360プレーヤーに取り組んでいます。360 度は、ストリーミングされているが表示されていないビデオの大部分があるため、困難です。つまり、帯域幅が制限されているため、表示されるビデオの部分は、人々が慣れているものよりもはるかに低品質です。それぞれが異なるビュー方向を中心とする複数のバージョンのビデオを生成するためのツールとテクニックがあり、プレーヤーは実行時にどのバージョンをストリーミングするかを決定します。
ユーザーはいつでもビューの方向を変更できるため、バイト レートの適応よりも、そのような変更に迅速に対応できることが非常に重要です。そして、このことの目的は帯域幅を節約することなので、たくさんのキーフレームを追加することから始めるのは良くありません!
また、iOS Safari は 360 プレーヤーの鍵となるインライン ビデオをサポートしていないため、iOS Safari でサポートされていない MSE に頼っても問題ありません (真剣に、彼らは何をしているのですか?)。