2015/07/08

rvm + rails4 でサーバーアプリ開発環境

いつもの流れではあるので特出すべきことはないですが・・・
Shuttleで録画システム再開発ということで、前回の反省点を踏まえながら進めていく。

まずは、rvmとrails4.2 railsは仕事では3までしか使ってないんで4は自分的に初!

rvm

$ sudo apt-get intall curl

-- ここからは全部自分環境なので sudo じゃないよ --

$ curl -sSL https://rvm.io/mpapis.asc | gpg --import -
$ curl -sSL https://get.rvm.io | bash -s stable
$ source /home/shuttle/.rvm/scripts/rvm ← shuttleというユーザ名でやってます
$ rvm list known ←選択可能なrubyバージョンを確認
$ rvm install ruby-2.2.1 --default
↑
これが長いんだ・・・暫し待つ。
この時点で gemとgem基本パッケージが入っている

rails4.2

$ gem i rails --no-ri --no-doc
↑
これも長いよねぇ・・・


アプリ作成

$ rails new recman ←という名のアプリ作成
$ cd recman
$ bundle install
$ rails s

とりあえずWebrickでHTTPサーバー起動するかな?

あぁ、そうだった。developmentでWebrick起動するためには、'therubyracer'が必要でした。
Gemfileに、gem 'therubyracer' を追記。

もう一度
$ bundle install
$ rails s

別のPCから、http:://shuttle:3000/ へアクセス。およ?アクセス出来ない・・・?

最初は、ufw とか考えたけれど、いやいやEnforceしてないし・・・結局調べたら
何と rack version 1.6から仕様が変わったらしく、デフォルトが http://localhost:3000 となるらしい。
要するに自分自身以外からのアクセスが出来ないと。

これだと困るので

$ rails s -b 0.0.0.0

ってやると、どこからでもアクセスできるようになる。むぅ、ちょっとめんどくさいな。
rails4.2環境は初めてなので、こんなところでも引っかかってしまう。

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でも綺麗に再生された。
それ以外の亜流品はダメだった。