2015/07/07

epgdump と ffmpeg + x264 + aac 再び

2年前にやったことだけれど Shuttle でも同じように使いたいので、
まずは標準的なセットアップをしておく。

epgdump

系統が幾つかあるようなのだが、json使いたいんで、こっちを使ってみる
$ git clone https://github.com/Piro77/epgdump.git

cmakeいるらしい
$ sudo apt-get install cmake

ビルド
$ cd epgdump
$ cmake .
$ make

xml,json,csv共にやってみた。良好である。

ffmpeg

こっちは後で手を加えていきたいところだけど、今は標準的なビルドをしておく

参考。英文だけど、情報に無駄がない
https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu

取得
$ git clone https://github.com/FFmpeg/FFmpeg.git

必要最低限のライブラリインストール
$ sudo apt-get install yasm libx264-dev libfaac-dev
yasm入れておかないとcpuエンコ速くなりません。

コンフィグ実行
./configure \
  --enable-gpl \
  --enable-libfaac \
  --enable-libx264 \
  --enable-nonfree

ビルド & インストール
$ make
$ sudo make install
/usr/local/binにffmpeg,ffprobe,ffserverが。その他/usr/local/に開発用ファイルが入る。

テスト
$ recfsusb2n -b -i hd 21 30 test.ts
$ ffmpeg -y -i test.ts -c:v libx264 -c:a libfaac -preset superfast -f mp4 -threads 0 test.mp4

はい。滞りなく。

qsv対応?
nvencのIntelCPU版みたいなやつの組み込みで高速化とかもいずれ。


さあ、ここから新しい録画システム作りの始まりです。

recfsusb2n --http と リモートVLC再生

$ recfsusb2n -b -H 8888
でデーモン起動して、愛機iMacのVLCから’http://shuttle:8888/27'とかで再生されるはず。
と思ったけど若干手を加える必要があった。

VLCでアクセスした時に、recfsusb2n内の'gethostbyaddr'関数でコケてしまい
デーモンが終了してしまう。

fsusb2n.cpp内の問題箇所をざっくりコメントアウト
#if 0
                        peer_host = gethostbyaddr((char *)&peer_sin.sin_addr.s_addr, sizeof(peer_saain.sin_addr), AF_INET);
                        if ( peer_host == NULL ){
fprintf(stderr, "gethostbyname failed\n");
                                exit(1);
                        }

                        fprintf(stderr,"connect from: %s [%s] port %d\n", peer_host->h_name, inet_ntoa(peer_sin.sin_addr), ntohs(peer_sin.sin_port));
#endif
どこからアクセスされたかを表示したいだけの箇所らしいので、特に不要。

この修正を加えたrecfsusb2nを再度ビルドして、デーモン起動して、他のPCからのVLCアクセスで無事再生されました。

よかった〜

VLCのネットワークストリーム再生で、http:://shuttle:8888/24とかで綺麗に再生される。
iPadのVLCやVLC for Android、VLC for Fireでも綺麗に再生された。
それ以外の亜流品はダメだった。

2015/07/03

recfsusb2n 再び

ShuttleDS57Uで録画環境も復活させよう。
2年ぶりの再構築だけれど一度やったことだからスムースか?と思ったら、色々世の中が変化したようで・・・
 
色々コンパイルとかしないとならないので開発ツール一式インストールします
$ sudo apt-get update
$ sudo apt-get install build-essential

手持ちの KTV-FSUSB2 をShuttleで使えるようにするために recfsusb2n を再度入手。
いつの間にかGitHubに置かれたのね。

 $ git clone https://github.com/sh0/recfsusb2n.git

むむ。Makefileがない。

http://d.hatena.ne.jp/katauna/searchdiary?word=*[recfsusb2n]
こんな感じで探して、 recfsusb2n_http_patch2.zip を入手。こっちにMakefileがある。
っていうか http ストリーム配信が出来るようにするパッチでもある。
後でこの機能使おうっと

ブラウザからじゃないとダウンロード出来なかったので、Shuttleにはscpで移す。手順が微妙・・
後は
http://arkouji.cocolog-nifty.com/blog/2015/01/raspberry-piktv.html とか
http://www.lisa.jp/index.php/Epgrec を参考に

ざっとこんな感じかな

$ unzip recfsusb2n_http_patch2.zip -d recfsusb2n/src

$ cd recfsusb2n/src
Makefileを
 LIBS    = -lpthread -lboost_system -lboost_thread -lboost_filesystem
 #LIBS   = -lpthread -lboost_thread-mt -lboost_filesystem
に変更。
他にも色々変更する記事を拝見しますが、自分は必要最小限のこれだけにした。
そもそも何でこれやらなくちゃいけないかというと、ubuntuのパッケージにboost_thread-mtが無いからですな。

boostライブラリはでかいんで必要なやつだけ入れる

$ sudo apt-get install libboost-thread-dev libboost-filesystem-dev
・・・ってやっても結局
$ sudo apt-get install libboost-dev
ってやったのと同じだけ入ってしまうな。しょうがない。

$ make
何か色々ワーニングは出るけど、無事ビルド完了。