Fedoraでテレビ録画
Windowsで処理済みKTV-FSPCIEの動作確認もできたので、ぼちぼち録画サーバーの準備でもはじめようかなと思います。
環境はFedora15 x64にKTV-FSPCIE(処理済)
recfsusb2n for linux?を参考にインストールする。
ユーザーとグループの作成
video グループを作成する。
1 | # groupadd video |
作った ?video グループにデバイスを使用するユーザーを追加する。
1 | # gpasswd -a foo_user video |
パーミッションルールの追加
fedoraで実績がうんぬん書いてあるのに、Ubuntuの場合しか書いてない…。
ちょろっと調べてfedora用にする
1 2 3 4 5 6 | #?vi /etc/udev/rules.d/89-tuner.rules
# FSUSB2N
#kernel-2.6.41.1-1から参考元と同じになる。
#BUS=="usb" SYSFS{idVendor}=="0511", SYSFS{idProduct}=="0029", MODE="0666", GROUP="video"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="0511", ATTRS{idProduct}=="0029", MODE="0664", GROUP="video" |
再起動ついでにデバイスを取り付ける。
デバイスの確認
1 2 | # lsusb -d 0511: Bus 002 Device 002: ID 0511:0029 N'Able (DataBook) Technologies, Inc. |
こんな感じに表示されればOK!
ライブラリのインストール
boostライブラリが必要なのでインストール(g++とかは入ってるんじゃなかろうか?)
1 | # yum install -y boost-devel |
ソースのダウンロード&コンパイル
1 2 3 4 5 6 7 8 9 10 11 | # wget http://tri.dw.land.to/fsusb2n/recfsusb2n-0.9.2.tar.gz # tar zxvf recfsusb2n-0.9.2.tar.gz # cd FSUSB2N # make g++ -g -Wall -pthread -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DB25 -c -o fsusb2n.o fsusb2n.cpp g++ -g -Wall -pthread -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DB25 -c -o usbops.o usbops.cpp g++ -g -Wall -pthread -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DB25 -c -o em2874-core.o em2874-core.cpp em2874-core.cpp: 静的メンバ関数 ‘static EM2874Device* EM2874Device::AllocDevice()’ 内: em2874-core.cpp:126:37: エラー: ‘class boost::filesystem3::directory_entry’ has no member named ‘string’ em2874-core.cpp:128:47: エラー: ‘class boost::filesystem3::directory_entry’ has no member named ‘string’ make: *** [em2874-core.o] エラー 1 |
エラーが…
boostのバージョンが悪いのか。
em2874-core.cppの126行目と128行目のstring()の前にpath().を追加する 。
1 2 3 4 5 6 7 8 9 10 11 | // バスに繋がっているデバイスでループ if (!boost::filesystem::is_directory(*dev_iter)) { // 開く // if (pDev->openDevice(dev_iter->string().c_str())) { if (pDev->openDevice(dev_iter->path().string().c_str())) { isFound = true; // if(log) *log << "device: " << dev_iter->string() << std::endl; if(log) *log << "device: " << dev_iter->path().string() << std::endl; break; } } |
もう一度make
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # make g++ -g -Wall -pthread -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DB25 -c -o em2874-core.o em2874-core.cpp g++ -g -Wall -pthread -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DB25 -c -o ktv.o ktv.cpp g++ -g -Wall -pthread -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DB25 -c -o IoThread.o IoThread.cpp g++ -g -Wall -pthread -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DB25 -c -o B25Decoder.o B25Decoder.cpp cc -c -o arib25/arib_std_b25.o arib25/arib_std_b25.c cc -c -o arib25/b_cas_card.o arib25/b_cas_card.c cc -c -o arib25/multi2.o arib25/multi2.c cc -c -o arib25/ts_section_parser.o arib25/ts_section_parser.c g++ -o recfsusb2n fsusb2n.o usbops.o em2874-core.o ktv.o IoThread.o B25Decoder.o ./arib25/arib_std_b25.o ./arib25/b_cas_card.o ./arib25/multi2.o ./arib25/ts_section_parser.o -lpthread -lboost_thread-mt -lboost_filesystem /usr/bin/ld: em2874-core.o: undefined reference to symbol 'boost::system::system_category()' /usr/bin/ld: note: 'boost::system::system_category()' is defined in DSO /usr/lib64/libboost_system.so.1.46.0 so try adding it to the linker command line /usr/lib64/libboost_system.so.1.46.0: could not read symbols: Invalid operation collect2: ld 1 |
また、エラーが…
libboost_systemがリンクできてないっぽい。
入れたはずなのにどうしたものかと、Makefileを見てみるとLIBSが2つあって片方コメントになってる。
1 2 | #LIBS = -lpthread -lboost_system -lboost_thread-mt -lboost_filesystem LIBS = -lpthread -lboost_thread-mt -lboost_filesystem |
これは、コメントになってるほうが正解じゃないのか?
というわけで、上のLIBSを有効にする。
1 2 | # make g++ -o recfsusb2n fsusb2n.o usbops.o em2874-core.o ktv.o IoThread.o B25Decoder.o ./arib25/arib_std_b25.o ./arib25/b_cas_card.o ./arib25/multi2.o ./arib25/ts_section_parser.o -lpthread -lboost_system -lboost_thread-mt -lboost_filesystem |
どうやら、完成したみたい。
動作確認
1 2 3 4 5 6 7 8 9 10 11 | # ./recfsusb2n -bv 27 40 test.ts recfsusb2n ver. 0.9.2 ISDB-T DTV Tuner FSUSB2N device: /dev/bus/usb/002/002 B25Decoder initialized. Sequence = 9, Quality = 65.02, 3080004bytes wrote. Sequence = 9, Quality = 65.26, 2064428bytes wrote. Sequence = 9, Quality = 65.5, 2146396bytes wrote. (略) done. Rec time: 41 sec. |
usage: recfsusb2n [--b25] [-v] channel recsec destfile
実際に動かすときはオプションの v は要らないみたいだね。
ソース見た感じだと 25 も要らないんじゃなかろうか?
最後にパスの通った所に置いて完了!
1 | # cp recfsusb2n /usr/local/bin/ |
問題点の解消
録画ファイルをWindowsで見てみると、フレーム幅320 フレーム高180とかいう感じになっている。
ちゃんとTVtestで見れるし編集も出来るので問題はなさそうだけど、メディアプレーヤーとかPS3だと見れない。
というかPS3フリーズするし。
原因としてはTSファイルの先頭部分。
録画開始してから安定するまでの部分が良くないみたい。
recfsusb2nで初期のストリームを捨ててみる – looselife diary
上記のサイトのパッチを当てると、フレーム幅高1440×1080になってPS3で見れるようになった。
![]() | アースソフト PT2 アースソフト 売り上げランキング : 2666 Amazonで詳しく見る by G-Tools |


205StudioTR