WWDC Quick Look 💓 By SwiftGGTeam
What's new in HLS Interstitials

What's new in HLS Interstitials

元の動画を見る

ハイライト

HLS インタースティシャル 2022 では、新しい広告スケジュール オプション (CUE 属性)、ライブ ブロードキャスト シーンの正確な配置 (SNAP 属性)、サーバー側の広告最適化クエリ パラメーター (HLS_start_offset および HLS_primary_id) が追加され、広告挿入がより柔軟になり、ライブ ブロードキャストのクロック ドリフト問題が解決され、残りの再生時間に基づいた広告配信の最適化がサポートされます。


主要内容

2021 年に開始された HLS インタースティシャルは、広告を従来のメイン コンテンツ ストリームに接続するのではなく、マルチバリアント プレイリストを通じて参照されるスタンドアロン アセットとして扱います。開発者は、プレイリストで DATERANGE タグを使用して広告の開始時間を指定するだけで、広告のスケジュールを実装できます。 (00:0901:09)

この設計により、広告挿入プロセスが簡素化されます。以前は、広告を繋ぎ合わせるためにメイン コンテンツ内で不連続タグを使用する必要がありましたが、現在は広告のマルチバリアント プレイリストを直接ポイントしています。メイン コンテンツにすでに結合された広告がある場合は、それらを再開オフセットで置き換えることができます。オフセットは、置き換えられた広告の期間と同じです。 (01:1801:57)

2022 年のアップデートでは、より正確な広告スケジュール制御、ライブ ブロードキャスト シナリオでのクロック ドリフト処理、サーバー側の広告の最適化という 3 つの方向に焦点を当てています。


詳細

CUE 属性: 広告再生のタイミングを制御します。

(02:26) CUE 属性は、コンテンツ タイムラインの特定の時点に基づくのではなく、再生位置の前後に広告を強制的に配置します。次の 3 つの値がサポートされています。

  • PRE: 広告はメイン コンテンツの開始前に再生され、ライブ ブロードキャスト シナリオのプレミアム広告スポット (ゴールデン広告スペース) に適しています。
  • POST: 広告はメイン コンテンツの終了後に再生され、イベントの終わりのエンド クレジットに適しています。
  • 1 回: 広告は 1 回だけ再生され、ユーザーが広告の位置に戻っても再度表示されることはありません。評価画面や法的記述に適しています。

(02:4603:25) プレロール、ポストロール、ミッドロールの組み合わせを示す例。プリロールは 1 回だけ再生されるように ONCE に設定されています。 10 秒のミッドロールも ONCE に設定されているため、ユーザーは 10 秒前に戻り、再度再生することはありません。

SNAP 属性: ライブクロックのドリフトを解決する

(03:40) ライブ ブロードキャスト シナリオでは、パッケージャーとエンコーダーは異なるクロックを使用する場合があります。パッケージャーのクロックがエンコーダーのクロックよりも速く、プログラムの日時ラベルに 800 秒の差が示されている場合、実際のメディアの長さは 800 秒よりわずかに短くなります。

このクロック ドリフトにより問題が発生する可能性があります。広告がスケジュールされた時間に再生を開始すると、実際のメディア時間は予定内に収まる場合があります。広告の再生時間をメイン コンテンツに戻るためのオフセットとして使用すると、広告の背後にあるメイン コンテンツの部分が失われます。 (04:17)

(04:37) 解決策は SNAP 属性です。 SNAP-OUT では、予定開始時間に近いセグメント境界で広告をメイン コンテンツに切り替えることができ、SNAP-IN では、予定復帰時間に近いセグメント境界で広告をメイン コンテンツに切り替えることができます。

この例では、SNAP-OUT と SNAP-IN の両方が設定されたライブ プレイリスト内の広告を示しています。 (05:04)

HLS_start_offset: ライブブロードキャスト中に追加される広告エクスペリエンスを最適化します。

(05:10) ライブ ブロードキャストに途中から参加する場合、残りの時間で最も価値のある広告を表示できるように、サーバーは現在の広告ポッドの再生時間を知る必要があります。

HLS_start_offset クエリ パラメータは、インタースティシャル アセット リスト URL リクエストに追加されます。ライブ ブロードキャスト コンテンツでは、ライブ ブロードキャストに参加するときにアセット リスト内の再生オフセットを指定します。 VOD コンテンツの下で、置き換えられた領域をシークするときのオフセットを指定します。 (05:54)

この例では、15 秒の広告がプレイリストの開始から 5 秒後にスケジュールされます。ライブ ブロードキャストに途中から参加する場合、クライアントは通常、ライブ エッジより 3 ターゲット期間遅れており、この時点で広告は 10 秒間再生されています。サーバーは HLS_start_offset=10 を受信すると、最後の 5 秒間に最も高価な広告を配置できます。 (06:0506:20)

HLS_primary_id: リクエスト間でプレイ セッションを関連付ける

(06:30) サーバーは、同じ広告が繰り返し再生されるのを避けるために、同じ再生セッションに対する複数の広告リクエストを追跡する必要があります。

HLS_primary_id クエリ パラメーターは、広告リクエストをプライマリ再生セッションに関連付けます。クライアントがすべての HTTP リクエストの再生セッション ID リクエスト ヘッダーを設定する場合は、この ID を HLS_primary_id として使用します。それ以外の場合は、メイン再生セッションごとに一意の値を生成し、それをメイン コンテンツとインストリーム広告リクエストで使用します。 (06:40)

AVFoundation API の変更

(07:15) AVFoundationAVPlayerInterstitialControllerそしてAVPlayerInterstitialEventCUE および SNAP オプションがサポートされるようになりました。

  • cueプロパティ: プリロールまたはポストロールを設定します。
  • willPlayOnce属性: CUE に対応する ONCE 値。
  • alignsStartWithPrimarySegmentBoundary属性: SNAP-OUTに対応します。
  • alignsResumptionWithPrimarySegmentBoundary属性: SNAP-INに対応します。

(07:58) セッションの例は、クライアントが広告ポッドを 10 秒にスケジュールしていることを示しています。

// Client schedules an ad pod at 10s into primary asset
let player = AVPlayer(url: movieURL)  // no ads in primary asset
let controller = AVPlayerInterstitialEventController(primaryPlayer: player)
let adPodTemplates = [AVPlayerItem(url: ad1URL), AVPlayerItem(url: ad2URL)]
let event = AVPlayerInterstitialEvent(primaryItem: player.currentItem,
                             time: CMTime(seconds: 10, preferredTimescale: 1))
event.templateItems = adPodTemplates
event.identifier = "Ad1"
event.restrictions = []
event.resumptionOffset = .zero
event.playoutLimit = .invalid
event.cue = .none

controller.events = [event]
player.currentItem.translatesPlayerInterstitialEvents = true
let vc = AVPlayerViewController()
vc.player = player
player.play()

キーポイント:

  • AVPlayerInterstitialEvent主な項目と時間を使用して作成し、プロパティを設定します。
  • templateItems広告ポッド内の広告のリストです。
  • cueに設定.noneプリロール/ポストロールが使用されず、時間に基づいてスケジュールされることを示します。
  • translatesPlayerInterstitialEventstrue に設定すると、プレーヤーがブレーク イベントを処理します。

08:06AVPlayerInterstitialEvent今は可変です。作成時に必要なのは主な項目と開始時間のみで、その後構成プロパティを設定します。イベントがコントローラーに設定された後は、コントローラーがオブジェクトをコピーするため、その後の変更は有効になりません。これを変更するには、イベントをリセットする必要があります。


重要ポイント

  • やるべきこと: プレミアム プレロール広告スロットをライブ ストリームに追加します。 実行する価値がある理由: CUE 属性の PRE 値により、番組の開始前に広告を再生できます。これは、ライブ ブロードキャストのプライム広告スロットに適しています。 ONCE 値により、ユーザーが更新または再接続した後にアドバタイズメントが繰り返し再生されなくなります。 開始方法: マルチバリアント プレイリストでプレロール広告の DATERANGE を設定するX-CUE="PRE,ONCE"

  • 対処方法: ライブ広告のクロック ドリフトによるメイン コンテンツの損失を解決します。 実行する価値がある理由: 生放送中は、パッケージャーとエンコーダーのクロックが同期していないため、広告のカットとリターンの位置が不正確になり、番組コンテンツが見逃される可能性があります。 開始方法: DATERANGE のセットアップX-SNAP="OUT,IN"により、最も近いセグメント境界で広告を切り替えたり、切り替えたりできるようになります。

  • 対処方法: 途中で参加するユーザー向けに広告の配置を最適化します。 実行する価値がある理由: HLS_start_offset は残りの広告時間をサーバーに通知するため、最も高価な広告を最後に配置できます。 開始方法: サーバーは X-Asset-List リクエストの HLS_start_offset パラメーターを確認し、オフセットに従ってアセット リストの順序を調整します。

  • 対処方法: 同じセッション内で同じ広告を繰り返し再生しないでください。 価値がある理由: 再生セッション中に同じ広告を複数回見ると、ユーザーのエクスペリエンスは低下します。 開始方法: クライアントは再生セッション ID を HLS_primary_id パラメーターとして使用し、サーバーはそれに応じて再生された広告を追跡します。

  • 内容: AVFoundation を使用してクライアント側の広告をスケジュールします。 実行する価値がある理由:AVPlayerInterstitialEvent新しい CUE 属性と SNAP 属性をサポートし、HLS プレイリストの動作と一致させることができます。 開始方法: 作成するAVPlayerInterstitialEvent、設定cuewillPlayOncealignsStartWithPrimarySegmentBoundaryおよびその他のプロパティ。


関連セッション

コメント

GitHub Issues · utterances