ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
HLSインタースティシャルの最新情報
HLSインタースティシャルは、広告、他のインタースティシャル、HLSストリーム間で動画コンテンツをシームレスに移行できるようにするものです。ここでは、広告インベントリを最適化したり、HLSを使用する際にスナップイン/アウトを実行してインタースティシャル表示を微調整したりする方法などを紹介します。
リソース
関連ビデオ
WWDC22
WWDC21
-
ダウンロード
♪ ♪
こんにちは Prashantです WWDCへようこそ 2021年に HLSインター スティシャルを導入しました HLSストリームに広告等を スケジュール投稿させる 方法を提供します 今年は 広告の内容をより最適化し 表現の仕方を微調整できる 機能を追加しました それでは新機能を紹介します まず仕組みについて 簡単に説明します 次に 新たに追加された 広告の表示方法を説明します その後SNAPアトリビュートで 特にライブシナリオでの 広告体験をどのように 微調整できるかを見ます 次に HLS 仕様に追加された 新しいクエリパラメータの 説明をして 最後にこれらの新機能を 組み込んだ AVFoundation API の 変更について説明します 新機能を紹介する前に HLSインタースティシャル について説明します 広告を個別アセットとし それをプログラムの タイムライン上に 予約できます discontinuityタグでstitchする 必要はありません 複数の再生可能なリストを 直接参照できます このため広告設定は簡単で プライマリコンテンツから 複数のリストを指定 するだけで良いです
プライマリコンテンツを示す メディアプレイリストです 例えば 再生中に2つの 広告を予約したい場合 最初の広告は再生開始後 5秒で表示させたい時 DATERANGEタグで広告の 開始時刻を指定すれば良いです
2つ目の広告を 15秒で表示させたい場合 別のDATERANGEタグを 追加することになります とてもシンプルです
またプライマリコンテンツに広告が 既にstitchされている可能性もあります また挿入済広告の再生時間と 等しい再生オフセットを指定し これらの広告を 置き換えることも可能です
その他に HLS インタースティシャルでは 広告のナビゲーション制限を 指定したり ライブシナリオで早期復帰の スケジュールを 組むことも可能です 詳しくは WWDC2021の こちらのセッションを ご覧ください 広告配置はコンテンツの タイムラインに沿って 予約できますが 今年は広告の配置を強制的に 再生の最初または最後にする 機能を追加しました その為CUE属性で指定できる 新しいキューイング機能を 以下に追加しました 以下の値の単数または複数を 取ることができます PREを指定すると プライマリコンテンツの提示が 始まる前に 広告が表示されます これは番組にチャンネルを 合わせる前に プレミアム広告スポットを 予約したいような ライブシナリオで 特に有効的です POST設定は プライマリコンテンツの表示後に 広告が表示されることを 意味します これはイベント配信の際に ライブイベントの終了時に エンドクレジットを 表示させたい場合に便利です またONCEの場合 広告は一度だけ表示されます ユーザーが広告の前に シークバックした場合 再び広告が再生されることは もうありません 再生開始時に 一度だけ表示される レーティング画面への 応用が期待できます
これはプレイリストの例で 広告をプレロールと ポストロールとして 設定しています なおプレロールは一度だけ 再生される設定です また 再生開始から 約10秒で1回だけ広告を 表示するように 設定しています
ライブシナリオの広告配信は チャレンジがあります 例えばプレイリストの 番組日付時刻タグの 設定にあるクロックを使用した パッケージャーと メディアを生成している エンコーダーが別のクロックで 駆動している場合があります さて2つのクロックは必ずしも 同期している必要はありません 例えばセグメント0と 100に関連付けられた 日付時刻タグの差は 約800秒です
ですが個々のセグメント時間は 8秒以下であるため 累積メディア時間は それより若干短くなります
エンコーダーのクロックより パッケージャーのクロックが わずかに速い場合 広告が実際に開始される メディア時間はスレート内の どこかに入るかもしれません また広告期間と 同じオフセットで メインコンテンツに 再参加することを期待すると 実際にはスレートに続く メインコンテンツを見逃す
SNAP属性を OUT値で使用すると 意図した広告開始時刻に 最も近いセグメント境界で プライマリコンテンツから スナップアウトできます SNAP属性も同様に IN値で使用し広告の 近いプライマリコンテンツ にスナップインできます SNAP属性はライブ使用を お勧めします 予めパッケージ化された ビデオオンデマンド コンテンツを扱う際には 不要なはずです
広告がアウトとインの両方に 予定されているリストを表示します 今年は広告の最適化や セッション管理に役立つ クエリパラメータも 追加されました 広告ポッドの途中でライブ ストリームに接続する場合 どこまで進んでいるかを知り 残時間で最も価値のある 広告枠を表示することに 興味があるはずです
HLS_start_offset を 追加しました HLS_start_offset クエリパラメータは Asset-list URLのリクエスト と一緒に提供されます ライブコンテンツの場合 配信時に再生を開始する アセットリストのオフセット を指定します VODコンテンツでは インタースティシャルで 置換されたリージョンに 探索する際に アセットリストに オフセットされます
これはライブプレイリストの 先頭から5秒のところに 15秒の広告が入るよう 予約しています ハイライトされた部分は インタースティシャルに置換 配信参加時にクライアントは ライブエッジから 3秒程度の遅れを とるのが普通です その時点で予定した 15秒の広告ポッドは 10秒間 再生されたことになります HLS_start_offsetの一部 として提供されます クライアントの広告時間は 残り5秒となったので サーバはアセットリストを 作成し そのリストの 最後5秒に価値のある広告を 配置できます
サーバでは同じ広告を 何度も配信しないよう 複数の広告リクエストで 同じ再生セッションを 追跡する方法が 必要かもしれません そこで広告リクエストと プライマリ再生セッションを 関連付けるために HLS_primary_idを追加した クライアントが特定の再生 セッションのhttpリクエストに対し 再生セッション ID リクエストヘッダを設定すると X-Asset-URI および X-Asset-List リクエストに HLS_primary_id の 一部として このセッション ID を 提供することができます セッション ID リクエストを 設定しないクライアントは プライマリ再生セッション ごとに固有の値を作成し プライマリ及び広告 アセットリクエストの HLS_primary_id として 使用する必要があります AVFoundation が AVPlayerInterstitialControllerと AVPlayerInterstitialEvent オブジェクトを提供し クライアント側が広告予定 できる事を思い出させます AVPlayerInterstitialEvent オブジェクトにも CUEとSNAPのオプションが サポートされました 広告をプレロールとして予約 又はポストロールとして予約 CUEプロパティで オプションを指定できます 日付範囲タグのCUE属性で 通知される1回再生OPは willPlayOnceプロパティで Booleanとして設定されます スナップアウトするに プロパティ alignsStartWithPrimarySegmentBoundary スナップインするには プロパティ alignsResumptionWithPrimarySegmentBoundary
AVPlayerInterstitialEventが 拡張され続けているため プロパティの設定と オブジェクトの生成を 分離した方が 良いと考えました AVPlayerInterstitialEvent オブジェクトが変更可能に イベントのプライマリアイテムと 開始時刻だけで オブジェクトを 作成できるようになりました そして関連する プロパティを設定することで 様々な設定オプションを 指定することができます コントローラがこれらの コピーを作成するため 一度イベントが コントローラに設定されると その後の変更は コントローラには 反映されないことに 注意してください 変更を有効にするには コントローラでもう一度 イベントを設定する 必要があります 最後にX-CUE属性を使用し 広告をプレロール又は ポストロールとして 予約することができます X-CUEを1回に設定すれば 広告再生1回にできます クロックドリフト管理には X-SNAP属性を使用します ライブジョイン中に アセットリスト作成するには HLS_start_offset を使用できます HLS_primary_id を使用して インタースティシャル広告と プライマリ再生セッションを 関連付けることができます HLS広告を予約する場合 AVFoundation は SharePlay中に管理できる事 ご存知でしたか? 詳しくは こちらのセッションを ご覧ください 僕からは以上です ありがとうございました
-
-
7:58 - Client schedules an ad pod at 10s into primary asset
// 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()
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。