siano製チューナーでLinuxワンセグ野郎!!

ーーーーーーー7/20追記 ーーーーーーー

注意!このエントリ内にあるワンセグチューナーは現在ではモデルチェンジしているらしく、中身はsiano製ではなくなってしまいました!

RTL社製のいわゆる蟹チップで、Linux はもちろん、Windows環境でもワンセグ野郎は実現できません!!!

ーーーーーーー7/20追記 ーーーーーーー

さて、LOG-J200 で一通りワンセグ録画から mp4 変換までできるようになりました。

で、なぜ今更古いチューナー使ってワンセグ録画なのかというと、Linux限定ながら、最近新たにワンセグ録画できるチューナが見つかったそうなのです!! そのチューナが届くまでの予行練習というわけです。

動作報告があったチューナーは siano社というチップメーカを使用した CVOC-E121 という製品です。

CVOC-E121 (LinuxTV Wikiより)
CVOC-E121 (LinuxTV Wikiより)

これ用の Linux ドライバが公開されています。元々はブラジル向けのワンセグドライバだったようですが、日本でもそのまま使えるそうです。まとめサイトまで作られています。

この CVOC-E121 は早くも入手困難ですが、同じチップを使った別の製品を見つけた方がいます!
それがこれ!


ISDB-T Digital TV Receiver USB Dongle with IR Remote Controller + Antenna

DealExtreameという海外の通販サイトで送料無料で購入できます。しかも格安の$17.76でした。

とりあえず使えるか分からないので 1 つだけ買ってみました。

届いたやつがこれ

届きました
ワンセグチューナー届きました

ブログに書こうと思い、型番やメーカーを探したんですが、わかりませんでした・・・。中国製のDigital TV-Stick ということしかわかりません。

とりあえず動作確認しようとWindowsにドライバとアプリをインストールしたんですが・・・・シリアルキーがありません(え?)

CDのケースに貼られていると書かれているんですが、そんなものありませんでした。

シリアルキーは・・・・?
シリアルキーは・・・・?

私が買ったやつがたまたまそうだっただけかもしれないですが、Windowsで使用することを考えて買う場合はお気を付け下さい。たまたま Linux 用に買ったんで助かりましたが・・・。

動作確認もできないまま不安な気持ちで Linux でまとめサイトを参考にドライバをビルドしてみたところ・・・・・

使えましたー!!

迷わずチャンネル数分買ってしまいました。これで夢の24時間ワンセグ野郎が実現できるかも!!

ーーーーーーー7/20追記 ーーーーーーー

現在ではモデルチェンジしているらしく、中身はsiano製ではなくなってしまいました!

RTL社製のいわゆる蟹チップで、Linux はもちろん、Windows環境でもワンセグ野郎は実現できません!!!

ーーーーーーー7/20追記 ーーーーーーー 

 

・・・と買ってから思ったんですが、もしかしたらこっちでも使えるかもしれません。


USB DVB-T TV Dongle with Remote

これは1つで$12.75。付属品が全く同じに見えるのと、LED、リモコン受光部の位置も全く同じなのでOEMで中身的には同じかなと・・・・。保証はできないですが。

ーーーーーーー7/20追記 ーーーーーーー

こちらもすくなくとも今買えるのはRTL社製のチップらしいです。ご注意を!!

ーーーーーーー7/20追記 ーーーーーーー 

これが使えると、ワンセグ野郎用に8ch分揃えてバルクレート適用すれば$100に収まりますね。

1個くらい買って試したいですが、既にこっちを8ch分(約$130)注文してしまったのでちょっとお金が・・・。

届くのが楽しみです。

Linuxでワンセグ録画 その4 (TSストリームをMP4ファイルに変換)

前回の続きです。今回はTSストリームから .mp4 へ変換します。

変換するには、TSConverterを使います。TSConverter は元々 Windows のコマンドプロンプト用のソフトですが、Rubber Duckie さんのところで UNIX 系で動かすためのパッチを公開しています。

パッチはここからダウンロードできます。Rubber Duckieさんの2009/5/252009/9/22010/3/4のブログを参考にパッチを当てていきます。

また、Linux では一部ビルドできない部分があったので、簡単なパッチ(TSConverter-linux.patch)を作りました。Rubber Duckieさんの2010/3/4で書かれているバグ修正も入っています。

あと、DtsEdit, MP4Box のフルパスを指定していて、環境変数で変えられるようになっているのですが、勝手に $PATH から探してもらった方が楽なので、フルパス指定を無くしてます。

$ cd ~/project/oneseg/file
$ wget http://theremin.hostoi.com/file/TSConverter_9_01.zip
$ wget http://rduck.web.fc2.com/TSConverter_4_26_patch.tar.bz2
$ wget https://petit-noise.net/system/files/TSConverter-linux.patch
$ cd ..
$ unzip file/TSConverter_9_01.zip
$ cd TSConverter
$ unzip Source.zip
$ tar xf ../file/TSConverter_4_26_patch.tar.bz2
$ cd Source
$ nkf -e -Lu TSConverter.cpp > TSConverter.c
$ mv TSConverter.h TSConverter.h.dos
$ nkf -Lu TSConverter.h.dos > TSConverter.h
$ patch -p1 < ../TSConverter090426.patch
$ patch -p0 < ../../file/TSConverter-linux.patch
$ gcc -o TSConverter TSConverter.c
$ cp TSConverter ~/project/oneseg/bin

 

これで TSConverter はビルドできるのですが、TSConverter は内部で DtsEdit と MP4Box というコマンドを使っていますので、これらもビルドする必要があります。

mp4box は gpac というプロジェクトの一部?らしく、以下でダウンロードできます。

  • http://gpac.wp.institut-telecom.fr/

ただ、ソースのtarballが無いみたいなので、svn checkout して取り出します。

$ cd ~/project/oneseg/
$ svn co https://gpac.svn.sourceforge.net/svnroot/gpac/trunk/gpac

私が checkout したときは r3247 でした。

そのままビルドすると、mp4box コマンドが libgpac.so を必要とするので、単体で実行可能なように libgpac をリンクするように configure します。

$ cd gpac
$ ./configure --static-mp4box
$ make -j5
$ cp bin/gcc/MP4Box ~/project/oneseg/bin

最後のコマンドでバイナリを ~/project/oneseg/bin にコピーしてます。

 

最後は DtsEdit です。

DtsEdit は TSConverter 同様、元々 Windows 用だったのですが、TSConverter同様 Rubber Duckie さんとこで UNIX 系への移植が行われています。

DtsEdit の開発者のサイトはすでに無くなっており、ソースコードを探し回ったところ、sourceforge プロジェクトのrec10の中に取り込まれている事が分かりました。(探すのに苦労しました・・・)

ただし、リリースされている tarball には DtsEdit が含まれていないので、こちらも svn リポジトリから直接 checkout します。

$ cd ~/project/oneseg/
$ svn checkout http://svn.sourceforge.jp/svnroot/rec10/tstools/DtsEdit

私が checkout したときは r862 でした。

Rubber Duckieさんによるパッチはここからダウンロードできます。

$ cd ~/project/oneseg/file
$ wget http://rduck.web.fc2.com/DtsEdit_20081009_patch.tar.bz2
$ cd ../DtsEdit
$ mkdir patch
$ cd patch
$ tar xf ../../file/DtsEdit_20081009_patch.tar.bz2
$ cd ..
$ for file in src/{*.cpp,*.h}; do echo $file; nkf -wd $file > $file.tmp; mv $file.tmp $file; done
$ cd src
$ nkf -w ../patch/DtsEdit.patch | patch -p1
$ rm stdint.h

このままビルドすると、libgpac.so が無いと言われてビルドに失敗するので、前でビルドした libgpac_static.a をスタティックリンクしてしまいましょう。

Makefile を以下のように変更します。

DtsEdit: $(OBJS)
#    $(CPP) -o $@ $(OBJS) -lgpac -L/usr/local/lib
    $(CPP) -o $@ $(OBJS) ../../gpac/bin/gcc/libgpac_static.a -lz -L/usr/local/lib

乱暴にパス指定してリンクしてしまいます。gpacのディレクトリは適当に変更してください。

これで DtsEdit がビルドできます。

$ make
$ cp DtsEdit ~/project/oneseg/bin

長かったですが、これでようやく TSConverter が使えるようになります。

色々ビルドしましたが、~/project/oneseg/bin の下は以下のような感じになっていると思います。

$ ls ~/project/oneseg/bin/
DtsEdit  MP4Box  TSConverter  dvbstream  mplayer

ここにパスを通して、以下のようにTSストリームをダウンロードし、mp4ファイルに変換できます。

$ export PATH=~/project/oneseg/bin:$PATH
$ dvbstream -c 0 -f `expr 21 \* 6000 + 395143` 8192 -o > test.ts
-----省略------
^CCaught signal 2 - closing cleanly.
$
$
$ TSConverter test.ts
AVC-H264 import - frame size 320 x 180 at 14.985 FPS
AVC Import results: 190 samples - Slices: 8 I 182 P 0 B - 190 SEI - 8 IDR
AAC import  - sample rate 24000 - MPEG-4 audio - 2 channels
Saving /home/tomo/project/oneseg/test.mp4: 0.500 secs Interleaving
$

これで test.mp4 が生成されます。あとは適当なプレイヤーで再生するだけです。

試しに zaurus の mplayer (attyさん作) で再生させてみたところ、映像のデコードが間に合わないみたいですね。H264のデコードは zaurus では QVGA サイズでも厳しいようです。

Android携帯のHTC Desire (X06HTII) で再生してみたらちゃんと再生できました。これで通勤中に録画したワンセグを見ることができそうです。

長いくせに興味ない人にはつまらないエントリですいません ^^;

Linuxでワンセグ録画 その3 (dvbsteram, mplayerのビルド&視聴)

続きです。

前回まででドライバのビルドが完了し、ドライバのロード、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でワンセグ再生
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ファイルに変換してみようと思います。

Linuxでワンセグ録画 その2 (LOG-J200用ドライバのビルド)

前回の続きです。

さて、高値で買ったLOG-J200ですが、Linux のドライバがぱぱネット(仮)さんによって開発されています。これを Ubuntu 11.04 (linux-2.6.38 64bit)の環境で動かそうと思います。

64bitというのがクセモノっぽそうな気がしますが・・・まぁ、やるだけやってみましょう。

ぱぱネット(仮)さんのこのページから kernel-2.6.26 用 LOG-J200ドライバ(パッチ)をダウンロードできます。(logj200_linux_20090126.tar.gz)

ただ、このドライバはUOT-100用のドライバに対するパッチなので、pu2008さん作のUOT-100のドライバ(uot100-0.1.tar.gz)も必要です。README には最低限の事しか書いていないので、Wiki上の説明とlogj200_linux_20090126.tar.gz内の readme.txt を参考にパッチを当てていきます。

まずは ubuntu で使われている kernel をダウンロードします。

$ sudo apt-get install linux-source-2.6.38

あ、gcc など、kernelのビルドに必要なパッケージはあらかじめ入れておいてください。

適当な作業ディレクトリを作り、その下に kernel を展開します。私は ~/project/oneseg で作業することにしました。

$ mkdir -p ~/project/oneseg
$ cd ~/project/oneseg
$ tar xf  /usr/src/linux-source-2.6.38.tar.bz2

UOT-100のドライバとLOG-J200のドライバを ~/project/oneseg/file にダウンロードして展開します。

$ cd ~/project/oneseg
$ mkdir file
$ cd file
$ wget http://linux.papa.to/image/logj200_linux_20090126.tar.gz
$ wget http://jaist.dl.sourceforge.jp/uot100/29431/uot100-0.1.tar.gz
$ cd ..
$ tar xf file/logj200_linux_20090126.tar.gz
$ tar xf file/uot100-0.1.tar.gz

UOT100のドライバにLOG-J200用のパッチを当てます。

$ cd uot100-0.1/dvb-usb
$ patch -p0 <../../logj200/uot100-logj200.0.3.patch

パッチを当てたLOG-J200のドライバを linux kernel へコピーし、Makefileに追加します。

$ cd ~/project/oneseg/linux-source-2.6.28/drivers/media/dvb/
$ cp ~/project/oneseg/uot100-0.1/dvb-usb/* dvb-usb/
$ cp ~/project/oneseg/uot100-0.1/frontends/* frontends/
$ echo dvb-usb-uot100-objs = uot100.o >> dvb-usb/Makefile
$ echo obj-m += dvb-usb-uot100.o >> dvb-usb/Makefile
$ echo obj-m += mtv211.o >> frontends/Makefile

パッチ形式になってないので少し面倒ですね。たぶんカーネルバージョンによらず適用できるようにしたためだと思います。

さて、カーネルツリーにドライバを組み込めたのでUbuntu の config を読み込ませてビルドします。

$ cd ~/project/oneseg/linux-source-2.6.28/
$ cp /boot/config-2.6.38-8-generic .config
$ make ARCH=x86_64 oldconfig
$ make ARCH=x86_64 bzImage -j5
$ make ARCH=x86_64 M=`pwd`/drivers/media/dvb modules

make bzImage は時間がかかります。 -j オプションはCPUの数に応じてお好みで変更してください。

LOG-J200のドライバは kernel-2.6.26用だったんですが、kernel-2.6.38 でも特にエラーも出ずにビルドできました。

logj200のドライバの readme.txt では deb パッケージ作ってインストールしていますが、実験レベルなので、debパッケージまでにはせず、個別に insmod することにします。

以下のコマンドでドライバをロードします。

$ sudo modprobe dvb-usb
$ sudo insmod ./drivers/media/dvb/dvb-usb/dvb-usb-uot100.ko
$ sudo insmod ./drivers/media/dvb/frontends/mtv211.ko

これでドライバのロードが完了。LOG-J200をUSBポートに挿して、認識されているかログを確認します。

$ dmesg | tail
.....省略.....
[29046.439076] usb 2-1.1: new full speed USB device using ehci_hcd and address 9
[29046.552054] dvb-usb: found a 'LOGFARM LOG-J200' in warm state.
[29046.552130] dvb-usb: will use the device's hardware PID filter (table count: 16).
[29046.552456] DVB: registering new adapter (LOGFARM LOG-J200)
[29050.956459] DVB: registering adapter 0 frontend 70998304 (MTV211)...
[29050.957307] dvb-usb: LOGFARM LOG-J200 successfully initialized and connected.

こんな感じでログが出ていればOKです。

今日はここまで。次回は dvbstream を使ってワンセグTSを抜き出します。

Linuxでワンセグ録画 その1

約半年ぶりの投稿になります。まだ見てくれている人はいるのでしょうか?

またまた中途半端な状態で放置してしまってすいませんでした。

半年の間に色々ありました。なんと言っても東日本大震災です。幸い私も家族も実家も、身近な人はみな無事でしたが、都内勤務だったため当日は帰宅困難になったり、しばらく物が買えなくなったり色々大変でした。

勢いで作った radiko player も東日本大震災をきっかけに、エリア制限解除と称して(?)認証が入るようになってしまって、使えなくなってしまいました。

radiko 録音対応もそれまでほそぼそとやっていたのですが、もろくも打ち砕かれてしまいました。

某掲示板では radiko player のソースを独自に改造して今でも使える player を開発している人もいるようですが、認証を行うには法律的に危険な事をしないといけないため、私には手が出せません。

簡単に言うと、著作権で保護された画像を認証のキーにしており、その画像には、「この画像を無断で使用すると著作権侵害として法的措置を取る」といった趣旨の内容が書かれています。個人的には、著作物の個人利用は著作権侵害には当たらないような気もするのですが、法律に明るくないので手出しはできません。

ということで、radiko player は今後再リリースすることはないと思います。radiko にも規制が入ってしまって残念です。

 

さて、戯言はこれくらいにして、今回のお題はワンセグです。今回は zaurus とは全く関係ない話題です。

ちょっと昔に「24時間ワンセグ野郎」というのが注目されたのをご存知でしょうか?

「携帯動画変換君」で有名なMobileHackerzさんが作った、24時間全chのワンセグを録画して、見逃したテレビも振り返って見ることができるという、テレビっ子(表現が古いな・・・)には夢のようなシステムです。

最近 REGZA の CM で「30時間6つのチャンネルを遡って再生」と謳ってる「タイムマシンシフト」のような機能を、ワンセグながらすでに2008年には個人で実現していたんですからすごいですよね。

24時間ワンセグ野郎は Windows でのシステムだったんですが、その後 Linux や BSD 用のドライバを書く人も現れて、今では Linux でもワンセグ野郎の環境が構築できるようです。

で、いまさらながら私も Linux でのワンセグ録画を試してみました。

ただ、Linuxでワンセグ録画ができるチューナーはかなり限られていて、ワンセグ野郎に対応しているチューナーは今ではほとんど入手困難です。たまにオークションで売りだされていますが、すごく高価なので8ch分揃えるにはお金と時間がかかりすぎます。

24時間録画しなくても、とりあえず予約録画出来て通勤時間に見れればそれでいいかなと思って1個だけ買ってみました。

LOG-J200 買いました
LOG-J200 買いました

買ったのはPCTV-hiwasa miniです。LOG-J200という型番のほうが有名かもしれません。

確かオークションで5,000円くらいしました。最近のワンセグチューナーは安いやつで1,000円台という事を考えると相当高いです。それだけ希少価値があるということでしょう。

こいつを使って Ubnutu 11.04 の環境でワンセグ録画にチャレンジしようと思います。

長くなったので今日はここまで。