ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
tvOSにおける優れた再生体験の提供
デザインが一新されたApple TVの再生インターフェイスを使用して、Appで優れたメディア体験を提供する方法を紹介します。最新のインターフェイスによって、ユーザがコンテンツに集中しながら関連するコントロールや情報にアクセスできるようにする方法について確認します。AVPlayerViewControllerやその他のAPIをtvOS Appに採用することで、コンテンツを見つけ、再生し、楽しむことができる方法を紹介します。 このセッションを最大限に活かしていただくために、AVKitについて基本的な理解を得ておくことをお勧めします。
リソース
関連ビデオ
WWDC21
WWDC20
WWDC19
-
ダウンロード
♪ (tvOSにおける優れた 再生体験の提供) こんにちは!tvOSチームの ソフトウェアエンジニアの Maxと申します 本日は Apple TVのメディア 再生UIのまったく新しい 素晴らしい外観を ご紹介します 開発者が この新機能を最大限に 活用するために できることを説明します このセッションでは tvOS 15の標準再生UIの 拡張機能の概要を説明します 新しいAPIについて紹介し 最後に アプリケーションでの優れた 再生エクスペリエンスの 構築に役立つ ベストプラクティスについて 説明します 始めましょう AVPlayerViewControllerは Apple TVのユーザーに 標準のメディア再生機能を提供します 新しいクリックホイール リモコンをはじめ スキップ スキャン スクラブ機能 Siriコマンド インタースティシャルのサポート等 様々なリモートコントロールに 対応しています アプリケーションで AVPlayerViewController を使用して ユーザーがApple TVの ファーストパーティ アプリケーションと 同様の操作を行えるようにする事を お勧めします AVPlayerViewController をまだ使用していない場合 または再確認することで メリットが得られる場合は WWDC 2019の 「AVKitで直感的なメディア再生機能を 提供する」を をご覧になることをお勧めします このセッションでは AVPlayerViewController をアプリケーションに組み込む方法 について詳しく説明しています では 今年導入する機能強化の 概要を説明します tvOS 15では 標準的な再生UIを全面的に 再設計し より一貫性のあるインタラクティブ な体験を通して 視聴者がその場にとどまることが できるようにしました トランスポートバーに関連する コントロールとオプションを 追加することで字幕をオン にしたりオーディオ言語を 変更したりするなど一般的な再生 タスクの発見性が向上しました トランスポートバーコントロールは 一般的なものであると同時に アプリケーション 固有のものでもあります また 新しいコンテンツタブにより サポート情報に容易に アクセスできるようになりました 情報やチャプタなど インラインナビゲーションによる アクセスと発見を可能にします コンテンツタブを使用して関連する コンテンツを表示できます この例では 昨年のWWDCの セッションを見ていますが プレイヤーを離れることなく セッションのおすすめ コンテンツを閲覧できます 最後に 再生中にユーザーが 使用できるコンテキストアクション を追加しました これらのアクションは イントロのスキップや リキャップのような 完璧な機能を持っています Apple TVで 新しい再生UIを利用するには アプリケーションを tvOS 15 SDKに リンクする必要があります このアプローチは App Storeのユーザーが 利用できる既存のAppとの 互換性を維持するために 採用されました これらのアプリケーションは デフォルトのtvOS 14の 再生UIと機能も利用できます ここまでで メディアAppに この新しい機能を導入する方法を 学ぶことに興奮している かもしれません tvOS 15の新しい APIを見てみましょう タイトルビューから開始します トランスポートバーのすぐ上に 表示される新しいタイトルビューは ユーザーが見ているものを即座に 知るのに役立ちます タイトルビューを表示するには 現在のAVPlayerItem のメタデータから commonIdentifierTitle と iTunesMetadataTrackSubtitle の値を使用します メディアアセットに埋め込み メタデータが含まれていない場合 またはメディアアセットを拡張する 必要がある場合はAVPlayerItemの externalMetadata プロパティを使用します ライブストリーミングコンテンツ を再生すると タイトルビューにコンテンツの 状態を示すバッジが表示されます 最後に タイトルビューを表示しない場合は 新しいプロパティ transportBarIncludesTitleView の値をfalseに設定して タイトルビューを非表示にします 次に トランスポートバーの コントロールを見てみましょう トランスポートバーコントロールは トランスポートバーのスクラバの すぐ上にあるUI要素の集まりです これらのコントロールは メディアアプリケーションが 提供するすべての再生オプションを ユーザがすばやく直感的に 見つけるのに役立ちます 字幕 音声言語 ピクチャイン ピクチャなどの一部の 標準コントロールは システムによって提供されます 開発者は AVPlayerViewControllerの 新しいプロパティ transportBarCustomMenuItems を使用してトランスポートバー コントロールのリストを拡張できます これがUIAction及びUIMenu クラスのインスタンスをサポートします トランスポートバーコントロールの 使用例を見てみましょう ここでは UIActionを使用して ユーザーが現在のメディア項目を お気に入りに追加できるようにする UIMenuクラスを使用して 高度なアクションの配置を作成し それらをメニューに 表示することもできます AVPlayerViewController によって提供されるUIMenusでは 1レベルまでのネストを サポートします UIMenuクラスと UIActionクラスの使い方の 詳細については WWDC 2019の 「iOS 13向けにUIをモダナイズする」 をご覧になることをお勧めします では コンテンツタブについて 説明します コンテンツタブを使用すると アプリケーションで補足情報や より多くのコンテンツの おすすめを表示できます AVPlayerViewControllerは メディアアセットに埋め込み メタデータが含まれている場合又は AVPlayerItemで外部メタデータを 補完する場合にInfoタブを表示します またnavigationMarkerGroupsに AVPlayerItemを指定すると AVPlayerViewController はChapters タブを表示します アプリケーションは 新しいプロパティを使用して追加の コンテンツタブを表示できます AVPlayerViewControllerの customInfoViewControllersです tvOS 15では customInfoViewController プロパティは非推奨となり 複数のビューコントローラを 使用できる 新しいプロパティになりました コンテンツタブのサイズを 適切に設定するには preferredContentSize プロパティを使用して 高さを指定するか 適切なオートレイアウト制約を 定義してください コンテンツタブを 表示するために必要な 高さを計算すると すべての ビューコントローラのサイズが 最も高いコンテンツタブの高さに設定されます 複数のコンテンツタブを 使用する場合は カスタムビューコントローラの サイズを一貫して設定するか 実行時にレイアウトが 予期されることを確認します 又カスタムビューコントローラで タイトルプロパティを 設定することも忘れないでください コンテンツタブのタイトルに 使用します 見栄えのよいコンテンツタブの 作成を支援するために 今年はTVUIKit フレームワークの新しい コンテンツ設定を導入します TVMediaItemContent の設定と TVMonogramContent の設定 これらの構成を コードで使用する例を いくつか見てみましょう たとえば 16:9のアスペクト比でメディア 項目のリストを表示するには、 TVMediaItem ContentConfiguration のワイドセルを使用します イメージ タイトル セカンダリテキスト等の プロパティを設定 バッジと再生の進行状況を 表示するように 設定することもできます 完了したら contentConfigurationを コレクションビューセルに割り当て こんなに簡単なんですね 現在のコンテンツに 関連付けられている 人物または文字を 表示する場合は TVMonogramContentConfiguration を使用します コンテンツ設定の 使用方法の詳細については WWDC 2020の 「モダンなセルの構成」 をご覧になることをお勧めします 最後に コンテキストアクションです コンテキストアクション を使用すると 再生中にアプリケーションに関連 するコントロールを表示できます コンテキストアクション を表示するには AVPlayerViewController の新しい contextualActions プロパティを使用し 1つ又は複数のUIActions を指定します 通常 アプリケーションは コンテンツの関連セクションで コンテキストアクション を提示します これを実現するには 周期的または 境界時間オブザーバを追加して AVPlayerのタイミングを観察します コンテキストアクションを 非表示にするには プロパティを空の配列に リセットします 一部のユーザーは App内のスキップ機能の ソリューションをすでに 実装している場合があります この新しいAPIを使用すると コンテキストコントロールでの ユーザーの操作とフォーカスの 動作が一致し使用時に アプリケーションの 再生中ステートも 維持されます では tvOS上の AVPlayerViewControllerの ベストプラクティスについて 説明しましょう まず そして最も重要なことだが プレーヤーに余分なジェスチャーを 加えないことです これは標準の再生UIに干渉し 将来は動作しなくなる 可能性があります 次に 不足しているメタデータ を補完します 一部のメディアでは アセットにすべてのメタデータが 組み込まれていない場合があります そのような場合は 全ての必須メタデータを提供します タイトルやアートワーク説明など AVPlayerItemのexternalMetadata プロパティを使用します そうすることで 残りの操作をシステムが行い Title Viewーと Infoタブにすべての 関連情報を表示します 最後にtvOSアプリケーションで ピクチャインピクチャ を有効にすることを 検討してください ユーザーにマルチタスクの 柔軟性を提供し 同時にビデオの再生 全画面コンテンツと ピクチャインピクチャ の切り替え機能 ピクチャインピクチャ を始めるには WWDC 2020の 「tvOSにおけるピクチャインピクチャ をマスターする」を見ることを お勧めします tvOS 15では 標準の再生UIを使用して 優れたメディア体験をこれまで以上 に簡単に構築できます 強力な新しいAPIにより AVPlayerViewController の設定とカスタマイズがこれまで 以上に容易になりました アプリケーションに採用するには 今が最高のタイミングです そして 始めるのは簡単です 詳細については Developer Appの このセッションに関するその 他のリソースを参照してください カンファレンスを ご覧い頂きありがとうございます ♪
-
-
4:42 - Transport Bar Controls Example
let favoriteAction = UIAction(title: "Favorites", image: UIImage(systemName: "heart")) { // Add to favorites } let submenu = UIMenu(title: "Speed", options: [.displayInline, .singleSelection], children: [ UIAction(…) ]) let menu = UIMenu(image: UIImage(systemName: "gearshape"), children: [submenu, UIAction(…)]) playerViewController.transportBarCustomMenuItems = [favoriteAction, menu]
-
6:11 - Content Tabs Example
// Initialize content tab view controller customViewController.preferredContentSize = CGSize(width: 0, height: 140) customViewController.title = "Recommended"
-
7:08 - TVMediaItemContentConfiguration Example
// Configure 16:9 UICollectionView cell import TVUIKit var contentConfiguration = TVMediaItemContentConfiguration.wideCell() contentConfiguration.image = UIImage(imageLiteralResourceName: "tanu") contentConfiguration.text = "Title" contentConfiguration.secondaryText = "Secondary text" contentConfiguration.badgeText = "NEW" contentConfiguration.badgeProperties.backgroundColor = .systemRed contentConfiguration.playbackProgress = 0.75 cell.contentConfiguration = contentConfiguration
-
7:36 - TVMonogramContentConfiguration Example
// Configure monogram UICollectionView cell import TVUIKit var contentConfiguration = TVMonogramContentConfiguration.cell() contentConfiguration.image = UIImage(imageLiteralResourceName: "jad") contentConfiguration.text = "Jad" cell.contentConfiguration = contentConfiguration
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。