Ubuntu Weekly Recipe

第339回ChromecastをUbuntuで使えるか試してみる

発売からやや時間が経ちましたが、日本でもとうとうChromecastが発売されました(2014年5月末⁠⁠。

Chromecast図1はHDMIに装着するスティック型のハードウェアです。HDMI接続できる機器に接続することで、PCやAndroidで見ているコンテンツをChromecastを接続した機器に映し出すことができます。

図1 Chromecast
図1 Chromecast

今週のレシピでは、Ubuntuを使ってChromecastでどの程度使えるかを試してみました。また、Chromecastを持っていない方向けに、PC上で利用できるChromecast互換ソフトウェア「Leapcast」を紹介します。

Chromecastの仕組み

Chromecastがコンテンツを表示する仕組みは以下のイメージとなります。

  1. PCやAndroidで表示しているコンテンツをChromecastで表示する際、PCやAndroidがコンテンツの送信元に対してChromecastへのコンテンツ送信を依頼します。
  2. コンテンツの送信元は1の依頼に基づき、Chromecastへのコンテンツ配信(キャスト)を行います。
  3. Chromecast側はコンテンツを受信し、テレビに映し出します。PCやAndroidはコンテンツを映しているChromecastを操作するだけとなります図2⁠。
図2 Chromecastとその周辺の役割Google Developersより
図2 Chromecastとその周辺の役割(Google Developersより)

Wi-Fiを利用した規格でディスプレイ伝送技術であるMiracastとは異なり、Chromecastはコンテンツを受信するメディアレシーバーに特化しているのも特徴です。

Chromecastの初期設定

Chromecastを利用するには、以下の環境が必要となります。

  • Wi-Fi環境
  • Wi-Fi対応のサポート対象のデバイス
  • HDMI端子付きのテレビ

初期設定の詳細な手順はこちらにありますが、以下のようにいたってシンプルです。

  1. Chromecastをテレビに差し込み、電源を入れます。電源はUSBもしくはACアダプタから取れます。
  2. テレビの入力切替でHDMI入力に切り替えます。
  3. ブラウザでhttps://chromecast.com/setupにアクセスし、表示される手順に従い設定を行います。

Ubuntuで初期設定を行う場合、ブラウザでアクセスすると別のデバイスでChromecastの設定を行うことが推奨図3されますが、筆者の環境であるUbuntu14.04上のChromiumでも初期設定ができることを確認しています。

図3 Ubuntu14.04上のChromiumからChromecast設定にアクセス
図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をインストール
図4 ChromeウェブストアでGoogle Castをインストール

インストールを行うと、ブラウザの右上にキャストアイコンが現れます図5⁠。このアイコンをクリックすると、Chromeで現在表示しているタブをChromecastへ転送することができます。

図5 キャストアイコン。キャスト中は青色になります
図5 キャストアイコン。キャスト中は青色になります

現在表示しているタブをChromecastへ転送できるため、Chrome(もしくはChromiumで)で表示できるものは、Chromecastに転送できます。ちょっとしたプレゼンテーションの表示にも向いているでしょう図6⁠。

図6 Googleスライドを全画面で表示
図6 Googleスライドを全画面で表示

Chromecastでストリーミング再生

GoogleはChromecastがストリーミング再生で利用するプロトコルを明確にしていませんが、デバイス探索にmDNS(マルチキャストDNS)を使い、動画の送受信はHTTPストリーミングを利用しています。

Chromecastのストリーミング再生でサポートしているフォーマットは、Supported Media for Google Castに定義があるように、MP4やWebMを利用できます。

ここでは、サーバとしてUbuntuを利用し、Android側から動画コンテンツを指定してChromecastに転送してみます。仕組みとしては以下になります。

  1. AndroidからUbuntuサーバに接続し、キャストしたいコンテンツを選択。
  2. AndroidはChromecastにキャストするコンテンツの情報を通知。
  3. ChromecastはmDNSを利用してUbuntuサーバを探索し、コンテンツをリクエスト。
  4. UbuntuサーバからChromecastに対してストリーミングを開始。
  5. 再生や音量の操作は、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の共有ディレクトリを参照
図7 VLCでRygelの共有ディレクトリを参照

再生用としてMP4もしくはWebMフォーマットの動画[2]を用意します。再生したい動画をRygelの設定で⁠uris⁠に指定したディレクトリに転送します。

BubbleUPnPのインストールと設定

続いて、AndroidでBubbleUPnPのインストールと設定を行います。まず、Google Playストアにアクセスし、BubbleUPnPをインストールします。インストールが終わったら、BubbleUPnPのアイコンをタップして起動します。

BubbleUPnPが起動したら、画面左端をスワイプしてナビゲーションメニューを表示し、⁠RENDERER」にChromecastを、⁠LIBRARY」にUbuntuのRygelを指定します図8⁠。

図8 BubbleUPnPの設定画面
図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動画をキャスト
図9 Androidで再生していたYouTube動画をキャスト

おわりに

今回はUbuntuを利用してChromecastを試してみましたが、WindowsやMacに比べると多少の制限はあっても、ほぼ同等に使える感触を持ちました。しかし、ストレージサーバとしてUbuntuを利用している場合、少し手を加えることでChromecastへコンテンツをキャストできるサーバにもなることは、Ubuntuで利用する大きなメリットではないかと筆者は考えます。

テレビやプロジェクターでもHDMI接続が増えてきた今、安価で持ち運びも容易なChromecastはアイデア次第でおもしろいことができることを予感させる端末でしょう。

おすすめ記事

記事・ニュース一覧