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アースソフト PT2

アースソフト
売り上げランキング : 2666

Amazonで詳しく見る
by G-Tools

コメント/トラックバック

この記事へのコメント/トラックバックはありません。

コメントする

(管理人にのみ公開されます)

上へ参ります。