ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
メディアアプリとHomePodの統合
HomePodでメディアアプリと直接インタクションする方法を確認しましょう。iPhoneやiPadアプリにメディアインテントを加え、声を使うだけでAirPlayを使用してHomePodスピーカーにコンテンツをストリームする方法を紹介します。実行に際する詳細や音楽やオーディオブック、ポッドキャストや瞑想などのメディアで素晴らしい体験を創造するベストプラクティスやヒントについて掘り下げます。AirPlayでの素晴らしい体験の創造に関しては、WWDC23の「AirPlayオーディオ体験の改善」をご確認ください。
リソース
関連ビデオ
WWDC23
-
ダウンロード
♪ ♪
こんにちは Alex Abrametsです 「メディアアプリとHomePodの統合」へ ようこそ ホームでの素晴らしい Siriの能力についてお話しします iOS 17からHomePodのオーナーは iPhoneやiPadのアプリから Siriを通してメディアを 再生することができます この新しいSiriの能力により Siri Media Intentをサポートするアプリは コンテンツをHomePodで シームレスに再生できます まずHomePodで再生するための メディアアプリのサポート拡大について 次にユースケースと体験をカバーし 最善の実行方法についてお話しします 最後にこの機能が どうホームと統合するかについてです まずはメディアアプリの HomePodサポート改善についてです いざHomePodがリクエストを処理すると SiriKitのIntentがiPhoneに送られ Siriがアプリを起動しAirPlayで コンテンツをスピーカーに流します AirPlayサポートについては 後程お話しします リクエストを満たすため HomePodはiPhoneと Wi-Fi経由で通信します つまりリクエスト時に デバイスが同じネットワーク上に なければなりません デバイスが近くにある必要はありません もし私がリビングでスピーカーに話し iPhoneが寝室で充電中でも HomePodで問題なく再生できます メディア再生のSiriリクエストは AirPlayをサポートする ほとんどのスピーカーで 幾つも同時に実行できます SiriKit Media Intentを サポートするアプリは 何の変更なくこの機能を利用できます 後程ユーザー体験と 性能の向上についてお話しします HomePodでネイティブに サポートされていないアプリへの 再生や追加などのリクエストは 元来のiPhoneに送られます HomdePodでは メディアの検索リクエストの結果 最終的に再生されることにご注意ください Siriは音声認識で 認識したホームユーザーのデバイスに リクエストを送ります 更に曲をlikeやaddするリクエストは Siriを使わずAirPlayした コンテンツでも可能です 多くの既存メディアアプリが HomePodで利用できます 音楽だけでなく 多くのメディアをサポートします 音楽・オーディオブック・ポッドキャスト ラジオ・瞑想など様々です SiriKit Media Intentを サポートするアプリは 自動的にHomePodでサポートされます 今日アプリがiOSでできることは HomePodでも可能です 例えばアプリユーザーはアーティストや アルバム・曲・ジャンルやヒットを リクエストできます リクエストでアプリ名を使うと Siriはアプリが iPhoneにあるかチェックします インストールされていれば AirPlay接続を確立し Siriがアプリに再生を要求します ポッドキャストやオーディオブックの アプリの場合 最新ニュースを聞いたり オーディオブックの続きを HomePodで聴くことができます Siriはスピード変更や先送りなどの リクエストを理解できます Media Intentにない アプリ特定のリクエストは App Intentを使用し実行されます 詳細は「App Intentにおける機能強化の詳細」や 関連するセッションをご確認ください どうやってSiriをアプリに 加えられるのでしょうか? SiriKit Media Intentの サポートに必要なものと 問題なく作動させることと 素晴らしい体験の提供についてお話しします 既にMedia Intentをサポートしていれば そのままで問題ありません 例えばiPhoneにSoundCloudが インストールされていて HomePodにSoundCloudの 何かの再生を依頼すると スピーカーから再生されます Siriによる再生サポートには 幾つかの簡単なステップがあります Intent Extensionを加え 幾つかメソッドを実装し 検索と再生のSiriコールバックを 繋げる必要があります これらの詳細は WWDC19の 「SiriKit Media Intentの紹介」と WWDC20の「SiriKit Media Intentsをより 多くのプラットフォームに拡大する」にあります では曲を再生できるサンプルアプリの コードを検証してみます ここに「Push It」という エンティティのリクエストがあり そのメディアアイテムが返されます 試してみましょう Hey Siri Control Audioで Dukesの「Push It」を再生 Siri:iPhoneから「Push It」を再生します (Dukesの「Push It」をiPhoneから再生)
期待通り再生されました ほかにリクエストします Hey Siri Control Audioでジャズを再生 Siri:Control Audioライブラリには 見つかりませんでした Siriは見つからないと答えました これは私のアプリで ジャンルをサポートしていないため unsupportedというレスポンスが 返ったからです でもSiriのレスポンスを向上できます 再生できない特定の理由を提供できます 「サポートしないメディアタイプ」や アプリのログインが必要などです そのような場合 Siriは問題を解決する解答をします ではコードを変えてguardステートメントで ジャンルをリクエストした場合 特定のエラーコードを返すようにします Hey Siri Control Audioでジャズを再生 Siri:Control Audioでは サポートされていません Siriが再生をサポートしないとレスポンスし わかりやすくなりました Siriリクエストでアプリは何を 受け取るのでしょう? 先程の例では mediaNameとmediaTypeについて お話ししました ではアプリがよく受け取る Intentを見てみましょう 「再生」とアプリの名前だけの場合 検索基準なしで Intentが送られます 音楽アプリはパーソナルミックスか ステーションを再生します ポッドキャストとオーディオブックアプリは 以前の再生を続行します 「アプリで音楽を再生」の場合 音楽はmediaTypeを示します 「再生」とエンティティ名の場合 mediaNameだけを供給します エンティティのタイプはアプリ次第で 曲やアーティストや ポッドキャストなどがあります 「曲」とその曲名を言えば mediaTypeはsongで mediaNameと共に供給されます 「ヒット曲」をリクエストした場合 mediaTypeはmusic sortOrderはpopularとして供給されます 何かを次に再生するようリクエストすると キューに追加されます playbackQueueLocationが nextになっています ニュースやポッドキャストなどを サポートするなら 「オーディオブックを再生」や 「最新ニュースを再生」などの リクエストを受けます 予想されるリクエストに対し Siriが生成するIntentを 調査しテストすべきです 結果を解決したあと SiriはIntent Extension内で handleを実行します handleInAppかcontinueInAppで レスポンスを返します HandleInAppはバックグラウンドでアプリを 起動し再生するようシステムが指示します ContinueInAppはアプリを フォアグラウンドで起動するよう指示します オーディオ再生の場合 バックグラウンド再生は iPhoneをアンロックする必要がなく より良い体験になります HomePodにリクエストされると iPhoneが側にないかもしれないため リクエストはより明白になります アプリのSiriコールバックへのレスポンスは 適度に速くなければなりません 遅いレスポンスは断念されるか タイムアウトになります 最大でも10秒以内に レスポンスするようにしてください できるだけ速い方が無難ですが 10秒以降になると Siriのレスポンスは一般的なものになり 役に立ちません Siriに曲が好きだとか プレイリストに足したいと 伝える場合はどうでしょう? INAddMediaIntentと INUpdateMediaAffinityIntentで それらのリクエストに対応できます 実行はINPlayMediaIntentに似ています AirPlayコンテンツの場合 Siriは話した人物の iPhoneにリクエストを送ります ではアプリとSiriの統合を 更に強固にできる方法を見てみましょう まずはpersonal app vocabularyです Personal app vocabularyで アプリはシステムに ユーザーの特定のエンティティに関して 知らせることができます これらにはパーソナルプレイリストや 購入したオーディオブック お気に入りアーティストなどが含まれます 通常再生を始められるのは フォアグラウンドのアプリだけですが Siriリクエストの場合 バックグラウンドで再生できます そのためには セッションを作動させる前に Audio Sessionを 正しく設定せねばなりません これがHomePodやiOSにCarPlayなど 全サポートプラットフォームに適応します この例ではsetCategoryを .playbackに設定すると アプリはシステムに オーディオの再生を伝えます Audio categoryやmode Route sharing policyは オーディオ再生と中断を どうシステムが対処するかに影響します modeを.spokenAudioに設定すると 中断された時に音量を一時的に 下げる代わりに再生を停止します これはポッドキャストや オーディオブックのアプリに最適で コンテンツの重要部分を 聞き逃すことはありません それではcategoryを .playbackに設定しないと どうなるか見てみましょう Hey Siri Control Audioで Dukesの「Push It」を再生 Siri:「Push It」をiPhoneから再生 (音楽) アプリがフォアグラウンドだと 再生されますが iPhoneをロックするように バックグラウンドにまわすと 再生が停止します 期待通りの動作ではありません ではAudioSessionを 正しく設定した場合を見てみましょう Hey Siri Control Audioで Dukesの「Push It」を再生 Siri:「Push It」をiPhoneから再生 (iPhoneから「Push It」が再生される) ロックしても再生は続きます ♪ ♪ (音楽が停止) HomePodとiPhoneは いろんなことができるため 着信やナビプロンプト 他のアプリなどによって オーディオ再生が 中断されることがよくあります この中断の対処は重要で 特にiPhoneが側にない人物が HomePodに話している時 アプリが再生を続けられねばなりません 次はAirPlayについてです システムがアプリのコンテンツを AirPlayできるよう 次に従ってください 先程触れたように Audio categoryをmodeに設定し Route sharing policyを正しく設定し MPNowPlayingInfoCenterで 現在再生中のアイテムを システムに伝え MPRemoteCommandCenterで 再生・停止・先送りなど リモートコマンドを受け取るようにします これでアプリのメディアを AirPlayスピーカーで再生できます しかし別のデバイスにデータが送られるため バッファが必要なので スムーズな再生のために 一部データを蓄積します このためメディアを再生や停止する度に 遅れが生じます Buffered playbackのために APIの1つを使えば心配はなくなります 「AirPlayオーディオ体験の改善」で 詳細をご確認ください 次にこの機能で更に 考慮すべき点についてお話しします もしiPhoneやiPadが幾つもあれば Siriはどれを使うかどう判断するのでしょう その答えですがSiriは Apple IDと「探す」設定で 位置の共有の設定に使った メインのiPhoneに SiriKit Mediaリクエストを送ります Siriはほかのデバイスと通信し リクエストを満たすため ユーザーは ホームに登録し「自分の声を識別」を オンにせねばなりません これらの設定はホームアプリにあります パーソナルリクエストは この機能では必要ではありません 「自分の声を識別」がオフの場合や ホームに登録していない場合 本人及び誰のデバイスからも メディアは再生できません アプリを未使用の場合や Siriで再生リクエストを したことがない場合 最初のリクエストはiOSデバイスで Siriのアプリデータへの アクセス承諾が求められます この承諾はアプリから再生する 初めてのSiriリクエストにだけ必要です 最後に覚えておくべきことが幾つかあります SiriKit Media Intentサポートが アプリをHomePodで 作動させるために唯一必要なものです ユーザー体験の向上のため Buffered Playbackを加え 複雑なクエリをサポートし Siriに更なるコンテキストを提供します みなさんのアプリを HomePodで活用してみてください ♪ ♪
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。