続きです。
前回まででドライバのビルドが完了し、ドライバのロード、LOG-J200の認識までいきました。ワンセグのTSストリームを取り出すにはドライバだけじゃだめで、dvbstream コマンドが必要です。
dvbstream はここからダウンロードできます。そのままビルドしてもいいのですが、ぱぱネット(仮)さんで公開されているLOG-J200のドライバ(前回ダウンロードしたもの)のアーカイブ内に、8ch分同時起動可能にするパッチが入っているので、これも当ててビルドします。
まずは、dvbstream-0.5.tar.gzをダウンロードし、展開します。
$ cd ~/project/oneseg/file
$ wget http://jaist.dl.sourceforge.net/project/dvbtools/dvbstream/dvbstream-0.5/dvbstream-0.5.tar.gz
$ cd ..
$ tar xf file/dvbstream-0.5.tar.gz
前回展開したlog-j200用ドライバ内のパッチを当ててビルドします。
$ cd dvbstream-0.5
$ patch -p0 < ../logj200/dvbstream.patch
$ make
$ mkdir ~/project/oneseg/bin
$ cp dvbstream ../bin
これで dvbstream がビルドできます。最後にビルドしたバイナリを ~/project/oneseg/bin にコピーしています。
次にワンセグTSを再生可能な mplayer をビルドします。mplayerのビルドはまたまたぱぱネット(仮)さんのこの記事を参考にしました。
mplayerのソースと適用するパッチ類をダウンロードします。最新のmplayerではうまくパッチが当たらなかったので、少し古いMPlayer-1.0rc4.tar.bz2を使います。パッチはここからダウンロードします。
$ cd ~/project/oneseg/file
$ wget http://www.mplayerhq.hu/MPlayer/releases/MPlayer-1.0rc4.tar.bz2
$ wget http://jaist.dl.sourceforge.net/project/dus01withlibusb/dus-01withlibus/dus01withlibusb-0.009/dus01withlibusb-0.009.tgz
$ wget http://jaist.dl.sourceforge.net/project/dus01withlibusb/dus-01withlibus/dus01withlibusb-0.009/mplayer.ad_faad.c.patch
展開してパッチを当ててビルドします。
$ cd ~/project/oneseg
$ tar xf file/MPlayer-1.0rc4.tar.bz2
$ tar xf file/dus01withlibusb-0.009.tgz
$ cd MPlayer-1.0rc4
$ patch -p1 < ../dus01/mplayer1.0rc2_oneseg_.patch
$ patch -p1 < ../file/mplayer.ad_faad.c.patch
$ ./configure
$ make
$ cp mplayer ../bin
これもまた ~/project/oneseg/bin にコピーしています。
早速 TS ストリームを mplayer で再生してみます。
$ cd ~/project/oneseg/bin
$ ./dvbstream -c 0 -f 周波数 8192 -o | ./mplayer -
周波数は (チャンネル番号×6000+395143) で計算できます。チャンネル番号はこのページが参考になります。
例えば関東圏のフジテレビは 21 みたいなので、以下のようになります。
$ ./dvbstream -c 0 -f `expr 21 \* 6000 + 395143` 8192 -o | ./mplayer -
dvbstream v0.5 - (C) Dave Chapman 2001-2004
Released under the GPL.
Latest version available from http://www.linuxstb.org/
Using DVB card "MTV211"
tuning DVB-T (in United Kingdom) to 503143000 Hz
polling....
Getting frontend event
FE_STATUS:
polling....
Getting frontend event
FE_STATUS: FE_HAS_SIGNAL FE_HAS_LOCK FE_HAS_CARRIER FE_HAS_VITERBI FE_HAS_SYNC
Event: Frequency: 513743000
SymbolRate: 0
FEC_inner: 2
Bit error rate: 0
Signal strength: 0
SNR: 0
FE_STATUS: FE_HAS_SIGNAL FE_HAS_LOCK FE_HAS_CARRIER FE_HAS_VITERBI FE_HAS_SYNC
Setting filter for PID 8192
Output to stdout
Streaming 1 stream
バッファリングにしばらく時間がかかります。実行して15秒くらいすると再生されると思います。
mplayerでワンセグ再生
音声と画像がずれていて、このままでは視聴に耐えませんが、とりあえずワンセグTSを受信できることは確認できました。
本当はここでなかなか再生できず、 色々いじってみたんですが、最終的にはアンテナの位置が悪かったようで、アンテナを窓際に持っていったら再生できるようになりました。
受信できているのかどうかがよくわからなかったので、TSストリームを軽くパースして受信できているかをチェックするスクリプトを作ってしまいました。
うまく再生できない場合は、tscheck.pl.txt をダウンロードして、tscheck.plにリネームし、以下のように実行してみてください。
$ ./dvbstream -c 0 -f `expr 21 \* 6000 + 395143` 8192 -o | perl tscheck.pl
----省略----
TErr:0 PID:1fc8 5
TErr:0 PID:1fc8 6
TErr:0 PID:1fc8 7
TErr:0 PID:1fc8 8
TErr:0 PID:1fc8 9
TErr:0 PID:1fc8 a
TErr:0 PID:1fc8 b
TErr:0 PID:1fc8 c
TErr:0 PID:1fc8 d
TErr:0 PID:1fc8 e
TErr:0 PID:1fc8 f
TErr:0 PID:1fc8 0
TErr:0 PID:1fc8 1
TErr:0 PID:1fc8 2
上記のような行が、1秒に1〜2個の間隔で表示され、TErr が 0 で、最後の16進数値が 0〜f の間でループしていれば正しく受信できています。
TErrが 1 だったり、最後の数値が連続せず飛び飛びの場合は、アンテナの位置などを調整してください。
64bit kernel でもなんの問題もなくここまでこれました。先人達の偉業に感謝。
ただチューナの入手性の悪さのせいか、古い情報しかなく、情報やソースを集めるのに苦労しました。自分のメモも兼ねてこの記事を書いてます。
次回はTSストリームからmp4ファイルに変換してみようと思います。