HLS による YouTube ライブ コンテンツの配信

このドキュメントでは、HTTP Live Streaming(HLS)プロトコルを使用して、 YouTube のライブデータをエンコーダからストリーミングする。このドキュメントは 製品に HLS 取り込みサポートを追加したいとお考えのエンコーダ ベンダーからの情報です。HLS 取り込みは、高い負荷がかかるプレミアム コンテンツに適しています。 比較的高いレイテンシで 高品質と高解像度を実現しています概要 YouTube ライブで利用できるさまざまな取り込みプロトコルの比較 ストリーミングのサポートについては、YouTube ライブ配信取り込みプロトコルの比較をご覧ください。

HLS を使用してライブデータをストリーミングするには、エンコーダから HTTP PUT を使用したプレイリストとメディア セグメントの YouTube の HLS エンドポイントへの送信 POST リクエスト。エンコーダから見ると、YouTube HLS エンドポイントは パッシブな HTTP サーバーであると考えられます。

各メディア セグメントは、短い部分の実際のマルチメディア コンテンツを表します。 1 秒から 4 秒間続きます各メディア再生リスト メディア セグメントを正しいストリーム順序で再構築する方法について説明します。

メディア形式の要件

YouTube の HLS 取り込みには、動画と音声に関する次の要件があります。 content:

  • 動画と音声は M2TS 形式で多重化する必要があります。
  • サポートされている動画コーデックは H.264 と HEVC です。
  • 60 fps までのフレームレートがサポートされています。
  • クローズド GOP のみがサポートされています。
  • サポートされているオーディオ コーデックは AAC で、シングル トラック音声のみがサポートされています。

要件の詳細については、メディア セグメントのセクションをご覧ください。

HDR

HEVC コーデックを使用したハイ ダイナミック レンジ(HDR)動画はサポートされており、 次の追加要件が適用されます。

  • サポートされている色標準は、非定輝度での 10 ビット PQ および HLG です。 具体的には、次のようになります。
    • クロマ形式は YUV 4:2:0 10 ビットである必要があります。
    • 伝達関数は PQ(SMPTE ST 2084 とも呼ばれます)または HLG である必要があります (ARIB STD-B67 とも呼ばれます)。
    • 色域は Rec2020 年
    • 行列係数は Rec.2020 非定輝度。
  • 制限付き範囲(MPEG 範囲)とフルレンジ(または JPEG 範囲)のサンプル 値がサポートされています。重要なのは コンテンツで使用されるサンプル値の範囲。範囲が限定されたサンプル値は、 推奨されます。

HLS 取り込み URL の取得

YouTube API から HLS 取り込み URL を取得する

完全な取り込み URL を取得するには、YouTube ライブ配信 API を使用して liveStream を挿入します を次のように置き換えます プロパティ:

"cdn": {
  "ingestionType": "hls",
  "frameRate": "variable",
  "resolution": "variable"
}

API レスポンスの cdn.ingestionInfo.ingestionAddress フィールドには、 メインの取り込み URL、cdn.ingestionInfo.backupIngestionAddress フィールド には、バックアップ取り込み URL を指定します。詳細については、このモジュールのコースリソースに liveStreams リソース

YouTube Studio から HLS 取り込み URL を取得する

YouTube クリエイター ツールのウェブ インターフェースで、[作成] をクリックした後、 ストリーム] を選択すると、YouTube に「ストリームキー」が表示されます。英数字で構成され 使用できます。この秘密鍵は、作成者とシークレットの両方の YouTube にストリーミングできます

次のようにして、このストリームキーから HLS URL を作成できます。

https://a.upload.youtube.com/http_upload_hls?cid=$STREAM_KEY&copy=0&file=

ここで、$STREAM_KEY はウェブ インターフェースに表示されるストリームキーです。 たとえば、https://a.upload.youtube.com/http_upload_hls?cid=abcd-efgh-ijkl-mnop-qrst&copy=0&file= です。

信頼性を高めるために、取り込みの 2 番目の冗長コピーを送信できます コピーします。

https://b.upload.youtube.com/http_upload_hls?cid=$STREAM_KEY&copy=1&file=

バックアップとプライマリ URL には 2 つの違いがあります。それはホスト名と copy= パラメータが変更されました。バックアップの取り込みは、 プライマリ取り込みとは異なる copy= パラメータ値を使用して、 ストリームが破損します

HLS 取り込み URL の完成

どちらの方法でも取得できる URL は不完全なテンプレートです。両端 空の file= クエリ パラメータを指定します。最終ページ URL を作成するには、エンコーダが URL の末尾にメディア再生リストまたはメディア セグメントのファイル名を追加します。 file= パラメータが完成します。

file= パラメータの値には、次のルールが適用されます。

  • エンコーダは、メディア再生リストまたはメディア セグメントのファイル名を 英数字、アンダースコア、スラッシュ、ハイフン、ピリオド。 他の文字は使用できません。
  • エンコーダでファイル名を URL エンコードすることはできません。
  • エンコーダでは、ファイル名に相対パスまたは絶対パスのコンポーネントを含めることができます。 必須ではありません。エンコーダにパス コンポーネントが含まれている場合、 同じパスを参照する必要があります。 対応する再生リスト エントリを返します。

HLS プロトコルの要件

メディア再生リストとエンコーダから送信されるメディア セグメントは、 HTTP Live Streaming 2nd Edition 仕様をご覧ください。

HLS の仕様では、メディア再生リストとマスターの 2 種類の再生リストが定義されています。 再生リストYouTube はストリーミング コンテンツを異なる解像度にコード変換し、 場合、エンコーダはビットレートの異なるコンテンツを YouTube。そのため、YouTube では HLS 取り込み用にメディア再生リストのみをサポートしています。 およびマスター再生リストは無視されます。(マスター再生リストにはバリエーション リストが ストリーム(それぞれ同じコンテンツの異なるバージョンを表す)

エンコーダは次の条件を満たす必要があります。

  • 受信したい解像度でエンコードしたストリームを 1 つだけ (単一解像度と単一コーデック)です。
  • 音声と動画の両方に対応しています。
  • すべてのリクエストに HTTPS と永続的な接続を使用する。

以降のセクションでは、メディア再生リストの具体的な要件について説明します。 メディアセグメントです

メディアの再生リスト

メディア プレイリストには、連結して連結できるメディア セグメントのリストが含まれます。 連続的なデコード可能なマルチメディア ストリームを表します。Media Playlist は 期待するメディア セグメントと、それらを ストリームを再構成します

要件

  • メディア プレイリストのファイル名の末尾は、.m3u8 または .m3u にする必要があります。

  • ストリームに送信される最初のメディア再生リストはシーケンス番号で始まる必要があります 0 とシーケンス番号は単調に増加する必要があります。

  • EXT-X-MEDIA-SEQUENCE タグは、スコープのシーケンス番号を リストの最初のメディア セグメントです。

  • メディア再生リストに含める未処理のセグメントは 5 つまでです。 サーバーが受信または確認応答を行っていない場合、そのセグメントは未処理です。 受け取りません。

    未解決のセグメントに加えて、確認済みのセグメントもいくつか含める セグメントに分割されます。これにより、 メディア プレイリストがサーバーサイドで失われた場合にスキップされるセグメント。対象 承認済みセグメントとセグメントを 最大 5 個まで含めることができます 未処理のセグメントが表示されます。

    サーバーは、メディア セグメントを受け取ったことを、 そのセグメントのアップロードに対する「200」(OK)または「202」(Accepted)というレスポンス。 202 レスポンスは、サーバーがセグメントを そのセグメントを識別する再生リストが生成されます。

  • すべてのメディア セグメントについて更新されたメディア プレイリストを送信し、 メディア プレイリストが失われた場合に、迅速にサーバーを復旧できる。

  • サーバーがメディア セグメントの受信を確認すると、 メディア プレイリストが競合しないようにする EXT-X-MEDIA-SEQUENCE タグの値。 長すぎます。たとえば、サーバーが受信メッセージの受信を 最初の 9 個のメディア セグメント、次のメディア プレイリストには 8 番目のメディア セグメント、 10 番目と 10 番目のメディアセグメントです

  • EXT-X-KEY タグと EXT-X-SESSION-KEY タグはサポートされていません。

次のリストは、エンコーダが要求するファイルの例です。 send:

Media Playlist file with seqnum #0
Media Segment file #0
Media Playlist file with seqnum #0-#1
Media Segment file #1
Media Playlist file with seqnum #0-#2
Media Segment file #2
Media Playlist file with seqnum #1-#3
Media Segment file #3
...

次の例は、ライブ動画の途中で送信されたメディア再生リストを示しています。 。この例は配信の途中であるため、 EXT-X-MEDIA-SEQUENCE タグにゼロ以外の値が指定されています。

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:2680

#EXTINF:3.975,
fileSequence2680.ts
#EXTINF:3.941,
fileSequence2681.ts
#EXTINF:3.975,
fileSequence2682.ts

メディア セグメント

メディア セグメントの要件は次のとおりです。

  • ファイル名
    • URL のメディア セグメント ファイル名は .ts にする必要があります。 プレイリストのファイル名と一致する必要があります。
    • メディア セグメントのファイル名は、エンコーダの再起動時や、 ストリームの再起動回数が増えます。
  • 形式
    • メディア セグメントは M2TS 形式とし、自己初期化する必要があります。
    • 各 M2TS セグメントには、単一の MPEG-2 プログラムを含める必要があります。
    • M2TS セグメントには、PAT と PMT が含まれ、最初の 2 つが含まれている必要があります。 セグメント内のトランスポート ストリーム パケットは、PAT と PMT である必要があります。
  • コンテンツ
    • 動画と音声は多重化する必要があります。
    • サポートされている動画コーデックは H.264 と HEVC です。
    • HEVC による HDR がサポートされています(HDR の要件をご覧ください)。
    • 60 fps までのフレームレートがサポートされています。
    • クローズド GOP のみがサポートされています。
    • サポートされているオーディオ コーデックは AAC であり、シングル トラック音声のみが サポートされません。
    • メディア セグメントの長さは 1 ~ 4 に設定することをおすすめします 24 時間 365 秒です。これについては次のセクションで説明します。メディア セグメントは 再生時間が 5 秒を超えることはありません
    • メディア セグメントは、HTTPS を使用する TLS/SSL レイヤでのみ暗号化する必要があります。 その他の暗号化メカニズムはサポートされていません。

メディア セグメントの長さ

HLS 取り込みは、要求されるプレミアム コンテンツに対して高い 高品質、高解像度ですHLS 取り込みでは通常、RTMP よりもレイテンシが大きくなります。 HLS 取り込みはセグメント ベースであるためです。

メディアセグメントの長さは 1 ~ 4 秒にすることをおすすめします 小さいメディア セグメントを使用すると、レイテンシは短くなる可能性がありますが、その代償は高くなります。 再バッファ率やエンコード効率の低下につながります。前のセクションで説明したように メディア セグメントは 5 秒以下にする必要があります。

ビットレート

YouTube ヘルプ センター には、ビットレート設定のガイドラインが記載されています。

なお、HEVC では一般に、同じ帯域幅でデータ圧縮率が 25 ~ 50% 高くなります。 H.264 と比較した場合の動画の品質です。そのため、動画の下限のビットレート値が 推奨範囲を HEVC で使用して帯域幅を節約できます。 4K コンテンツに便利です

その他の要件

  • エンコーダでは、HTTP リクエストに User-Agent ヘッダーを この構文にはメーカー名、モデル名、 version:

    User-Agent: <manufacturer> / <model> / <version>
    

字幕

HLS 取り込みでは、字幕を送信するために次の 2 つのオプションをサポートしています。

  • 個別の HTTP POST リクエストを使用して字幕を送信します。この方法は HLS 取り込みです。
  • 埋め込みの 608/708 クローズド キャプションは、H264 を使用する HLS 取り込みで機能する HEVC 動画コーデックを使用する取り込みでは送信されません。詳細情報 詳しくは、自動字幕起こしの要件をご覧ください。 をご覧ください。

HTTP レスポンス コード

以降のセクションでは、YouTube から返されるレスポンス コードについて説明します。 HLS を使用して配信されたメディア セグメントとメディア再生リストへのレスポンスです。

200(OK)

PUT または POST リクエストに対するレスポンスとして、HTTP 200(OK)レスポンスは 想定どおりのオペレーションを受信し、処理していることを 確認します。

DELETE リクエストへのレスポンスとして、HTTP 200(OK)レスポンスは、 YouTube サーバーがリクエストを受信して無視しました。YouTube サーバーは ストリーム内のリソースを削除する必要がなくなり、 DELETE リクエスト。パフォーマンス上の理由から、YouTube は DELETE を送信しない。

202 (受理済み)

HTTP 202(Accepted)レスポンスは、YouTube サーバーが メディア セグメントを含むメディア プレイリストを受信する前のメディア セグメント。 これにより、 できるだけ早くデータセグメントに追加することで データの処理が遅れないように セグメントですただし、更新したイベントをエンコーダから送信しても、 すべてのメディア セグメントのメディア プレイリスト。

400(不正なリクエスト)

HTTP 400(不正なリクエスト)レスポンスは、次のいずれかの問題を示しています。 発生:

  • URL の形式が正しくありません
  • 再生リストを解析できないか、サポートされていないタグが含まれています
401(未承認)

HTTP 401(Unauthorized)レスポンスは、リクエスト内の cid パラメータが YouTube HLS エンドポイントのベース URL が破損しているか、期限切れです。クライアント 続行するには、cid パラメータを更新する必要があります。

405(許可されていないメソッド)

HTTP 405(メソッドが許可されていない)レスポンスは、リクエストが POST、PUT、DELETE のリクエストではありません。

500(内部サーバーエラー)

HTTP 500(内部サーバーエラー)レスポンスは、サーバーが リクエストを処理できません。このエラーについては、 指数関数的に バックオフです。