読者です 読者をやめる 読者になる 読者になる

TitaniumMobile勉強記

Web系エンジニア向けのキャリアアドバイザーやってましたが現在はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連(Node.js、Titanium)あたり

JBしたAppleTV(2G)にradiko導入作業中

会社のブログの方でAppleTVを○○するとNASから直接音楽や動画を再生できるよ!というエントリ書いたのですが、ちょっとしたことがきっかけで以下AppleTV(2G)をJB(脱獄)しました。

上記リンク先の会社のブログでも触れていますが、元々はNAS上の音楽データをMac経由させずに直接再生させたかったので、基本的にやりたいことはすでに実現出来ました。

JBする作業の中でXBMC(Xbox Media Center)というメディアサーバーとなるアプリケーションの存在を知り、その流れでXBMCなうさんという方からXBMC向けのradikoプラグインを作っていることを教えてもらったので、AppleTV(2G)のXBMCでも利用できないか導入作業中です。

プラグイン導入してもそのままではradikoが利用できないので自分で調べたことについてすぐ忘れてしまうので、とりあえずメモ的にまとめておきます

XBMCへのプラグイン導入手順

radiko plugin for XBMCにあるZIPファイルをダウンロードして、母艦となるMacの任意のフォルダに保存します。
※仮に/Users/xxx/Desktop/radiko-plugin.zipとでもします。

次にJB済のAppleTV(2G)はssh出来るので、母艦となるMacのターミナル上で

$ ssh root@apple-tv

としてAppleTV(2G)にsshします。

それから母艦となるMacに対してAppleTV(2G)からリモートログイン出来るようにMacのシステム環境設定のリモートログインを有効にします。
ssh

sshしてあるAppleTV(2G)上で下記コマンドを入力

$ scp YOURUSERID@macbook-air:/Users/xxx/Desktop/radiko-plugin.zip /var/mobile/Documents/radiko-plugin.zip 

これで母艦となるMacからAppleTV(2G)に対してZIPファイルのコピーが行われます

最後にAppleTV(2G)の画面上でXBMCを起動して「Install from ZIP file」というメニューを選択してAppleTV(2G)上のZIPからプラグインをインストールします。

※Install from ZIP fileの画面イメージはこちらのエントリにTV画面を撮影したキャプチャ画像があるので参考になるかも

プラグイン導入して実行するとscript errorになる

radiko plugin for XBMCにあるZIPファイルを解凍するとわかりますが、default.pyというのが実際に実行されるようで、拡張子から想像つくようにPythonで書かれています。

scrpt errorとなっていたので、AppleTV(2G)にsshして
/var/mobile/Library/Preferences/xbmc.log
の中身をチェックすると

16:03:19 T:258891776 M:107163648  NOTICE: -->Python Interpreter Initialized<--
16:03:21 T:258891776 M:107274240   ERROR: Error Type: <type 'exceptions.ImportError'>
16:03:21 T:258891776 M:107274240   ERROR: Error Contents: No module named PIL
16:03:21 T:258891776 M:107266048   ERROR: Traceback (most recent call last):
                                              File "/var/mobile/Library/Preferences/XBMC/addons/plugin.audio.radiko/default.py", line 26, in <module>
                                                from PIL import Image
                                            ImportError: No module named PIL
16:03:21 T:245379072 M:106938368   ERROR: GetDirectory - Error getting plugin://plugin.audio.radiko/
16:03:21 T:245379072 M:106934272   ERROR: CGUIMediaWindow::GetDirectory(plugin://plugin.audio.radiko/) failed

という感じで、PIL(Python Imaging Library )のモジュールの読込に失敗しているようです。

AppleTV(2G)にはPILインストールされてないのか、それともパスが通ってないためかいずれにしてもこれが原因らしいことはわかりました。

AppleTV(2G)はapt-getでバイナリファイルのインストール出来るようなのでダメもとで

# apt-get install python-imaging
# apt-get install PIL

とかしてみたのですがCouldn't find package xxxxxという感じで怒られるだけでした。

Python Imaging Libraryのソースをこちらからダウンロードし

  • Macでクロスコンパイル環境作る
  • AppleTV上でビルドする

のどちらかを試そうかと思ってますが、果たして自分のスキルでそんなことが簡単にできるんだろうか・・

※おまけ※
radiko pluginのソースを見ると上記のPIL含めて

import sys, os, re, glob, shutil
import struct, zlib, xml.dom.minidom
import threading, time
import urllib, urllib2
import xbmc, xbmcgui, xbmcplugin, xbmcaddon

from math import ceil
from base64 import b64encode
from PIL import Image
from cStringIO import StringIO

というモジュールを読み込むつくりになっているようです。radikoAPIが公開されていれば自分でPIL使わないソース考えようかと思ったのですが、そもそもAPI公開されてないんですね・・