Google Cast for Audio デバイスは、音声の再生のみをサポートしています。このガイドでは、音声のみのデバイス向けに Cast アプリを最適化し、メモリ、CPU、ネットワーク帯域幅の使用量を削減する方法について説明します。
Google Cast for Audio をサポートするアプリでは、次の点を考慮する必要があります。
- Google Cast for Audio デバイスでは、動画やグラフィックは表示されません。ただし、多くのオーディオ デバイスには、再生ステータス(再生中または一時停止中)や進行状況などのメタデータを表示するディスプレイが付いています。アプリでは、このような重要なユーザー情報を受信側にのみ表示することはできません。重要な情報とユーザー インターフェースの大部分は送信側に表示する必要があります。
- ウェブ レシーバー アプリケーションを適切に実行するには、Google Cast for audio デバイスは、グラフィックが表示されなくてもレンダリングする必要があります。デバイスがハードウェア アクセラレーションによるグラフィック オペレーションをサポートしていない可能性があるため、レシーバ アプリケーションでは、色のグラデーション、回転、アルファ ブレンド、進行状況バーなどの大きなオブジェクトの再描画など、グラフィック負荷の高いオペレーションは 1 秒間に 1 回以上使用しないでください。
- Google Cast for Audio デバイスは、デジタル著作権管理(DRM)で保護されたコンテンツに対してのみ Widevine をサポートしています。
- ほとんどの Google Cast for audio デバイスでは、Chromecast デバイスの場合のようにテレビに入力される音源の音量だけでなく、デバイス(スピーカーなど)の音量全体を送信元アプリが制御します。
- 送信元デバイス(スマートフォンなど)で再生を操作するだけでなく、デバイス独自のコントローラ(リモコン、デバイス上のボタン、外部リモコン アプリなど)で再生を操作できるようにアプリで指定しなければならない場合があります。
- Google Cast for audio デバイスは、デバイスの UI に応じて、小さな LCD 画面、HDMI 出力(サウンドバーやオーディオ / ビデオ レシーバー用)、外部リモコン アプリケーションでコンテンツ メタデータの表示をサポートしている場合があります。
開発
Google Cast for audio をサポートする Cast アプリを開発する最初のステップは、オーディオ / 動画用の Cast アプリを開発し、Chromecast で動作することを確認することです。このドキュメントでは、このようなアプリを開発してテストしていることを前提としています。
アプリは、音声と動画の両方をサポートするデバイスと、音声のみをサポートするデバイスの両方をサポートしている場合があります。どちらにキャストするかを把握し、特定のシナリオで最適なユーザー エクスペリエンスを実現するための対策を講じる必要があります。
たとえば、動画と音声の両方を扱うアプリ(ローカル ファイルや NAS ファイルの再生アプリなど)は、音声ファイルの再生をサポートするために音声専用デバイスへのキャストを有効にする必要がありますが、ユーザーが音声専用デバイスに動画ファイルを送信できるようにしてはなりません。アプリは、後述の送信者のデバイス機能 API を使用して、デバイスに適したコンテンツを判断できます。
Google Cast for Audio をサポートするには、アプリで次の処理を行う必要があります。
音声のみをサポート: 音楽や音声ファイル、ラジオのストリーミングなど。ウェブ レシーバー アプリにストリーミングされるメディアは動画ストリーミングであってはなりません。また、グラフィックスや画像のストリーミングを避け、アプリケーションの起動時間とメモリ使用量を改善します。下記のメモリ使用量に関するガイドラインをご覧ください。
Cast for audio デバイスと通常の Chromecast で想定どおりに動作します。
デバイスの機能
アプリは、デバイス自体から、または送信側または受信側の API を介して利用できるデバイス機能 API を使用して、音声のみのデバイスで実行されているかどうかを把握できます。
デバイスの HTTP ヘッダー
アプリの起動時にキャスト デバイスから提供される CAST-DEVICE-CAPABILITIES
HTTP ヘッダーには、デバイスの機能が記述されています。デバイスは、このヘッダーを含むリクエストを、ウェブ レシーバー アプリをホストするサーバーに送信します。オーディオ専用デバイスのヘッダーは、CAST-DEVICE-CAPABILITIES: {"display_supported":false}
でデバイスの機能を記述します。
サーバーがデバイスからリクエストを受信すると、このヘッダーの情報を使用して、音声デバイス用に最適化されたウェブ レシーバー アプリにリクエストをリダイレクトできます。
Web Receiver API
ウェブ レシーバー アプリが読み込まれたときに CastReceiverManager.getDeviceCapabilities()
を呼び出すと、同じデバイス機能オブジェクトを取得できます。
詳しくは、デバイスの機能をご覧ください。
Sender API
各 Cast Sender API には、デバイスの機能情報も含まれています。これにより、送信側のアプリは、レシーバーに送信するメディアの種類を決定できます。アプリが音声と動画の両方をサポートしている場合は、音声のみのデバイスに動画コンテンツを送信しないようにできます。また、設計チェックリストで説明されているように、アプリはデバイスに最も適した方法で音量を制御できます。送信者向けの次のデバイス機能 API をご覧ください。
- Android: CastDevice.hasCapabilities
- iOS: deviceCapabilities
- Chrome: chrome.cast.Capability
メモリ使用量のガイドライン
オーディオ デバイスで実行されるウェブ レシーバー アプリは、次のようにメモリ使用量を管理する必要があります。
- 画像やグラフィック アセットのダウンロードや使用を避け、メモリ使用量を減らし、再生開始までの時間を短縮します。
- Media Source Extensions(MSE)を使用する場合、アプリケーションはストリーム バッファを 2 MB に制限する必要があります。Media Player Library(MPL)を使用している場合、アプリケーションのストリーミング バッファサイズはすでに MPL によって定義されています。
- HTMLMediaElement を使用する場合、アプリケーションのストリーミング バッファサイズは、ストリーミング レートに基づいて Chrome によって定義されます。音声ビットレートを 2 Mbps に制限します。これにより、サポートされているメディアで説明されているすべてのコーデック(最大 48 kHz/16 ビット)がサポートされます。
音量の調整
ほとんどの Google Cast for audio デバイスでは、Chromecast デバイスの場合と同様に、送信側のアプリが音源の入力音量だけでなく、デバイスの音量全体を制御します。つまり、音声のみのアプリでは、音量の変更ステップを小さくする必要があります。アプリで音量調節を提供する際のガイドラインについては、次のドキュメントをご覧ください。
デバイス コントロール
Google Cast for Audio デバイスには、独自の再生コントロール(ボタン、リモコンなど)が付いている場合があります。これらは、メディア再生メッセージで説明されているように、urn:x-cast:com.google.cast.media
名前空間に定義されたメディア再生メッセージを使用して、レシーバ アプリケーションで再生を制御します。デバイスの再生コントロールをサポートするには、レシーバー アプリケーションでこれらのメディア再生メッセージをサポートする必要があります。
また、送信側のアプリは受信側から送信側へのメッセージをサポートする必要があります。これにより、ユーザーがデバイスのコントロールでメディアの状態を変更した場合、送信側のアプリは受信側からステータス メッセージを受信し、それに応じて UI を更新できます。
デバイスの画面
Google Cast for audio デバイスには、デバイスに LCD 画面が付いている場合や、メディアのメタデータを表示するデバイス固有のコントロール アプリが付いている場合があります。レシーバー アプリは、すべての音声トラックに対してこのメタデータを提供する必要があります。また、メタデータがディスプレイに適切に表示されるように、現在再生中のコンテンツと同期されていることを確認する必要があります。アプリがカスタム メタデータを使用している場合は、以下の各プラットフォームで説明されているように、標準の音声メタデータ(トラック名、アーティスト名、アルバムのタイトルなど)も指定する必要があります。
レシーバは、メディアを読み込むときに送信者からメタデータを取得します。送信側のアプリで、受信側にメディアを読み込むコマンドを使用して、Google Cast for audio デバイスにメタデータを表示するように、以下のフィールドを指定する必要があります。次の API を使用します。
Android
MediaMetadata
をMEDIA_TYPE_MUSIC_TRACK
に置き換え、次のようにします。iOS
GCKMediaMetadata
をGCKMediaMetadataType
に置き換え、GCKMediaMetadataTypeMusicTrack
と次のようにします。Chrome
MediaInfo
をMusicTrackMediaMetadata
に置き換え、次のようにします。
Cast アプリがレシーバーまたはクラウドでメディアキューを管理している場合、すべての送信者が同期されるように、Web レシーバーは urn:x-cast:com.google.cast.media
名前空間を使用してメディア ステータスの更新をブロードキャストする必要があります。
登録
テスト用に Google Cast for audio デバイスを登録し、Google Cast SDK Developer Console を使用して、Google Cast for audio デバイスをサポートするようにアプリを登録する必要があります。
- デバイスの登録について詳しくは、デバイスをご覧ください。
- アプリが音声デバイス用の Google Cast を検出できるようにするには、アプリを登録するときに [音声のみのデバイスへのキャストをサポートする] チェックボックスをオンにする必要があります。アプリケーションを登録するをご覧ください。
テスト用に使用される未公開アプリの場合、アプリが音声のみのデバイスを検出できるように、音声のみのデバイスをサポートするオプションも選択する必要があります。
Google Cast for Audio 2.0
Google Cast for Audio(GC4A)2.0 は、メモリ容量の少ないデバイスをターゲットとして設計された次世代の Cast オーディオ プラットフォームです。コンテンツをストリーミングできるデバイスのエコシステムを拡大します。GC4A 2.0 はオーディオ プラットフォームを対象としているため、ディスプレイのないデバイスに合わせてウェブ API セットが削減されています。GC4A 2.0 は、キャストをサポートする新旧のスピーカーにリリースされます。
テストとデバッグ
サポートされているすべてのスピーカーが GC4A 2.0 に移行するため、オーディオ アプリのデベロッパーは GC4A 2.0 でアプリをテストすることが重要です。GC4A 2.0 向けの Cast アプリは、ここに記載されている GC4A 2.0 デバイスでテストできます。
GC4A 2.0 は Chrome リモート デバッガをサポートしていません。アプリをデバッグする場合は、Cast Debug Logger を使用することをおすすめします。
利用可能な GC4A 2.0 デバイス
GC4A 2.0 デバイスの一覧は次のとおりです(ただし、すべてを網羅したものではありません)。
- Bose: Wi-Fi スピーカーとスマート サウンドバー
- JBL: Charge 5 Wi-Fi / Boombox 3 Wi-Fi / Authentics 200、300、500
- Samsung: Music Frame / サウンドバー
- LG: サウンドバー S90TY/SG10TY/SE70Q/S80Q/S90Q
- Bang & Olufsen Beosound 2 / Beocore Connect
- Sonoro Maestro 2 / Meisterstruck 2
- Cambridge Audio MXN10
- KEF LS60 / LSX II
- Teufel Motiv Home
- Nordic Argon Audio
- WiiM CI MOD S / Ultra
推奨される基本的なテストケース
GC4A 2.0 でアプリのすべての機能をテストすることをおすすめします。すべてのメディアタイプ(ポッドキャスト、ストリーミングなど)の再生、一時停止、早送り、スキップ、再生リストの変更、停止、キャストの再接続のテストを含めてください。
サポートされている API
GC4A 2.0 は、次の API をサポートしています。
- HTML
- JavaScript ECMA 6
- DOMParser
- XMLSerializer
- ドキュメントとサブクラス
- DocumentFragment
- HTMLMediaElement と HTMLAudioElement
- HTMLVideoElement(再生できるのは音声コンテンツのみ)
- HTMLScriptElement
- HTMLBaseElement
- HTMLTemplateElement
- カスタム要素
- Shadow DOM
- スクリプト モジュール / 非同期 / 遅延
- フェッチ / XHR
- WebSocket
- MessagePort
- クッキー
- MSE(Media Source Extensions)
- EME(Encrypted Media Extensions)
- ローカル / セッション ストレージ
GC4A 2.0 は、以下をサポートしていません。
- 動的モジュールのインポート(2024 年に追加予定)
- CSS
- IFrame
- TextTracks
連絡先
テストのセットアップに関するサポートが必要な場合や、Bose のスピーカーを使用できない場合は、gc4a-support-external@google.com までお問い合わせください。