ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
AirPlay 2による大画面への接続
AirPlayを使用すると、ビデオ、写真、音楽などを、Apple製デバイスからApple TVやお気に入りのスピーカー、人気のスマートテレビにストリーミングすることができます。このセッションでは、長編コンテンツのための自動ルート選択、リモートコントロール、再生中のメタデータ、ビデオ品質に関する考慮事項など、AirPlayビデオで可能な限り最高の体験を実現する方法を紹介します。
リソース
- Becoming a now playable app
- FairPlay Streaming
- Incorporating Ads into a Playlist
- Integrating AirPlay for Long-Form Video Apps
- プレゼンテーションスライド(PDF)
関連ビデオ
WWDC19
-
ダウンロード
(音楽)
皆さん おはようございます (拍手) ジョナサン・ベネットです AppleのConnected Mediaチームと 仕事しています カンファレンスの最初に AirPlayについて話せてうれしいです まずAirPlayで何ができるかを ご説明します
ビデオをワイヤレスで送信し テレビで鑑賞したり― 家全体で音楽も聴けます それに加え―
AirPlayミラーリングを使い iOSかmacOSの画面から ほぼすべて共有できます 本日はビデオに焦点を当てます 我々が改善した点を いくつかご紹介します テレビへの出力や AirPlay sending devicesでの AirPlayのエクスペリエンスが 体験可能になります
送信先に関して ビデオをテレビにAirPlayするのは Apple TVだけでした 今も多くの人に選ばれています 今年初めに お聞きになったでしょう 我々は 大手テレビメーカー数社と協力し AirPlayのサポートを 直接 テレビに組み込んでいます これによりビデオをAirPlayで 再生できる場所の選択肢が激増し 利用できるテレビの数が 大幅に増えます
箱にこのラベルがあれば AirPlayミラーリングや― マルチルームでの音楽や ビデオもサポートされています
これは質の高い ビデオエクスペリエンスです
Apple TVでも AirPlay対応テレビでも可能で サラウンドサウンドで 最大4K HDRまで対応
我々がテレビに追加した すばらしい機能です 次はAirPlay sending devicesに 関してです アプリケーションからテレビへ コンテンツの出力を― より簡単にした iOSへの改善点を説明します
まずビデオアプリケーションは テレビの送信先を― AirPlayリストのトップにできます ビデオを再生したいテレビを 簡単に発見できます
また我々は リモートコントロールを改善し 利用者が素早く簡単に ビデオを共有できるようにしました
さらにiOSデバイスでの マルチタスクが可能です ビデオをテレビで再生しつつ 電話を受けたり iMessageから取得したビデオを 確認できます
そしてiOSは今 オンデバイスラーニングの使用を― テレビとAirPlayに提案可能です つまりソファに座り ビデオアプリケーションを起動し 番組を選べば 自動的にテレビに映ります
テレビが新たな送信先として 広がった今 ビデオアプリケーションが AirPlay対応かを確認すべきです これから皆さんに 開発に生かせる 重要な5つの分野をお話しします
まずテレビ出力用の 高画質ビデオを用意します
次にアプリケーション内のピッカーで テレビに映す方法です
ビデオが映ったら 操作可能か確認し―
iOSデバイスを使用しつつ ビデオを再生できるようにします
映画やテレビのような長いビデオを 再生するアプリケーションでは― 追加手順が いくつかあります ユーザがAirPlayの提案を 活用するためです
では高画質ビデオについてです
HTTP Live Streamingは― 高画質ビデオを高速で ストリーミングする方法です もうHLSでiOS Appsに ビデオ配信していますよね デバイスにフォーカスするよう― プレイリストを キュレート済みかもしれません iPhoneやiPadのスクリーンです
肝心なのはビデオをテレビに送信し AirPlay可能ということです つまりプレイリストには― テレビに適した幅広いバリアントが あることが重要です 4Kやサラウンドサウンドを サポートするバリアントを含みます
プレイリストに コンテンツのエンコードに使う― 複数のビデオコーデックが ある場合は? 各ビデオコーデックに 幅広いバリアントを用意します どのデバイスで再生しても ビデオはサポートされます またプレイヤーが 同じビデオコーデックを使い バリアント間で スムーズに移行可能になります
私がよくやることの1つが 早送りとビデオの検索です 例えば子供と…
映画を見ていて 怖い場面を飛ばしたりね WWDCビデオの最中に 見たいトピックを探すとします 速やかで素早い フレームプレビューを見ることで 見たいものを迅速に 間違いなく発見できます HLSプレイリストに I-frameのバリアントを含め ビデオにサポートを追加できます
最後の項目です 保護が要る高価値のコンテンツなら FairPlay Streamingを 使いましょう いつでもどこでも AirPlayに完全対応しています Apple TVへのAirPlayもです さらに AirPlayサポートが内蔵された― すべてのスマートテレビに 対応しています
AirPlayのHL streamsの 検証の詳細については― 別のビデオを作成しました そちらもご覧ください
高画質のコンテンツをお持ちなら スムーズに再生したいですよね ビデオに挿入する― プリロール ミッドロール ポストロールコンテンツがある時 HLSのdiscontinuityタグを使います プレイヤーと推定帯域幅は 損なわれないため インタースティシャルビデオは どちらも高画質です メインコンテンツを再開すると 高画質で再生が始まります
これらの インタースティシャルビデオも― メインコンテンツと 同じビデオフォーマットを使うことで 素早くスムーズに移行できます
HLS discontinuityタグが 使えない時や 連続再生したいコンテンツが 複数ある時は AVQueuePlayerをお勧めします
AirPlayで AVQueuePlayerを使えない時は 同じAVPlayerインスタンスを使用し 現在のアイテムを 新しいコンテンツに換えます AVPlayerを破棄し 新しいビデオを作ったり インスタンス間をスワップしては いけません AirPlayが 次のビデオを認識しなくなります そのためエンジンが 壊れる可能性があります ビデオの切り替えで 遅れが出るのは避けたいです
高画質のコンテンツを 入手したとして それをテレビに送る方法を見ましょう アプリケーションに AirPlayピッカーを追加します iOS 13の新機能で 送信先の順番を決められます
追加には AVRoutePickerViewを使用 iOS 11以降で使え 今はmacOSでも使えます MPVolumeViewの ルートボタンのプロパティで― 追加した人もいますね iOS 13ではルートボタンの プロパティは廃止予定です
ですがMPVolumeViewで Volume UIを― アプリケーションに追加ができます でもルートボタンには RoutePickerViewです
では追加方法を見ていきましょう とても簡単です AVRoutePickerViewを作成し 階層に追加します
iOS 13で― priorityitizesVideoDevicesを trueに設定してみます AirPlayのロゴが入った ビデオと― フォーカスされたルートボタンの アイコンが表示されます それらのテレビの送信先が トップに分類され 再生したいテレビを簡単に探せます
テレビでビデオを再生し コントロールする方法を確認しましょう リモートコントロールをシステム全体で より便利で機能的にしました
ロック画面での操作で ビデオの操作が可能ですし テレビをターゲットにする場合の 追加機能を加えました
“私のテレビでこれを再生して”と Siriでplayコマンドも出せます
また iOSデバイス上のものに加え 周りのデバイスもコントロール可能です コントロールセンターで HomePodやtvOSを対象にでき― 再生しているものを ほとんどの デバイスからコントロールできます
アプリケーションが リモートコントロールに非対応なら? 私のアプリケーションは テレビにAirPlayしています
でも画面のロック中は ビデオの再生に気づけず ビデオを操作する方法がありません
リモートコントロールをサポートすれば 再生中のビデオが何か―
また再生時間も分かります 素早く操作する方法です アートワークかタイトルを タップすれば ビデオ再生中の アプリケーションに戻れます
では これらのリモートコントロールを アプリケーションに追加する方法です “Now Playing”アプリケーションの 画面から始めます
この状態にするには リモートコントロールコマンドの サポートと― 即時設定で 再生を開始することの2つです iOSではnon-mixableカテゴリで オーディオセッションを アクティブにします ビデオアプリケーションで 再生カテゴリになります
macOSとmacOSを実行する iOSコードでは別の方法です MPNowPlayingInfoCenterを取得し ビデオエクスペリエンスを 開始または終了するたびに― 再生状態を変更します
リモートコントロールについては AVKitのAVPlayerView Controllerでビデオを表示する場合 設定は完了しています
AVFoundationとカスタムUIで ビデオを表示する場合 MPRemoteCommandCenterと MPNowPlayingInfoCenterを使えば 同等の機能を得られます ではこのMedia Player APIで どう機能性を構築するか 段階的に説明したいと思います
さて ロック画面に戻りました playコマンドをサポートし 基本的なサポートを追加します
リモートコントロールをサポートする setupメソッドを作ることで可能です サポートの構築中に 何度もこのメソッドに戻ります
まずリモートコマンドセンターの sharedinstanceを取得
いろんなタイプのメディアコマンドを サポートしていますが ここではplayコマンドを サポートします コマンドを受け取る ターゲットハンドラを追加します では再生を始めましょう 終了したら コマンドが成功か失敗かの ステータスを返します これがリモートコマンドに使う 基本構造です
そのため再生コマンドの処理に ハンドラを追加することで togglePlayPauseCommandと 一時停止コマンドをサポートします
これで再生と一時停止ボタンのある プラッタができ どのアプリケーションか分かります しかし どのビデオかも 知りたいですね
nowPlayingInfoの提供で 可能になります nowPlayingInfoは 2つの部分に分かれ 1つ目はアートワークや タイトルなどのアイテムメタデータで 2つ目は再生時間や 経過時間などの再生状態です コード内で情報を更新する 2つの主要なイベントがあります 1つはアイテム変更時で エピソード1から2に進みます
もう1つは 再生状態が変化した時です レートが変化したり ビデオ内で新しい位置を探す場合です
ですからアイテムの変更時は アプリケーションを介し データを渡す構造のアプリケーションに パッケージ化している メタデータを使用します そしてタイトルやアートワークなどの nowPlayingInfoを更新します メタデータがあれば
この時点で 再生情報を更新するでしょう
再生状態の変化時にやるのは―
再生情報の更新だけです アートワークの更新に 時間を使わずに済みます
では 情報の更新方法です
まずshared info centerから nowPlayingInfo dictionaryを入手
そして このdictionaryに 私のメタデータを更新します さまざまな種類のメタデータがあり アプリケーション内でサポートします サポートの種類に関わらず 特定のアイテムに そのタイプのプロパティがなければ メタデータを更新するか クリアにするかゼロにします dictionaryでは 新旧のメタデータを混在させないように
更新後はinfo centerに渡します
nowPlayingInfoの更新は 本当に簡単です では再生情報の更新方法です よく似た方法で nowPlayingInfo dictionaryを入手し それに合わせ再生時間 経過時間 速度を更新します 貴重な変更イベント時に これを更新するだけです 1秒おきに更新し 状況を確認しなくて済みます レートの変更や大幅に飛ばした時 3項目を更新する限り システムが ビデオの再生部分を推測し リモートUIを更新できます
再更新すると info centerに送り表示させます
再生中のビデオの情報が分かりますし ビデオのナビゲートもできます スクラブ再生での検索や 早送りや巻き戻しの サポートを追加することができます では その方法です リモートコントロールコマンドの 設定に戻り 早送りを操作するサポートを追加します 追加の設定をサポートする操作で ここでは優先スキップの間隔を 15秒に設定します
コマンドのハンドラを追加します
コマンドイベントの最中に 渡された間隔を用いることに注目です 優先間隔を設定しても 毎回 使用されません Siriに42秒後に進むよう 頼むことができます これこそが受け取るべき値です
サポートを完成するには 巻き戻しのコマンドと 再生位置の変更コマンドを サポートします
アプリケーションやビデオによっては ナビゲーションを一時的に無効にし 無効にするコマンドで IsEnabledプロパティを設定します ハンドラの削除と追加は不要です
リモートコントロールUIに加わった 今年の新機能の1つは 音声言語と字幕の選択と変更です これらが選べるビデオがあるなら リモートコントロールに このタイプの サポートを加えたいはずです
これによってユーザは― 好きな方法で簡単に ビデオが見られます 音声言語と字幕を表示する 言語オプションのリストを提供すれば このサポートを追加できます 今 何が選択されているかも 識別可能です オプションの変更をリモートUIで 行いたいですよね
では説明しましょう
マッピングを作成し 言語グループを AVAssetからロードします そして 選択を表す media playerオブジェクトに それらを変換しマッピングを作ります 便利な関数が使えます マッピングはアプリケーション内で 維持するため 言語オプションを受け取ったら AVFoundationオブジェクトに変換し AVPlayer項目に設定します
マッピングがあれば情報を更新できます ここでは再生情報のため Updateメソッドで すでに再生時間と 経過時間を加えました それにオプショングループと 現在の選択リストを
追加します
次は選択の変更が必要になります
リモートコントロールの setupメソッドや enableLanguageOptionCommandへの サポートを追加します ハンドラは 今の再生アイテムを取得します
そしてマッピングで 言語オプションを得たら それをAVFoundation オブジェクトに変換します
そしてAVPlayerのアイテム オプションの選択や groupメソッドを使い― 現在のアイテム上で 新しいオプションを選択します そしてnowPlayingInfoと 他の内部状態を更新します
未選択の オプショングループがあります 例えば字幕を非表示にすることですが disableLanguageOption Commandで実現できます enableコマンドとdisableコマンド 両方のサポートが必要です ハンドラは似ており 現在のアイテムを取得し マッピングでグループを探します 今度はグループで空の選択が 可能なことを確認し実行します
もし そうでなければ nilを送るとグループの すべての選択を解除されます
これでリモートコントロールの フルセットが完成です 追加や削除の時期は? 通常 再生するコンテンツがある時で それはユーザがアプリケーションで ビデオを選んだ時です
何もなければ解除されるので ユーザはビデオを終了します さらにnowPlayingInfo dictionaryを 消去し― データが残ってないか確認します
先ほど話したように 周りのデバイスもコントロールするので 作成したtvOS Appがあれば Apple TVでコンテンツを再生し iPhoneのコントロールセンターの プルダウンメニューで Apple TVをターゲットにしてください 望みどおりにビデオ情報を確認でき コントロールできます Siriでのコントロールも同様です
ご紹介した例はすべて このセッションに関連する サンプルプロジェクトです ぜひチェックしてください
これで高画質のコンテンツを テレビで再生しコントロールできます テレビと同時に携帯やiPadを 別で使えるのは うれしいですね マルチタスクエクスペリエンスを サポートする優れた部分は マルチタスクの実行中 ビデオを再生させ続けること そして すでに テレビでビデオを再生していて そのアプリケーションで UIをナビゲートしている時に 誤って中断させないことです
ですから携帯でビデオを見ている時 アプリケーションは確認できるよう フォアグラウンドにします
AirPlay中もメールや SNSのチェックなど iPhoneを自由に使えるのです
バックグラウンドメディアの 非サポートのアプリケーションだと
アプリケーションの終了時に ビデオが停止します だから再生続行が大事なのです
そこでアプリのInfo.plistで Audio Background Modeを サポートします
AVAudioSessionを バックグラウンド再生用に設定しますが 大抵 再生カテゴリを使用します これでバックグラウンドでの再生を含め メディアに適した動作が アプリケーションに提供されます
再生カテゴリのデバイスは 他のメディアを中断するので アプリケーションのプライマリコンテンツで 再生を押して開始した時のみ オーディオセッションを アクティブにするようにします
一度 設定すると その状態を維持できます
ビデオを一時停止しても オーディオセッションは無効にしません
メディアの中断は 常に起こり得るため AVAudioSessionでの通知が 重要です 中断が始まると UIと内部状態を更新します それが終了したら 通知のペイロードと shouldResumeキーを確認し 値を重んじます trueが返された時のみ 自動でビデオを再開します
テレビでビデオを再生している時は アプリケーションをテスト起動し UIでナビゲートして AirPlayに予期せぬことが 起きていないか ビデオエクスペリエンスへの障害が ないか確認します 起こり得る事例を調べてみましょう
まず AirPlayできない ビデオがあります ローンチしたアプリケーションに ビデオアセットで作った アニメーションが使用された場合 現在のエクスペリエンスを 妨げられたくありません コンテンツを促進する ビデオアセットがある時も同様です ビデオが妨げにならず デバイス上で ローカルにとどまらないよう allowsExternalPlaybackを falseに設定します
ユーザが操作した時のみ ビデオをAirPlayで再生させます
起動したり フォアグラウンドになったからといって プライマリコンテンツを 自動再生してはダメです
再生はユーザが管理すべきだからです これが重要な理由について 例を挙げます
iPhoneで音楽を聴いているとします オンデマンドをサポートする ビデオAppがフォアグラウンドになると ライブ配信番組を自動再生するとします
音楽を聴きながら アプリケーションを立ち上げると 音楽が停止し コントロール不能になります
ライブ視聴以外の目的で 立ち上げたかもしれません
現在のエクスペリメントが 確実に中断されずに アプリケーションを 立ち上げるのが希望です
今年の大切な新機能の1つを紹介します
長編ビデオアプリケーションなら iOSはビデオ開始時 自動的に 再生するテレビを提案できます そしてビデオが自動で テレビ再生されることを システムが通知してきます 通知か ステータスバーのアイコンをタップで 提案どおりに変更が可能です
コンテンツを自動再生する アプリケーションがある場合は 通知を表示して操作する前に ビデオがテレビで 再生されるかもしれません この動作で再生を要求すると ユーザがいつでもどこでも ビデオを再生できるようになり メディアの使い勝手がよくなります そこで長編ビデオアプリケーションと AirPlay Suggestionsとの 統合について マーティー・パイが説明いたします (拍手)
ジョナサン どうも 皆さん マーティー・パイです AppleのAVKitエンジニアです 本日はiOS 13に組み込んだ 高度なルーティング機能と 長編ビデオアプリケーションでの 利用方法を説明します まず長編ビデオアプリケーションが 何かをお話しし 長編ビデオアプリケーションに組み込んだ 特定のルーティング動作を説明します 最後は これらの機能を コードに組み込む方法です
さて 長編ビデオアプリケーションとは? 名前のとおり 長編ビデオコンテンツを 主に再生するアプリケーションです コンテンツは例えば映画や 娯楽番組や スポーツ番組のようなものです 再生されるのがSNSのコンテンツや 短いニュースクリップなら 長編ビデオとは言えません
アプリケーションを全体的に評価し どのカテゴリに属するか判断すべきです アプリケーションが 長編ビデオだと判断したら AirPlayの動作は どう変わるのでしょうか? 例で説明します
バナナナメクジのドキュメンタリーを iPhoneから Apple TVにAirPlayしています iOS 13の新機能では 友人がすてきなビデオを送ってきた時 デバイスを使い ローカルで開いて視聴できます 再生中のドキュメンタリーを 止める必要はありません
もう1つの新機能は AirPlay Suggestionsです
コンテンツの再生時に AirPlayのルーティングシステムが 近くのAirPlay対応機器を探し ダイアログ表示で 機器の使用を提案するのです 信頼度が高い場合には 自動的にこの機器へ 転送させる場合もあります
では新機能を 活用する方法を見ましょう 最初にあなたのアプリケーションを 長編ビデオアプリケーションとして 登録します 方法はとてもシンプルです AVInitialRouteSharing Policyキーを Info.plistに追加し 長編ビデオ用に設定します これでシステム上の他の 長編ビデオ同様に動作させられ そして再生オブジェクトの制作 ローンチが実現します
次にAirPlay Suggestionsの活用に 不可欠なのは 再生前にルーティングシステムを 準備することです
どう機能するか概念を説明し コードでの実現方法を掘り下げます
アプリケーションには さまざまなコンテンツを スクロールで閲覧できる ブラウジングUIがあります 再生したいものを選び “play”を押します AirPlayルーティングシステムを 用意すべきなのは 閲覧から再生へ 推移する時なのです ルーティングシステムの用意で 何が起きます? 自動的に手元の機器で 再生するかもしれませんし AirPlay対応機器や デバイスからの接続を介して 外部画面に転送するかもしれません
しかし信頼度次第では 近くのAirPlay機器を介し 再生するのかを ユーザに問う場合もあります その決定に応じて コンテンツの再生場所の情報と共に コントロールが アプリケーションに戻されます
ではコードを見てみましょう
ユーザが“Play”を押すと prepareRouteSelection ForPlaybackを呼び出し completion handlerを 使用します routing systemが自動決定する場合 completion handlerが すぐ呼び出されます しかし近くのAirPlay機器で 再生するかどうか プロンプトが表示される時もあります 手元の機器での再生を決定した場合 ルート選択タイプとして completion handlerが呼び出されます
するとplayback UIを表示できます AVPlayerViewControllerや 自分でカスタムした再生UIです
もしユーザがAirPlayをしようと 場所をリビングにした場合 route selection type externalが 呼び出されます 外部画面を操作する コントローラーを備えた― custom remote playback UIを 表示することもできます 再生をキャンセルした時の対処も 忘れないでください
現在 あらゆる環境下で アプリケーションと AirPlay Suggestionsが どのように動作するかテストするため developer settingsに トグルが内蔵されています ドリルダウンすると 新しい項目の AirPlay Suggestionsがあります 異なる3つのモードから選択できます
デフォルトは 初期設定のシステム挙動です 毎回 システムがユーザに対して コンテンツを指定のデバイスで AirPlayするかを プロンプトするモードにもできます 常に自動的に指定されたデバイスに 転送するという設定も可能です どのデバイスに対して有効かは 転送先のリストから選べます システムのモードを設定したので media servicesのリセットを お忘れなく
AirPlay Suggestionsが あらゆる状況に対応可能か不安なら 心配無用です 最終的に― AirPlayをいつどこで使うかは ユーザ次第です AirPlayするデバイス指定の変更は AVPlayerView Controllerなどを通じ AVRoutePickerViewから行えます
これらの新機能で 好きなデバイスで 楽にコンテンツを楽しめます 動作の統合について デモでご説明しましたが テストAppの サンプルコードもご覧ください 今回 学んだことは? AVRoutePickerViewで AirPlayピッカーを統合する方法 MPRemoteCommandCenterを介し― リモートコントロールコマンドを 処理して登録する方法と system UIに Now Playing informationを 格納する方法を学びました
AirPlayマルチタスクの活用法と 長編ビデオのアプリケーションの 追加方法もです
AirPlay Suggestionsを 活用するため ルーティングシステムの準備も 覚えました
本日はご参加いただき ありがとうございました AirPlayの新機能を お届けするのが楽しみです 引き続き いいカンファレンスを (拍手)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。