連載第1回の「Chromecastで動くHTML5ベースのメディアストリーミングアプリを作るための基礎知識」で述べたように、ChromecastはHDMIやMiracast、AirPlayなどの外部出力と似ていながらも異なる点があります。
本記事の最後として、Senderアプリ開発の観点から、注意すべき違いと対策を述べます。
HDMIなどの外部出力では、出力先の機器と接続するスマートフォンは一台だけです。また、接続が切れると同時に、外部出力先の再生も停止します。
一方、ChromecastはReceiverアプリに対し複数のスマートフォンが接続できます。また、接続が切れたとしてもReceiverアプリは生き残り、動画の再生も続いている場合があります。
このことから、SenderアプリがChromecastデバイスに接続したとき、すでにReceiverアプリが起動中である可能性を考慮しなければなりません。具体的には、接続した後は必ずReceiverアプリの状態(アイドル状態か動画再生中なのか)を確認し、もし動画再生中であればコンテンツに関する情報や再生位置をReceiverアプリから取得して表示する、といった実装が必要です。
メディアプレーヤーの状態に依存する表示は、常にReceiverからの情報を元に表示するというポリシーで設計するのがいいでしょう。
例えば、メディアプレーヤーが再生中なら一時停止ボタンを、一時停止中なら再生ボタンを表示するといった制御が必要ですが、『Senderアプリで一時停止ボタンを押した時点で再生ボタンを表示する』のではなく、『Receiverアプリのメディアプレーヤーの状態が変化するのを待ってから表示を切り替える』とした方が、他のスマートフォンが操作したケースや、Receiverアプリが再生中に接続したケースと共通に扱えます。
スマートフォン上の画面で動画を再生している最中に、外部出力に切り替えたい場合があります。HDMIなどでは、通常、途中まで再生していた位置から引き続いて外部出力先で再生されるでしょう。
Chromecastも同様で、Senderアプリ内部で再生している途中でReceiverアプリでの再生に切り替えることができます。この仕様はDesigne Check Listで「Play & connect」と定義されています。
HDMIなどの外部出力では、出力先切替後も動画のデコードやコンテンツサーバーとの通信はスマートフォン側のアプリで行います。そのため、出力先切り替えのタイミングで動画の再読み込みなどは発生しません。
一方のChromecastでは、Chromecastデバイスで動画を再生するときはReceiverアプリがコンテンツサーバーとセッションを張り、デコード制御などを行います。
そのため、Senderアプリは出力先切り替えに伴い、次の手続きをしなければなりません。
3の手続きはSenderアプリ開発者が実装する必要があります。特に、再生中のコンテンツサーバーとクライアントとの間のセッション管理が必要なシステムでは、上記1のタイミングでセッションも解放するよう注意が必要です。
3回にわたりChromecastアプリ開発手法について解説してきました。グーグルが公開しているドキュメントは、筆者の印象では比較的簡潔かつ明確に書かれています。それらを読みつつ本連載で紹介した注意点やポイントを押さえれば、Chromecastアプリ開発で迷うところも少ないでしょう。
連載第1回で述べた通り、Chromecastアプリは誰でも開発できます。本連載がこれから開発を考えている方々の助けとなれば幸いです。
舛田明寛
株式会社オープンストリームにおいて、アーキテクトとしてiOSの技術調査・支援、開発案件に従事。組み込みアプリ開発・信号処理研究案件に従事した経歴があり、IoTやハードとソフトの融合をテーマとしてRaspberryPiやArduinoを題材とした執筆活動も行っている。
Copyright © ITmedia, Inc. All Rights Reserved.