ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
AirPlayにおけるインタースティシャルの詳細
AirPlayでHLSインタースティシャルを使用し、広告の合間のビデオコンテンツのシームレスな 移行を実現する方法を紹介します。一般に利用されるスマートTVにAppleデバイスからコンテンツを共有する際の優れた体験を生み出すためのベストプラクティスとヒントを確認しましょう。
関連する章
- 0:00 - Overview
- 0:02 - Navigation restrictions
- 0:04 - Optimize AirPlay playback
- 0:06 - Interstitials localization
- 0:08 - Testing
- 0:10 - Example VOD plan
リソース
- AirPlay-Enabled TVs and Video Accessories
- Getting Started with HLS Interstitials
- Media playback
- Supporting AirPlay in your app
関連ビデオ
WWDC23
-
ダウンロード
♪ ♪
みなさんこんにちは Amitです 私はAirPlayチームの エンジニアです AirPlayはビデオ 写真 音楽などを Appleデバイスから AirPlay対応レシーバーにワイヤレスで 共有できるように開発されました 広告や次回リリースの予告編など 複数のソースから セカンダリーコンテンツを アプリの プライマリコンテンツと 一緒に再生させたい場合があります このセカンダリコンテンツを インタースティシャルと呼びます インタースティシャルの AirPlayユーザー体験を実現することに 関心があれば このセッションを ぜひご確認ください ここでは まずAirPlayと HLSインタースティシャルの 概要について説明します その後 インタースティシャル再生の ナビゲーション制限を AirPlayレシーバーに 転送する方法について説明します その後 すべてのデバイスで AirPlay再生を最適化するため ベストプラクティスについて説明します インタースティシャルの ローカライゼーションと AirPlayのテストについても 簡単に説明します 最後に HLSインタースティシャルを 使用した VODサービスプランの提供例を紹介します AirPlayは以下のいずれかの方法で 使用できます AirPlayオーディオ 複数のHomePodまたは AirPlay対応スピーカーがあれば お気に入りの音楽やポッドキャストを 完全に同期して 家のどこからでも楽しむことができます AirPlayオーディオの詳細は 同僚のKellyによるセッション 「Tune up your AirPlay Audio experience」をご覧ください AirPlayミラーリングを使えば Webサイト プレゼンテーション スプレッドシートなど iOSや macOSの画面上のあらゆるものを AirPlayレシーバーと共有できます
AirPlayビデオは ビデオをワイヤレスで送信し AirPlay対応テレビ つまり Apple TV Macレシーバー AirPlay対応スマートテレビ で視聴できます Apple TVやAirPlay対応テレビでは 最大4K HDR映像と サラウンド・サウンドが楽しめます HLSインタースティシャルでは 広告はプライマリメディアアセットの タイムラインに定義される 別のアセットとして扱われます メディアプレーヤーのタイムラインが マーカーにヒットしたら インタースティシャルの 再生を開始します HLSインタースティシャルは VOD またはライブのプライマリ・コンテンツに スケジューリングできプライマリ コンテンツに変更の必要はありません インタースティシャルは再生中に スケジュールしたり 解除したりできます HLSインタースティシャルでは 広告アセットのレイトバインディングが 可能でプライマリコンテンツが 広告マーカーに 到達した時点で広告を決定したり リバインドすることもできます 例えば HLSインタースティシャルを使えば 視聴者がすでに視聴した 動画の一部に移動したときに 同じ広告を 繰り返し見ることがなくなります HLSインタースティシャルは AirPlayと ピクチャ・イン・ピクチャに対応しています すべての広告およびインタースティシャル Airplayセッションに引き継がれます HLSインタースティシャルは オーディオと ビデオストリーミングに使用できます
HLSインタースティシャルは サーバー主導とクライアント主導 2つの方法でスケジュールできます スケジューリングとコントロール プロパティの設定に関して 共通点があります サーバーはEXT-X-DATERANGEタグを プライマリーアセットのプレイリストに 配置することでインタースティシャルを スケジュールできます アプリコードはAVPlayerInterstitial EventMonitorのオブジェクトを使用して インタースティシャルのスケジュールと 進行状況をモニターできます アプリコードはAVFoundation APIを 使用することで インタースティシャルをプログラムに スケジュールすることができます 広告は AVPlayerInterstitial Eventのオブジェクトを作成できます オブジェクトはプレイヤーの アイテムタイムライン上に広告を 配置するために必要な すべての情報を含んでいます すべてのオブジェクトを コントローラに設定することができます コントローラは プライマリプレーヤーによって 再生されるアイテムの インタースティシャルイベントを スケジュールします VODとライブ・コンテンツのための 再生フローの例です ご覧のように VODとライブの両方のユースケースで 広告1と広告2といい 連続した広告アセットがあります VODの場合 再生は中断した時点から再開されます Liveのユースケースでは 広告によって消費された 時間だけ再生が早まります プライマリコンテンツの 再開オフセットは サーバーまたはクライアント主導の メソッドで設定できます サーバーメソッドの場合 プライマリコンテンツの再開オフセットは HLSプレイリストの EXT-DATERANGEタグ内に X-RESUME-OFFSETの属性を 設定することで実現できます クライアントメソッドの再開オフセットは AVFoundation APIで設定できます つまりAVPlayerInterstitial Eventに 再開オフセットプロパティを設定します HLSプレイリスト属性および インタースティシャルの詳細については このセッションの下にある 参考リンクを参照してください
AirPlayビデオは iPhone上のアプリロック画面 コントロールセンターに表示される 内蔵コントロールを備えているため テレビの再生 一時停止 早送り 巻き戻し 音量調整を簡単に行うことができます AirPlayを使えば AirPlayレシーバーのリモコンを 使って同じリモートコントロールを 行うこともできます インタースティシャル広告では 契約上の理由から サブスクリプション 登録者が広告を通り越したり スキップしたりすることを回避する 必要があります HLSには ユーザーナビゲーション制限の サポートが組み込まれています 2つの制限が定義されています まずスキップ制限は 想定速度と異なる速度で広告を 再生することを防ぎます ジャンプ制限で現在の広告から ジャンプできないようにします 例として 視聴者が複数のインタースティシャルに またがってシークしようとする場合 シークを完了させる前に 少なくとも1つのインタースティシャルを 再生しなければなりません
AirPlayがアクティブで デバイス またはAirPlayレシーバーでの再生中 AVKitまたは カスタムアプリコードである プレーヤーのUIレベルで ナビゲーション制限が強制されます 以下の組み合わせで使用すると ナビゲーションの制限を適用できます スキップ ジャンプ そしてスキップ&ジャンプ 他のすべてのプロパティと同様に インタースティシャル ナビゲーションの制限は 2つの方法を使用して 設定することができます まずサーバー主導型はサーバーメソッドで ナビゲーションの制限を 設定するため HLSプレイリストは EXT-X-DATERANGEタグの下に X-RESTRICT属性を 設定する必要があります 一方 クライアント主導型では アプリコードは AVPlayerInterstitial オブジェクトのプロパティ制限を 上記のいずれかの方法で設定し Appleデバイスのローカル再生と AirPlayレシーバーの AirPlayセッションで インタースティシャル再生に ナビゲーション制限を
適用するようにできます レシーバーはAppleでも Apple以外も構いません つまり Apple以外のレシーバーはすべて AVFoundationコードを実行していません インタースティシャルの ナビゲーション制限を AirPlayレシーバーで 確実に実行するために 特定のプロパティを設定するなど アプリでコードを変更する必要があるか といった疑問をお持ちでしょう サーバー主導型ならプレイリストに X-RESTRICT属性を設定し クライアント主導型なら アプリコードに AVPlayerInterstitialEvent オブジェクトの プロパティ制限を設定した ナビゲーション制限であれば コードの変更は不要です サーバー方式 つまりHLSプレイリストを 使ってスキップ制限の適用方法を 実演するため プレイリストを 作り始めましょう
10秒間のプライマリアセットを含む プレイリストがあります このプレイリストを連続表示される 広告でアップデートします 10秒間の広告が2つ プレイリストに追加され プライマリアセットの5秒後に 再生されます どちらの広告も開始日が 同日であるため これらの広告はプレイリストで表示される 順番で再生されます つまり この場合 広告1が最初に再生されます 広告2の再生が終わると プレーヤーはプライマリアセットの 再生を再開します
最初のインタースティシャルIDである 広告1でスキップするよう設定されています そのため スキップナビゲーション制限は 最初のインタースティシャル つまり広告1の再生に適用されます しかし 2番目の インタースティシャルID(広告2)には ナビゲーション制限 (X-RESTRICT属性)が ないことにお気づきでしょうか この設定により 広告の提供に柔軟性が生まれます
次に クライアント主導のメソッドを 見てみましょう ここでは例を単純化するために 広告イベントを 1つだけ追加します AVPlayerInterstitialEventを プライマリアイテムとイベントの 開始時間で作成します 次に さまざまな構成オプションを設定し 広告1イベントに スキップ制限を設定します 最後に コントローラの 広告1イベントを設定します レシーバーでのAirPlay再生を 最適化する方法について説明します AirPlayは多様なレシーバーに 対応しています これらのレシーバーには Apple TV セットトップボックス メディアスティック サウンドバー スマートスピーカー スマートテレビなどがあります 各AirPlayレシーバーはそれぞれ ハードウェアやソフトウェア メディア処理能力などが異なります メディア処理能力の違いにより AirPlayレシーバーによっては メディアアセットの切り替え時に トランジション遅延が 発生する場合があります 一部のAirPlayレシーバーで 移行遅延が発生する 一般的な理由の1つは デコーダーをあるビデオフォーマットから 別のフォーマットに 切り替えることにかかる時間です レシーバーによっては メディア処理能力に差があるため このデコーダー間の 切り替えに時間がかかり 移行遅延が発生することが あります インタースティシャルの ユースケースの場合 プライマリーアセットが AVCでエンコードされ インタースティシャルアセットが HEVCでエンコードされます
AirPlayレシーバー上のプライマリ メディアアセットと インタースティシャル間の 移行遅延を低減させるため プライマリーとインタースティシャルの メディアアセット間で メディア操作パラメータを 一致させておくことを推奨します ビデオアセットの場合 ビデオコーデック フレームレート アスペクト比が含まれます オーディオアセットの場合 オーディオコーデック サンプリングの頻度 解像度 そして チャンネルレイアウトが含まれます プライマリコンテンツまたは インタースティシャルコンテンツの同期を 保証するため メディアコンポーネントの すべてのプレゼンテーションユニット すなわちオーディオ ビデオ 字幕は タイムスタンプが正確に施され 互いの仕様の整合性が確保される 必要があります インタースティシャルや広告の言語に 基づいて登録者のエンゲージメントを 高める必要がある場合は インタースティシャルの音声と 字幕トラックが一致するよう指定できます インタースティシャルと プライマリアセットに同様のオーディオと 字幕トラックがある場合自動トラック選択が インタースティシャル再生に適用されます この自動選択は ローカル再生と Airplayセッションに適用されます コードの変更は必要ありません ストリーミングアプリで AirPlayをテストする際に 考慮しなければならない点を 簡単に説明しましょう
ストリーミングアプリで AirPlayビデオをテストするには AirPlayセンダーと AirPlayレシーバーデバイスでの 一連のテストが必要です iPhone iPad Macを含む AirPlayビデオ送信デバイス AirPlayビデオレシーバーには Apple TVや Mac 数百を超えるApple TV以外の レシーバーやスマートTVが含まれます これらのレシーバーはそれぞれ ハードウェア ソフトウェア 再生処理能力が異なります ストリーミングアプリで AirPlayをテストする場合 レシーバーとしてApple TVから 始めると良いですが 同時にApple以外のAirPlayレシーバーの 各クラスから少なくとも 1台のデバイスを 選択することを強くお勧めします レシーバーデバイスは メディア処理能力 つまりハイエンドレシーバーと ローエンドレシーバーによって さらに分けることができます 例えば ストリーミングサービスが Dolby Visionをサポートしている場合 アプリからの AirPlay再生を検証する際に Dolby Visionに対応したAirPlay レシーバーをテストスイートに含めます さらにSDRとステレオAACオーディオのみを サポートするローエンドの AirPlayレシーバーを必ず含めます ストリーミングアプリが 例えば iPhoneのような 1つの範囲の送信デバイスのみを 対象としている場合でも ハイエンドとローエンドの受信機を含む テスト・スイートの構築することを 推奨します テストするAirPlayレシーバーを 選択する際は 本プレゼンテーションの 参考文献リンクにある Apple市販デバイスのリストを 参照してください これから VODプランの例を 見てみましょう
この例では サービス・プロバイダーは 3つのサービス・プランを提供します プランA:広告付きVODサービスプラン 広告再生中のユーザー操作は 再生/一時停止のみ プランB:広告なしのVODサービスプラン プランC:このプランにご加入の方は 広告をスキップすることができます この例では サービスプロバイダーは サーバー上のプレイリストで インタースティシャルをサポートするため 最大構成にしたいと思います スキップ制限のデモで使用したものと 同様のプレイリストを使用しますが 若干の変更があります このプレイリストでは EXT-X-DATERANGEタグが 2つの広告(広告1と広告2)を スケジュールします 広告の再生は プライマリーアセットの 5秒後に開始されます プレーヤーは両方の広告を再生した後 プライマリアセットの再生を 中断したところから再開します 両方の広告イベントで スキップ制限が設定されています プランA(広告付きVODサービス)の 契約者をサポートする プレイリストはすでに インタースティシャルをサポートするため すべてのルールがありアプリコードを 変更する必要はありません プランB(広告が再生されない)を サポートするには 次のようにします AVPlayerItem プロパティを使用します: 自動的にインタースティシャル イベントを処理しfalseに設定します このプロパティをfalseに設定すると サーバーがEXT-X-DATERANGEタグで 指定したAVPlayerInterstitial イベントは無効になります
プランCをサポートするために 特定のプランに加入している加入者が 最初の広告が終了した後 広告をスキップするために 最初の広告 広告1の制限を 保持することが必要です クライアントアプリコードを修正して 広告2である2番目の インタースティシャルに設定された 制限プロパティをオーバーライドし スキップ制限が解除されるようにします
このコード例では アプリコードを使用して HLSプレイリストの広告2に設定された ナビゲーション制限をオーバーライドします そのために まず広告1と広告2の AVPlayerInterstitialEventを 抽出します 次に 広告2イベントのコピーを作成し コピーのナビゲーション制限を解除します 最後に すべての インタースティシャルイベントの スケジュールでコントローラを更新します これがオリジナルの広告1イベントと 広告2イベントの修正コピーです それでは すべてのプランの加入者体験を マッピングする デモビデオを見てみましょう それぞれのデモは 同じHLSプレイリストを指していて 「クッキーをデコレーションする シェフ」という1つのメインコンテンツと メインコンテンツの5秒後に スケジュールされた2つの広告があります
プランAの例のデモから始めましょう AirPlayビデオをトリガーします
これがメインコンテンツです
これは広告1で継続時間は10秒です HLSプレイリストではサーバーによって スキップ制限が設定されているため 加入者はこの広告をスキップしたり 早送りしたりすることができません これは広告2で この加入者は広告のスキップや 早送りができないため スキップ制限も設定されています メインコンテンツは広告1が スケジュールされたオフセットが再開します 注:これで加入者は ジャンプできるようになりました
2つ目のデモでは 前回のデモと同様の手順 つまりテレビへのAirPlayを行い プランBの加入者体験をデモします
前回のデモと同じ HLSプレイリストを使用していますが 5秒後にスケジュールされた 広告が表示されることはありません falseに設定しています
最後のデモは プランCの 加入者体験のデモです 最初の広告が終了すると 加入者は広告をスキップできます まずはメインコンテンツからです
これは通常の速度で 再生される広告1であり 加入者はこの広告をスキップしたり 早送りしたりすることはできません
2つ目の広告に設定されていた制限を プログラムでクリアしたため 加入者はロサンゼルスの ドローンショットである 広告2をスキップできます
この例をまとめるとクライアント・ アプリコードが サーバーサイドのインタースティシャルの プロパティや設定を どのようにオーバーライドできるかを 示しました サブスクリプションプランに応じて 同じアプリ内のクライアント アプリコードは AVPlayerにインタースティシャルを スケジュールさせ サーバーがHLSプレイリストに設定した プロパティを強制することができます インタースティシャルの 特定のプロパティを 更新することで部分的に オーバーライドします
最後に HLSインタースティシャルを スケジュールするには サーバーメソッドまたはクライアント アプリコードで AVF oundationのAPIを使用します アプリコードもプロパティを 「オーバーライドできる」と設定 を上書きすることもできます ナビゲーションの制限がローカル再生と AirPlayセッションに 適用されるにはHLSプレイリストは EXT-X-DATERANGEタグに X-RESTRICT属性を 設定する必要があります または アプリコードで AVPlayerInterstitialEvent または アプリコードで AVPlayerInterstitialEvent AirPlayレシーバー上のプライマリ メディアアセットとインタースティシャル 低減するためメディアアセット間のメディア 操作パラメータを一致させてください メディア資産間のメディア操作 パラメータのマッチング ストリーミングアプリで AirPlayをテストするには テストスイートに幅広いレシーバーを 含めてください このセッションが有益であることを 願っています ありがとうございました
-
-
9:19 - Example: Navigation restriction client driven
let player = AVPlayer(url: movieURL) //no ads in primary let controller = AVPlayerInterstitialEventController( primaryPlayer: player ) let ad1Item = [AVPlayerItem(url: ad1Url)] let ad1event = AVPlayerInterstitialEvent( primaryItem: player.currentItem, time: CMTime(seconds: 5, preferredTimescale: 1) ) ad1event.identifier = "ad1" ad1event.templateItems = ad1Item //set SKIP restriction on ad1 ad1event.restrictions = [.requiresPlaybackAtPreferredRateForAdvancement] controller.events = [ad1event] code snippet.
-
15:44 - Plan C: Sample code to override the restrictions
let player = AVPlayer( url: movieURL ) let controller = AVPlayerInterstitialEventController( primaryPlayer: player ) let ad1Event = controller.events[0] let ad2Event = controller.events[1] let newEvent = ad2Event.copy() as! AVPlayerInterstitialEvent //clear the restrictions on ad2 event newEvent.restrictions = [] //set the original ad1 Event and modified ad2 Event on controller controller.events = [ad1Event, newEvent]
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。