WWDC Quick Look 💓 By SwiftGGTeam
Improve stream authoring with HLS Tools

Improve stream authoring with HLS Tools

元の動画を見る

ハイライト

Apple は低遅延 HLS ツールを HLS ツールにマージし、メディア ストリーム バリデーターはインスタント エラー レポートを追加し、メディア ストリーム セグメンターは部分セグメントを生成でき、開発者がメイン プレイリストでのバリアント選択を制御できるように SCORE 属性を使用します。


主要内容

HLS ストリーミングを行う場合、多くの場合、問題はプレーヤー側にありません。本当に時間がかかるのはプロダクション リンクです。つまり、入力をスライスする方法、ライブ プレイリストを継続的に更新する方法、低レイテンシのリクエストを返す方法、メイン プレイリストで多数のオーディオ グループとビデオ バリエーションを組み合わせる方法です。細部が1つ間違っています。オンライン ユーザーには、起動の遅さ、混乱した切り替え、満足のいく音質がないことがわかりますが、開発者はツールの出力とプレイリストのタグに戻ってトラブルシューティングを行う必要があります。

2020 年、Apple は前年に個別にリリースされた低遅延 HLS ツールを統合 HLS ツール リリース パッケージに戻しました。このようにして、低遅延フローの生成、検証、レポートはサイド ツール セットではなくなります。 Media Stream Validator には即時オプションもあるので、ライブ検証ではほとんどのエラーを確認するのに 30 分から 1 時間待つ必要はありません。

このセッションの主な内容は非常に明確です。最初に低遅延のテスト ストリームを実行し、次にオーディオ コーデックとメイン プレイリストを処理します。 TS Recompressor はテスト入力の生成を担当し、Media Stream Segmenter は部分セグメントのカットを担当し、配信ディレクティブ インターフェイス スクリプトは低遅延 HLS に必要なクエリ パラメーターの処理を担当します。最後に、マスター プレイリストは、オーディオ グループ、CODECS 属性、および SCORE 属性を使用して、どのバリアントを優先するかをプレーヤーに伝えます。


詳細

HLS ツールの 2020 年の更新

(00:49) Apple は最初に、ツールの配布方法の変更について説明しました。低遅延 HLS のベータ版が終了すると、低遅延関連ツールは単一の HLS ツール パッケージに戻ります。検証プロセスも変更されました。 Media Stream Validator には、エラーが検出されるとすぐにエラーを報告する新しい即時オプションがあり、長時間にわたるライブ ブロードキャストの検証に適しています。

# 2020 年工具链中需要重点检查的三件事
Media Stream Validator: immediate option
HLS Report: compiled binary
HLS Tools: single tool distribution with Low-Latency HLS tools

キーポイント:

  • Media Stream ValidatorHLS フローの認証に使用されます。この講演では、新しい即時オプションではエラーが見つかるとすぐに報告されることが明らかになりました。 -HLS ReportPython スクリプトからコンパイルされたバイナリまで、古い非推奨オプションは削除され、残りの機能は保持されます。 -single tool distribution低遅延ツールが個別のパッケージに配置されなくなり、低遅延実稼働リンクが通常の HLS ツール ワークフローに戻ることを示します。

ツールを使用して低遅延 HLS テスト フローを生成する

(02:41) 低遅延テスト フローのプロセスは 3 つの段階で構成されます。 TS Recompressor はトランスポート ストリームを生成し、UDP 経由で複数のメディア ストリーム セグメンターに送信します。各セグメンタはメディア プレイリストとメディア セグメントを出力します。ライブ ブロードキャスト プレイリストは継続的に更新されるため、サーバーは配信ディレクティブ インターフェイス スクリプトも使用してクエリ パラメーターを解釈し、変更されたプレイリストを返します。

TS Recompressor
  -> UDP transport stream for preview at 500 Kbps
  -> UDP transport stream for lower-quality video at 2 Mbps
  -> UDP transport stream for main output at 4 Mbps

Media Stream Segmenter for each output port
  -> media playlist
  -> media segments

Delivery Directives Interface script
  -> synthesized playlist with EXT-X-RENDITION-REPORT

キーポイント:

  • TS Recompressorこのプレゼンテーションでは、ビデオとオーディオのテスト入力を生成し、3 つの出力を異なる UDP ポートに送信するために使用されます。 -Media Stream Segmenter各出力ポートには、対応するコード レートの入力を処理するインスタンスが必要です。 -Delivery Directives Interface script低レイテンシーの HLS クエリ パラメーター処理を担当し、メディア セグメントの同じバッチを指す変更されたプレイリストを返します。 -EXT-X-RENDITION-REPORT特定のバリアントのプレイリストが他のバリアントに関する情報を保持できるようにするには、スクリプトでは、相対検索を容易にするために、すべてのバリアントを同じ親ディレクトリの下のサブディレクトリに書き込む必要があります。

セグメンターは部分セグメントを生成します

(04:18) メディア ストリーム セグメンターは、低遅延 HLS の部分セグメントと関連タグを追加します。演説では、いくつかの重要な選択肢を挙げた。part-target-duration-ms部分セグメントの生成をアクティブ化します。date-timeプレイリストに追加されますEXT-X-PROGRAM-DATE-TIMEラベル。

Media Stream Segmenter options described in the session:
  part-target-duration-ms   # activates generation of partial segments
  target duration           # parent segment duration
  playlist parent segments  # how many parent segments stay in the playlist
  delete segments           # remove segments after they are no longer needed
  date-time                 # adds EXT-X-PROGRAM-DATE-TIME

キーポイント:

  • part-target-duration-ms低遅延スライス用のスイッチです。セグメンターは部分セグメントを生成します。 -target duration引き続き、親セグメントのターゲット継続時間を制御します。 -playlist parent segmentsライブ プレイリストに保持される親セグメントの数を制御します。 -delete segments期限切れのセグメントをクリーンアップします。これは、ライブ ブロードキャスト プレイリストでセグメントを動的に追加および削除する特性と一致します。 -date-time書きますEXT-X-PROGRAM-DATE-TIME、プレイリストに番組時間情報を含めます。

新しいオーディオ コーデック用にオーディオ グループを整理する

(05:38) マスター プレイリストが複雑になる可能性がある最も複雑な場所はオーディオです。講演では、2020 ツールに USAC または xHE-AAC、Apple Lossless、FLAC などのオーディオ コーデックのサポートが追加されたことが述べられました。マスター プレイリストを作成するときは、まずビデオ解像度とコーデックを選択し、次に言語、オーディオ コーデック、およびチャンネル数をリストします。コーデックとチャネル配列の組み合わせごとにオーディオ グループを作成し、各グループにすべての言語を含める必要があります。

Master playlist audio workflow:
  1. choose video resolutions and video codecs
  2. list audio languages, such as English and Chinese
  3. list audio codec families, such as AAC, FLAC, AC-3, USAC/xHE-AAC, and Apple Lossless
  4. create one audio group for each codec and channel-count pair
  5. put every language in every audio group
  6. replicate variant entries for the audio groups

キーポイント:

  • USAC / xHE-AACApple LosslessFLAC音声点呼用の新しいオーディオ コーデックの方向です。
  • 各音声グループにはすべての言語が含まれている必要があります。たとえば、英語と中国語の両方が存在する場合、AAC グループ、FLAC グループ、および AC-3 グループにはそれぞれ完全な言語セットが含まれている必要があります。 -stereo AAC groupすべてのデバイスで再生できるため、フォールバックとして適しているため、常に存在する必要があります。
  • マルチチャネル ロスレス オーディオ コーデックが提供されている場合、Apple は、ロスレス ビット レートが高すぎるためにマルチチャネルの選択が失われないように、マルチチャネル AAC コーデックを同時に提供することをお勧めします。
  • AAC-LC、HE-AAC、HE-AACv2、USAC / xHE-AACの間で切り替えることができます。ロスレス コーデックと AAC コーデックを切り替えることもできます。

SCORE を使用してバリアントの優先順位を制御する

(08:18) デフォルトの選択ロジックでは、現在再生可能なコレクションの最高ビット レートが選択されます。 USAC および Dolby Digital Plus により、開発者が意図しない選択シーケンスが発生する可能性があります。 Apple が追加したバリアントと I-Frame バリアントSCORE財産。プレーヤーが通常のフィルタリングを完了すると、最高のフィルタリングが使用されます。SCORE最終的な選択を決定します。

Variant selection with SCORE:
  1. player filters the master playlist to variants that can be played
  2. every variant and I-Frame variant must have SCORE if you want an ordered result
  3. the playable variant with the highest SCORE wins
  4. give USAC variants higher scores than matching HE-AAC variants when USAC should be preferred

キーポイント:

  • SCORE値は浮動小数点数です。このスピーチでは、順序を設定したい場合は、すべてのバリアントにこの属性を設定する必要があることを明確に要求しています。
  • プレイヤーはまず通常のルールに従ってプレイアブル セットをフィルタリングし、次に最も高いものを使用します。SCORE選ぶ。
  • USAC バリアントに高いスコアを与えると、USAC をサポートするデバイスが USAC を優先できるようになります。 USAC をサポートしていないデバイスは、引き続き HE-AAC に分類されます。
  • この属性は、「帯域幅の並べ替えは正しいが、企業はオーディオ コーデックを優先したい」というマスター プレイリストの問題を解決するのに適しています。

重要ポイント

  • 低遅延の HLS ローカル パイロットを作成します

    • 手順: TS Recompressor を使用して 3 つのテスト入力を生成し、複数のメディア ストリーム セグメンターを使用して低遅延メディア プレイリストを出力します。
    • 実行する価値がある理由: セッションは、オンラインになる前に低遅延リンクを再現するのに適した、プレビュー、2 Mbps、および 4 Mbps の 3 方向バリアントのワークフローを提供します。
    • 開始方法: まず、同じ親ディレクトリの下に複数のバリアント サブディレクトリを準備し、各 UDP 出力ポートをセグメンタに対応させて有効にします。part-target-duration-ms
  • ライブ ブロードキャスト検証アラーム スクリプトを作成する

    • 何をすべきか: Media Stream Validator の即時オプションを CI またはライブ ブロードキャスト公開プロセスに接続します。
    • 実行する価値がある理由: 長期的なライブ検証では、エラーが検出されたときに出力される可能性があり、チームは検証全体が終了するまで待つ必要がありません。
    • 開始方法: ログ システムへのバリデータ出力を収集し、プレイリスト、セグメント、コーデックに関連するエラーのアラーム ルールを設定します。
  • マスター プレイリスト オーディオ グループ ジェネレーターを作成

    • 内容: 言語、コーデック、チャンネル数を入力すると、完全なオーディオ グループとバリアント エントリが自動的に生成されます。
    • 実行する価値がある理由: スピーチでは、各コーデックとチャネル数のペアにオーディオ グループが必要であり、各グループにすべての言語が含まれている必要があることが強調されました。
    • 開始方法: まずステレオ AAC フォールバック グループを修正し、次にロスレス、マルチチャンネル AAC、AC-3 およびその他の組み合わせ用にグループを拡張し、最後にバリアント エントリをコピーします。
  • スコア戦略チェッカーを作成

    • 何をすべきか: マスター プレイリストをスキャンし、すべてのバリアントに SCORE が設定されているかどうかを確認し、ターゲット コーデックのスコアがより高いかどうかを確認します。
    • 価値がある理由: Apple は並べ替えが完了していることを要求しています。 SCORE が不足していると、開発者が意図したとおりにプレイヤーが選択できない可能性があります。
    • 開始方法: 分析#EXT-X-STREAM-INFOK、抽出しますAUDIOBANDWIDTHSCORE、USAC または指定されたコーデックの優先度レポートを生成します。

関連セッション

コメント

GitHub Issues · utterances