発売からやや時間が経ちましたが、日本でもとうとうChromecastが発売されました(2014年5月末) 。
Chromecast(図1 )はHDMIに装着するスティック型のハードウェアです。HDMI接続できる機器に接続することで、PCやAndroidで見ているコンテンツをChromecastを接続した機器に映し出すことができます。
図1 Chromecast
今週のレシピでは、Ubuntuを使ってChromecastでどの程度使えるかを試してみました。また、Chromecastを持っていない方向けに、PC上で利用できるChromecast互換ソフトウェア「Leapcast」を紹介します。
Chromecastの仕組み
Chromecastがコンテンツを表示する仕組みは以下のイメージとなります。
PCやAndroidで表示しているコンテンツをChromecastで表示する際、PCやAndroidがコンテンツの送信元に対してChromecastへのコンテンツ送信を依頼します。
コンテンツの送信元は1の依頼に基づき、Chromecastへのコンテンツ配信(キャスト)を行います。
Chromecast側はコンテンツを受信し、テレビに映し出します。PCやAndroidはコンテンツを映しているChromecastを操作するだけとなります(図2 ) 。
図2 Chromecastとその周辺の役割(Google Developersより )
Wi-Fiを利用した規格でディスプレイ伝送技術であるMiracast とは異なり、Chromecastはコンテンツを受信するメディアレシーバーに特化しているのも特徴です。
Chromecastの初期設定
Chromecastを利用するには、以下の環境が必要となります。
Wi-Fi環境
Wi-Fi対応のサポート対象のデバイス
HDMI端子付きのテレビ
初期設定の詳細な手順はこちら にありますが、以下のようにいたってシンプルです。
Chromecastをテレビに差し込み、電源を入れます。電源はUSBもしくはACアダプタから取れます。
テレビの入力切替でHDMI入力に切り替えます。
ブラウザでhttps://chromecast.com/setup にアクセスし、表示される手順に従い設定を行います。
Ubuntuで初期設定を行う場合、ブラウザでアクセスすると別のデバイスでChromecastの設定を行うことが推奨(図3 )されますが、筆者の環境であるUbuntu14.04上のChromiumでも初期設定ができることを確認しています。
図3 Ubuntu14.04上のChromiumからChromecast設定にアクセス
Chomeastの初期設定を終えたら、まずはGoogle cast for Chromeを使ってUbuntuのChrome上からコンテンツをキャストしてみましょう。
Google cast for Chromeを使う
Chromeの画面をキャストするGoogle cast for Chromeを使うには、Chromeの拡張機能の導入が必要です。UbuntuではChrome、Chromiumのいずれにも適用できますので、いずれかのブラウザを準備しておきます。
ブラウザのアプリからChromeウェブストアを選択して、Google Cast をインストール(図4 )します。
図4 ChromeウェブストアでGoogle Castをインストール
インストールを行うと、ブラウザの右上にキャストアイコンが現れます(図5 ) 。このアイコンをクリックすると、Chromeで現在表示しているタブをChromecastへ転送することができます。
図5 キャストアイコン。キャスト中は青色になります
現在表示しているタブをChromecastへ転送できるため、Chrome(もしくはChromiumで)で表示できるものは、Chromecastに転送できます。ちょっとしたプレゼンテーションの表示にも向いているでしょう(図6 ) 。
図6 Googleスライドを全画面で表示
Chromecastでストリーミング再生
GoogleはChromecastがストリーミング再生で利用するプロトコルを明確にしていませんが、デバイス探索にmDNS(マルチキャストDNS)を使い、動画の送受信はHTTPストリーミングを利用しています。
Chromecastのストリーミング再生でサポートしているフォーマットは、Supported Media for Google Cast に定義があるように、MP4やWebMを利用できます。
ここでは、サーバとしてUbuntuを利用し、Android側から動画コンテンツを指定してChromecastに転送してみます。仕組みとしては以下になります。
AndroidからUbuntuサーバに接続し、キャストしたいコンテンツを選択。
AndroidはChromecastにキャストするコンテンツの情報を通知。
ChromecastはmDNSを利用してUbuntuサーバを探索し、コンテンツをリクエスト。
UbuntuサーバからChromecastに対してストリーミングを開始。
再生や音量の操作は、AndroidからChromecastに対して行う。
これらを実現するためUbuntuにはRygelを、AndroidにはBubbleUPnPをインストールします。
Rygel とは、Linuxサーバに配置した動画やオーディオなどのコンテンツを共有するため、UPnP AV Mediaserverを実装したDLNAサーバアプリケーションです。また、BubbleUPnP は、Android上でDLNAサーバによって提供されたコンテンツの受信や操作を可能にする、DLNAクライアントアプリケーションです。
UbuntuにはRygelを導入し、DLNAサーバとしてHTTPストリーミングを行い、Chromecastに対してコンテンツを提供します。Android側ではBubbleUPnPを導入して、UbuntuとChromecastに対して操作を行うイメージで考えれば良いでしょう。
Rygelのインストールと設定
まずは、Ubuntu側にRygelをインストールします。Ubuntuの環境は14.04を利用して行いましたが、Rygelが導入できる12.04でも動作すると思います。
$ sudo apt-get install rygel
次に、/etc/rygel.confの設定に動画配信を行いたいディレクトリを登録するため、[ MediaExport]の欄にある“ uris” の項目を修正します。たとえば、“ /home/kazken3/test” ディレクトリを配信用のディレクトリにするには以下のように修正します[1] 。
uris=/home/kazken3/test
/etc/rygel.confの設定が終わったら、rygelを起動します。
$ sudo rygel &
Rygelの動作確認は、VLCを利用するのが良いでしょう。VLCをインストールして起動させます。
$ sudo apt-get install vlc
VLCを起動したら、Ctrl+lまたは[表示]-[プレイリスト]でプレイリスト画面にし、左上のペインから[ローカルネットワーク]-[ユニバーサルプラグ&プレイ]を選択してみましょう。これでRygelで共有されているディレクトリを表示すれば、Rygelのインストールと設定が完了です(図7 ) 。
図7 VLCでRygelの共有ディレクトリを参照
再生用としてMP4もしくはWebMフォーマットの動画[2] を用意します。再生したい動画をRygelの設定で“ uris” に指定したディレクトリに転送します。
BubbleUPnPのインストールと設定
続いて、AndroidでBubbleUPnPのインストールと設定を行います。まず、Google Playストアにアクセスし、BubbleUPnP をインストールします。インストールが終わったら、BubbleUPnPのアイコンをタップして起動します。
BubbleUPnPが起動したら、画面左端をスワイプしてナビゲーションメニューを表示し、「 RENDERER」にChromecastを、「 LIBRARY」にUbuntuのRygelを指定します(図8 ) 。
図8 BubbleUPnPの設定画面
設定が完了したら、ナビゲーションメニューを右スワイプで閉じます。
動画のキャスト
BubbleUPnP画面の右下にある「LIBRARY」タブをタップすると、ディレクトリリストが表示されます。「 Files & Folders」や「Videos」ディレクトリをたどり、再生したい動画を選び再生ボタンを押すと動画のキャストが始まります。
筆者の環境はHP ProLiant MicroServerの旧モデル で、スペックとしては非力な環境ですが、MP4やWebMファイルともに再生可能でした。
また今回のレシピでは割愛しましたが、JPEGやPNGの画像ファイル、MP3やLC-ACCなどの音声ファイルもキャストできますので、アルバムやミュージックボックスのような使い方も可能です。
Chromecastを疑似体験してみよう
さて、Chromecastは持ってないがAndroidは持っているという方は、Leapcastを試してみるのはいかがでしょうか。
Leapcast は、Chromecast Receiver API v2 をPythonで実装した擬似Chromecastアプリケーションです。Android端末からYouTubeなどのChromecast Receiver API v2を利用した一部のサービスを、Leapcastを実行しているPCにキャストできます。
まず、Leapcastの導入に必要なgitをインストールします。
$ sudo apt-get install git
gitを使ってLeapcastをcloneします。
$ git clone https://github.com/dz0ny/leapcast.git
Leapcastを動作させるためのパッケージをインストールします。
$ sudo apt-get install virtualenvwrapper python-pip python-twisted-web python2.7-dev
git cloneを行ったLeapcastのディレクトリに移動し、Leapcastを実行するための仮想環境を準備します[3] 。
$ cd ./leapcast
$ mkvirtualenv leapcast
$ pip install .
Leapcastを実行します。
(leapcast)$ ./leapcast
Leapcastが待ち受け状態になるので、AndroidからYouTubeなどのサービスを起動して右上のキャストボタンを押すと、PCでYouTubeの画面が表示(図9 )され、操作はAndroidから行うことができます。
図9 Androidで再生していたYouTube動画をキャスト
おわりに
今回はUbuntuを利用してChromecastを試してみましたが、WindowsやMacに比べると多少の制限はあっても、ほぼ同等に使える感触を持ちました。しかし、ストレージサーバとしてUbuntuを利用している場合、少し手を加えることでChromecastへコンテンツをキャストできるサーバにもなることは、Ubuntuで利用する大きなメリットではないかと筆者は考えます。
テレビやプロジェクターでもHDMI接続が増えてきた今、安価で持ち運びも容易なChromecastはアイデア次第でおもしろいことができることを予感させる端末でしょう。