« November 2006 | Main | April 2007 »

2006.12.31

PS3は汎用メディアプレイヤーの夢を見るか(Wiiリモコンで操作向上編)

導入編に引き続き、WiiリモコンでPS3Linux上の動画プレイヤーを操作できる環境を整えるための手順をまとめてみる。

◆まずは加速度センサーで小手調べ
Wii本体はなかなか入手が難しい状態が続いているが、WiiリモコンであればAmazonで在庫あり状態が続いているので容易に入手できた。とりあえずはということで、加速度センサのみでマウスポインタ操作を試してみることにした。Windows環境であれば、WiinRemoteをインストールして、Blutooth機器としてWiiリモコンを認識させてやれば、サクっと試すことができる。Blutooth内臓のノートPCを使ってトライしてみたが、ITmediaのPPT操作レポートにあるように、加速度センサーだけでは到底細かい操作は実現できないことを身をもって体験した。


◆センサーバーを用意する
より精度の高いマウスポインタ操作を実現するためには、やはりIRセンサの運用が必須と言える。しかし、そこで障壁となるのがセンサーバーの準備である。Wii本体を持っていない以上、自前で用意する必要があるのだが、センサーバーとは言っても中身は赤外線LEDが配置されているだけでセンサーがあるわけではない。(【続報:Wii分解】「センサーバー」にはセンサがなかった - 要登録)

現在のところ選択できるソリューションは以下の通り。

1.サードパーティ製の電池式センサーバーを購入する($24.99)
2.自作する(材料費350円以下とのこと)
3.ロウソクをたてる(赤外線が出るからね...)

3.は論外として、1と2は迷ったのだが、ポケットニュースさんの記事を読んでこれならなんとか出来そうだと思い、秋葉原に部品を買いに走った。電池式とは異なりUSBポートから電源をとる方式であれば、PS3に接続することで電源の心配はなくなる。事前にあたりをつけていた秋月商会が定休日だったので、急遽千石電商3号店に購入先を変更した。ロクにスペックも事前調査しないでなんとなく安さで選んだのが東芝のTLN110だったのだが、何のことはない、、、これが大はずれだった。後からいまいち反応が悪いなぁと思って東芝半導体のサイトを調べてみたら、指向角半値幅が±8しかない光電スイッチ用の赤外LEDであったことが判明....。明らかに直線性を重視したスペックなのでセンサーバーとしては不向きなものを選んでしまった。

同じ価格帯(1個50円程度)で選ぶならば、放射強度はTLN110よりやや低いが、半値角が±23.5もあるTLN105Bか、もう少し高くてもよければ光出力と放射強度を重視して、TLN231(F)あたりが良いだろう。ただし、TLN1xxシリーズよりTLN2xxシリーズのほうが、ピーク発光波長が少し短いようなのだが、これがCMOSセンサーにどう影響を及ぼすのかは理解できていないので詳しい方教えてくださいm(_ _)m

次に回路に必要な抵抗の計算をしてみた。赤外LEDを3個直列でつなぐとすれば、TLN105B(TLN110も同じ)の標準順電圧が1.35Vで、If=100mAなので、USB電源が5Vであることを考えると、計算上は(5-1.35*3)/0.1=9.5Ωの抵抗を挟んでやる必要がある。10Ω程度なら無視しても良いかなぁ、なんて甘い考えで最初はUSB電源と直結していたのだが、ものの数十秒のうちにどんどんLEDが熱くなってきて、ついには触れないほどに加熱してしまった。慌てて抵抗をいれてみたところ、触っても温度の変化は感じられなくなった。

また、USBから電源をとるためのVBus/GNDの判別は、USBのコードをばらして赤コードがVBusで、黒コードがGNDという区別の仕方が確実だろう。詳しくはUSB2.0規格のSection6あたりを参照のこと。千石電商2号店でUSB2.0延長ケーブルを190円で購入した。

LEDからちゃんと赤外線が出ているかどうかは、目視では判別できないが、デジカメのモニタでみればちゃんと光っていることを確認できる。

早速、出来上がったLED3個直列接続な基盤2つを約20cm程度の間隔をとり、ノートPCのモニタ上部に設置して、先述のWiinRemoteを使って、マウスポインタをIRモードで操作してみた。Wiiユーザーからすれば当たり前な体験なのだろうが、フリーポインタ(マウスカーソル)をマウス以外のデバイスで空を切って操作するのはかなり新鮮な感覚であった。そして、ウィンドウの移動やリサイズ、スタートメニューからのアプリ起動、アイコンのドラッグ&ドロップなどの、いわゆるWIMPの基本操作を難なくこなすことができた。


◆PS3Linux(FC5)にWiiリモコンを接続する
基本はyaegashiさんの切り開いてくださった道を後追いする方向で進める。必要なパッチがWikiページにまとめられているので、必要に際して随時ダウンロードしていくものとする。

Pythonで実装されたWMDでは、/dev/uinput(or /dev/misc/uinput)を使用するのだが、FC5のカーネルのデフォルト設定ではCONFIG_INPUT_UINPUTが定義されておらず(/boot/config.2.6.16の内容から判断)、uinput.koも存在しない状態なので、カーネルの再構築を行ってやる必要がある。カーネスソースツリーが必要になるのだが、ソースはフルインストールをしても対象からは外れているので、自前でひっぱってくる必要がある。

カーネルソースは、インストール時に使用したAddOnPackageCDから持ってくることにする。srcフォルダにあるlinux-20061208.tar.gz2ファイルを展開して、解凍して出来上がったlinux-20061208フォルダには、/lib/modules/2.6.16配下にあるsource/buildの名前でシンボリックリンクを貼っておく。

カーネルの再構築のオプション設定では、Bluetooth関連のモジュールはすでに有効になっていたので、InputDeviceのuinputだけ変更に出来れば良い。

#cd /lib/modules/2.6.16/build
#make menuconfig

で、/boot/config.2.6.16ファイルの設定値を読み込んだ上でメニューが表示される。そこで、

DeviceDrivers --->
   Input Device Support--->
 [*] Miscellaneous devices --->
 [M]User level driver support

としてやればok。自分の場合は、(M)にしておいて、起動時にinsmodでuinput.koをロードするようにしている。

カーネルのコンパイルを実行する。

#cd /lib/modules/2.6.16/build
#make

完了したら、uinput.cにパッチを当てる。uinput_compat.patchファイルをResouceの項目からダウンロードしておいて、/lib/modules/2.6.16/build/drivers/input/miscフォルダに配置しておき、patchコマンドで適用する。

#cd /lib/modules/2.6.16/build/drivers/input/misc
#patch < uinput_compat.patch

パッチをあてたuinput.cだけを再コンパイルする。miscフォルダ配下にあるMakefileは別名で残しておいて、別途以下の内容のMakefileを作成して、makeを実行する。

 obj-m := uinput.o
 KDIR := /lib/modules/2.6.16/build
 PWD := $(shell pwd)
 default:
    $(MAKE) -C $(KDIR) M=$(PWD) modules

再構築したドライバモジュール群をKernelフォルダにインストールする

#cd /lib/modules/2.6.16/build
#make modules_install

カーネルイメージをインストールする。念のために、/bootフォルダに存在しているvmlinux,System.map,initrd.imgファイルは別名で保存をしておくと良いかも。

#installkernel 2.6.16 vmlinux System.map

なぜか処理に一時間以上かかり、しかもinitrd.imgの生成には失敗したが、vmlinux,System.mapファイルはきちんと更新されたのでよしとする...。再起動後に、uinputドライバをロードしてみる。確認はlsmodで行う。

#insmod /lib/modules/2.6.16/kernel/drivers/misc/uinput.ko
#lsmod | grep uinput
#uinput 8832 0(IDは環境により異なる)

Python本体にもパッチを当てる必要があるので、オフィシャルサイトからソースコードをDLする。バージョンは2.4.4にしておいた。

python_ioctl.patchファイルをResouceの項目からダウンロードしておいて、Python-2.4.4/Modulesフォルダに配置しておき、パッチをあてる

#cd Python-2.4.4/Modules
#patch < python_ioctl.patch

Hunkが3箇所ほど適用されるが問題なくパッチはあたる。
Python本体のコンパイル&インストールをする

#./configure --enable-unicode=ucs4
#make & make install

あとはWMDの動作に必要なPython系ライブラリをひたすらインストールしていく

Bluez

#yum install bluez-libs-devel

PyBluez
公式サイトからpybluez-src-0.9.1.tar.gzをDL&インストールをして、パッケージとしてbluetooth.pyファイルを配置しておく

#python setup.py install
#cp pybluez-0.9.1/bluetooth.py /usr/lib/python2.4/site-packages/

Python-Xlib
プロジェクトページから0.13をインストールする

#python setup.py install
#grep self.socket.recv /usr/lib/python2.4/site-packages/Xlib/protocol/display.py

もし、self.socket.recv(4096)の引数が2048になっていたら、4096に変更しておく

いよいよWiiリモコンを接続してみる。PS3側でBluetooth機器のスキャンを実施してから、Wiiリモコンの電池蓋の裏にある赤いSyncボタンを押すと、ユニークなIDを参照することができる。

#hcitool scan | grep Nintendo
#  00:19:1D:XX:XX:XX Nintendo RVL-CNT-01

WMD本体を公式サイトからDLして展開する。トップディレクトリにあるWMD.pyの代わりに、WMD-PS3.pyを使用する。WMD-PS3.pyファイルの以下の部分を編集する

 ・130行目あたりのMY_WIIMOTE_ADDR="00:19:1D:25:16:43"を先ほど参照したIDに変更する
 ・141行目あたりのO_MODESは以下のように設定
  IO_MODES = { # SET TO TRUE IF YOU HAVE:
   'UINPUT': True, ## the uinput kernel module loaded.
   'XLIB': True, ## python-xlib with the buffer overflow patch.
   'X_EVDEV': False, ## evdev_drv and a customized xorg.conf.
   'PYOSD': False
  }
 ・152行目あたりのUINPUT_DEV = "/dev/misc/uinput"を "/dev/uinput"に変更しておく

あとは、WMD-PS3.pyを実行して、再度赤いSyncボタンを押せばWiiリモコンの動作が確認できるはずだ。

#python WMD-PS3.py

以上が冬休みの前半で実施した作業のすべてだ。年明けの冬休み後半では、赤外LEDを交換して基盤を再作成したり、リモコン操作系の改善を図ったりしてみたい。

| | Comments (0) | TrackBack (0)

2006.12.29

PS3は汎用メディアプレイヤーの夢を見るか(導入編)

動機編に引き続いて、実際のPS3へのLinux導入、動画再生環境の整備の手順をまとめてみる。

インストールするディストリビューションはFedoraCore5(FC5)を選択した。PS3への導入の解説サイトも多いし、FC5自体の情報も豊富だ。FC5のインストール手順は、FIXSTARSさんのサイトがわかりやすくて助かった。

◆導入に際して用意したものは以下の通り。
・ワイアレスキーボード、マウス(SANWA SUPPLYのSKB-WL09SETBK)
  付属のUSBドングルを挿すだけで一発で認識した。PS3 GameOS/LinuxOS共に動作確認できた
・FedoraCore5のインストールDVD、AddOnPackageのCD
  DVD、CDのISOの書き込みには、ImgBurnを使用した


◆X Windowの軽量化
標準のWindowManagerであるGnomeはかなり動作が重い。やはりメインメモリが256MBしかなく、RSXへのアクセスも禁止されている現状では快適な動作は厳しいようだ。そこで軽量WindowManagerとして定評のあるXFCEに切り替えた。FC5の場合、yumでインストール可能だ。

yumではhttp接続を行うが、proxyの設定が必要なネットワーク環境の場合には、以下の環境変数をホームディレクトリの.bashrcファイルに設定しておく

export http_proxy=http://<ホスト名 or IPアドレス>:<ポート番号>/

XFCE関連のrpmを一括インストールする

#yum groupinstall XFCE

起動後のランレベル3からは、startxの代わりに以下のようにすればXFCEが起動できる。

#startxfce4

GUIデザインがGnomeに比べると寂しいのだが、テーマを好みのものに変えるのが良いだろう。自分は、MacOSX風のものに変えてみた。上記のテーマはGnomeだともっとMacライクになったりするし、やっぱりGnomeが良いという人は、設定変更で軽量化を図る方法もある。

#gconf-editor

で、設定エディタを起動して"apps/metacity/general/reduced_resources"にチェックを入れると、ウィンドウの移動がフレームになりレスポンスが幾分改善される。


◆WindowsOSのストレージ(NTFS)へのアクセス
Sambaクライアントを使うことになるのだが、FC5ではmountコマンドに統合されているようだ。書式は以下の通り。

mount -t cifs //(Windowsコンピュータ名)/(共有フォルダ名) (マウントディレクトリ) -o username=(Windowsユーザ名)[,password=(Windowsパスワード)][,iocharset=(デフォルト文字コード)]

Windowsコンピュータ名はIPアドレスでもok、共有フォルダ名はWindows上でつけた共有名に合わせる。また、iocharset=utf8を指定することで、日本語名のフォルダ、ファイルをきちんと表示してアクセスすることができた。一旦マウントに成功すれば、Gnome/XFCE共にファイルブラウザからローカルストレージと同等にアクセスできるので非常に便利だ。これでPS3のHDD容量を節約できるし、コンテンツをコピーする手間も省くことができる。


◆動画再生プレーヤーの選択
Linux環境で定評のある動画再生プレーヤーには以下のものがある。
totem
mplayer
VLC

対応Codecの種類数はどれも十分なのだが、実際にPS3+FC5環境で動作させることができるかどうかは別問題だ。結論から述べると、VLCでは再生が確認できなかった。totemと一緒にインストールをすると競合を起こすという報告もあったが、詳細は調べてはいない。動作報告例があったらまた更新したい。

mplayerとtotemはどちらも再生自体は確認できた。しかし、mplayerはスケーリングをすると縦ノイズが載ってしまう不具合があったため、最終的にはtotemに落ち着いた。

FC5はtotemのGStream版がプリインストールされているが、WMVやDivXに関してはxine版のほうが動作報告例が多く、また対応Codecを増やすのも楽という情報があったので、totem-xine版に入れ替える手順を以下にまとめる。

まずは、yumの検索対象にlivnaリポジトリを参照できるようにしておく

#rpm -ivh http://rpm.livna.org/livna-release-5.rpm

次に依存関係のあるライブラリを自動でダウンロードしてくれるようにextraリポジトリを有効化させておく。編集対象のファイルは、/etc/yum.repos.d/fedora-extras.repoで、5行目あたりにある[extras]の項目のenable値を0から1に変更する。

totem-gstreamとtotem-xineは共存できないので、プリインストールされているtotem-gstreamを削除する

#yum -y remove totem

totem-xine関連モジュールをインストールする。totem削除時にrythmboxが一緒に消されてしまうので、一応再インストールしておく

#yum -y --enablerepo livna install totem-xine totem-lib rhythmbox

対応Codecを増やすためにxine-libを追加インストールする。

#yum -y --enablerepo livna install xine-lib*

デフォルト設定では、SPDIF出力のノイズが酷かった(音が割れた)が、ALSAドライバをESD経由でたたくとクリアな音声出力を得ることができた。Homeディレクトリの~./gnome2/totem_configファイルの「audio.driver:alsa」となっている箇所を「audio.dirver:esd」に変更して、プレイヤーを再起動すればok。

D5出力環境で、手元にあったWMV9,DivX4/5,XVidファイルを、好きなサイズにスケーリングして再生することができ、全画面出力もきちんと動作したのでかなり満足のゆく結果となった。たまに、タイムサーチをした際に音声にノイズがのることがあるがまぁ気になるほどではない。


一応mplayerでも画音出力は得られたので、試した手順は記載しておく
本体インストールはお決まりの作業

#yum -y --enablerepo livna mplayer*

/etc/mplayer/mplayer.confファイルの「#vo=xv」となっている箇所を「vo=x11」に変更(#を削除する)。aoはao=sdlにしておく。またHomeディレクトリの~/.mplayer/configファイル(なければ作成)に、zoom=yesと記載しておくと一応スケーリングができるようになる。....が前述のとおり、縦縞のノイズが載ってしまい、まともな画は得られなかった。スケーリングサイズをかなり小さくするとノイズが消えたりはするのだが....。totemが動作してしまったので、これ以上深追いするのは辞めにした。追加情報があればまた更新することにする。

ひとしきり動画鑑賞を楽しんでいたのだが、既存のWindowsPC→アンプ→TV接続の頃からの重大な不満点を思い出した。PC用の椅子に座って、卓上でマウス操作をしている分には困らないのだが、ソファーにどっかりと腰を下ろして視聴するには、100歩譲ってキーボード操作はひざの上でやるにしても、マウス操作はいかんともしがたい。かといって十字キーベースのリモコンをつないでもあまりユーザービリティは改善しそうにない。マウスとキーボードが一体になったMS Remote KeyboardVGP-WKB1を購入するという手もあるが、やはりログインなんぞを済ませた後のプレイヤー操作は、リモコンのように片手で済ませたい。

こんなわがままな用件を満たすソリューションがひとつ思い当たった。そう、先日のBinary2.0Conference2006で注目を集めたPS3Linux+Wiiリモコンという組み合わせである。


| | Comments (3) | TrackBack (0)

PS3は汎用メディアプレイヤーの夢を見るか(動機編)

3強の出揃った次世代ゲーム機戦争は、大方の予想通りの市場展開となっている。Wiiは驚異的なスタートダッシュを果たし、XBOX360は圧倒的な先行出荷台数が目立つ。
http://nexgenwars.com/

一方でPS3は、Amazonで在庫のある時間が伸びてきている。もうヤフオクに頼る必要はないだろう。
あまウォッチ PS3 60GB
あまウォッチ PS3 20GB

ゲーム機の立ち上げとしては明らかな失敗となったPS3だが、AV機器としての評価は概ね上々だ。そこで、メディアプレイヤーとしての可能性に着目してみたい。

ハードウェアスペック面では、メディアプレイヤーとして必要とされる要件を十分に満たしている。HDMI端子、コンポーネント(D1-D5)、SPDIF、Bluetooth、USB*4、GigabitEtherといった豊富な入出力端子を備え、2.5インチHDDは交換可能だ。そして、本体の静音性もかなり高く、TVを視聴するレベルで距離をとれば動作音は皆無である。

しかし、ソフトウェアスペック面は些か非力だ。コンテンツ再生は、限られたフォーマットにしか対応していない。特に動画フォーマットが全然足りておらず、最低限WMVやDivXくらいは再生してもらわないと汎用メディアプレイヤーとは呼べないだろう。

これまで、PCに保存した映像/音楽コンテンツをTV/アンプで閲覧する際には、PCのビデオカードのコンポーネント出力と、サウンドカードのSPDIFをアンプに接続していた。(恐らくバイリニアな)ソフトスケーリングであっても、動画再生ウィンドウを広げるだけで、TV側でよしなに補完してくれるのでそれなりに見れる画質だったし、音声はPCM2ch/48khzストリームをアンプのドルビープロロジックIIに通すことで程よいサラウンド感が得られていた。しかし、以下のような不満点があった。

1.PCとTV/AMPの距離が近い(約2m)今では問題ないが、将来的には離れた位置に置くことになる。つなぐのはEthernetだけにして、コンポーネントケーブル/SPDIFケーブルを引き回すのは辞めたい。長いケーブルは画質/音質面で不利という点もある。

2.PCのメインディスプレイ(液晶モニタ)でWebブラウジング等をしながら、セカンドディスプレイ(TV)にコンポーネント出力で動画を再生しているとそれなりに重い。特にSXRDリアプロ50インチを導入してからは、D3(1920x1080i)で出力するようになり、WindowsMediaPlayerウィンドウをソフトウェアスケーリングで大きくすると、旧世代PC(AthlonXP1600+)では結構厳しい。全画面表示にするとコマ落ち/音飛びが発生してしまう。

これらの不満点を解消するためには、TV/アンプの直近に専用メディアプレイヤーを設置するのが望ましい。要件は以下の通り。

1.WMV/DivX/Xvidなどの動画フォーマット再生に対応する
2.HDMI接続でD5(1080p)接続、SPDIFでPCM再生(HDMI対応アンプを持っていないので ^^;)
3.WindowsPCのストレージに直接アクセスする(コンテンツをコピーする手間は省きたい)

IODataのAVeL LinkPlayerは、要件に対する解に最も近い存在だが、唯一D5出力だけが足りなかった。というわけで、PS3+Linuxという構成で解決を試みた。


| | Comments (0) | TrackBack (1)

« November 2006 | Main | April 2007 »