日別アーカイブ: 2014年6月3日

Chromecast で C++ アプリを走らせる。Emscripten のゲームを動かす

Chromecast 上でも Emscripten のプログラムが動きました。

chromecast_chiraks.jpg

少々ややこしいのですが、PC のブラウザで走らせた結果を、
Tab のミラーリング機能で TV に表示しているわけではないです。

Emscripten で作った JavaScript コードを、Custom Receiver として登録することで
Chromecast 上で走らせています。

速度は 10~15fps 前後。
Android 端末よりも遅いので、
Chromecast の CPU はあまり動作クロックが高くないようです。

● Chromecast とは

ほぼストリーム専用に特化したメディアプレイヤーです。

 ・Google Chromecast

端末の画面を TV にミラーリング表示するような、リモートモニタアダプタとは異なっています。

インターネットへの接続機能を持っており、基本的には Chromecast は
メディアプレイヤーとして単独で動作します。
ただし本体にリモコンやコントローラを繋ぐことはできず、UI を持っていません。
必ず PC や Android/iOS 等の他の端末経由で操作を行うことになります。

一般のメディアプレイヤー BOX / スティック との違いは下記の通り

・ストリーム向けなのでストレージを必要としない。SD カードスロットもない
・リモコンを持たない。USB/Bluetooth/IR 等の周辺機器をつなぐことができない

ストレージ含めて周辺機器も不要にしたことでハードウエアはシンプルです。
UI もいらないため Android を搭載したメディアプレイヤーよりも性能を必要とせず
コストダウンを可能にしているようです。

● ハードウエア

 ・iFixit Chromecast Teardown
 ・ARM Marvell SoCs

分解記事より Marvell 88DE3005-A1、↑ARM Marvell SoCs より Cortex-A9。
↓Amazon の Fire TV の比較表でも Single core の RAM 512MB と記載されています。

 ・Amazon Fire TV

動作クロックや GPU は不明。
同様のコンセプトだった Nexus Q と比べてもかなり控えめなスペックとなっています。

● Chromecast のアプリケーション

Chromecast は Web Browser (Chrome) が内蔵されており、
Web Application を走らせるプラットフォームとして機能しています。
ただし自由に Web page を表示させることはできず、
登録した Web Application (Receiver App) しか開けないように制限されています。

また Chromecast 本体だけでは何も操作できないので、
PC/Android/iOS 側にも操作用のアプリケーションが必要になります。

(1) Receiver Apps : Chromecast 上で走る Web Application (HTML+JS)
(2) Sender Apps : 外部から操作するためのアプリ (PC Chrome/Android/iOS Apps)

基本的には (1) と (2) の組み合わせで出来ています。
他にも Web Application として (1) を設置するための Web サーバーが要ります。

● PC の Tab ミラーリング

PC の Chrome ブラウザに拡張機能を追加すると、ブラウザの表示内容を
Chromecast に送信できるようになります。
アイコンから「このタブをキャスト」ボタンを選択。

CPU 負荷が一定分増加することからも、動画として Web Page の内容を送信しているようです。
PC がストリームサーバーを兼ねていることになります。

任意の Web を制限なく表示できますが、Chromecast が直接ネットにアクセスして
レンダリングを行っているわけではありません。

● リモコンだけのアプリ (Default Receiver)

メディアプレイヤーなどのよく使われる Receiver (1) は、デフォルトのものが用意されています。
そのためアプリケーションによっては、(2) のリモコン側を作るだけで機能を実現することができます。
この場合登録は不要。

● Chromecast の上で動くアプリ (Custom Receiver)

Chromecast 上で走る (1) の Receiver アプリを作るには登録が必要になります。

 1. Receiver / Sender アプリを作成
 2. Receiver を Web サーバーに転送する
 3. Developer Console で 2. の URL を登録して ID を受け取る
 4. 開発に使う Chromecast のシリアルを登録して Developer mode にする
   (Remote Debug できるようになる)

以下テスト実行までの手順

◎ Receiver アプリ URL の登録

1. Developer Console に登録&ログイン (5ドル必要)
 ・Google Cast SDK Developer Console
2. [ADD NEW APPLICATION] で Custom Receiver を選択
3. 名前と Receiver App を設置した URL の登録
   例 http://~/receiver_chiraks.html
4. Application ID が発行されるので、リモコン側 (2) のアプリケーションに ID を書き込む

◎ Chromecast Device の登録

1. Developer Console の [ADD NEW DEVICE] でシリアルナンバーを登録する。
 ・本体の裏面上部の文字列、または箱のシールにある SN の文字列
2. Device 登録には時間がかかるので 15分待つ。
3. “Ready For Testing” になったら完了

◎ Developer mode の確認

1. Chromecast の電源を一旦落とす。
2. Chromecast を再び起動して PC 上の Chrome ブラウザから下記 URL を開く
  http://ChromecastのIPアドレス:9222
3. もし開けない場合は、再び電源を落として時間をおいてからやりなおす。

“Inspectable WebContents” と表示されたら成功で、
Console の log を確認したり Remote Debug できるようになります。

◎ アプリの実行

Sender を起動して登録した Chromecast Device に接続

とりあえず Chromecast のようなデバイスでも
Emscripten でプログラムを作れることがわかりました。

関連エントリ
Emscripten C++/OpenGL ES 2.0 (9) C関数呼び出しと FileSystem
Emscripten C++ のアプリをブラウザで動かす (8) iOS でも動く
Emscripten C++/OpenGL ES 2.0 (7) Emscripten の OpenGL API と WebGL
Emscripten C++/OpenGL ES 2.0 (6) Chrome の速度と IE11/Safari
Emscripten C++/OpenGL ES 2.0 のアプリケーションをブラウザで動かす (5)
Emscripten C++/OpenGL ES 2.0 のアプリケーションをブラウザで動かす (4)
Emscripten C++/OpenGL ES 2.0 のアプリケーションをブラウザで動かす (3)
Emscripten C++/OpenGL ES 2.0 のアプリケーションをブラウザで動かす (2)
Emscripten C++/OpenGL ES 2.0 のアプリケーションをブラウザで動かす (1)
Emscripten C++/OpenGL ES 2.0 のアプリケーションをブラウザで動かす 一覧