2012/05/30

wavecastでepgrec構築 録画編

wavecastで、epgrecが動くようにはなったけど、使えるようにするには、いくつか工程を踏むことになったので、その辺を書き記しておきます。

do-record.sh 作成
録画処理は全部ここで行うということで、各モードに対応した録画、エンコード処理を記述していくわけですが、wavecastで行なっている処理を周到しようと思って、試行錯誤の末、以下のような感じになりました。
#!/bin/bash
echo "CHANNEL : $CHANNEL"
echo "DURATION: $DURATION"
echo "OUTPUT : $OUTPUT"
echo "TUNER : $TUNER"
echo "TYPE : $TYPE"
echo "MODE : $MODE"

REC=`echo $(tempfile)|sed s/^.*[/]//`

echo "RECORDING : $REC"

# Record
if [ "$DURATION" ]; then
/home/wave/bin/tsrec2 --b25 $CHANNEL $DURATION /tmp/${REC}.ts 0
fi

# MODE==0
if [ $MODE -eq 0 ]; then
mv /tmp/${REC}.ts $OUTPUT
fi

# HD-TS
if [ $MODE -ge 1 ]; then
/usr/bin/wine tssplit2 -SD2 -SD3 -1SEG -OUT /tmp -BUFF 64 /tmp/${REC}.ts
# MODE==1
if [ $MODE -eq 1 ]; then
mv /tmp/${REC}_HD.ts $OUTPUT
fi
fi

# MP4
if [ $MODE -ge 2 ]; then
/usr/bin/wine tsdemux2 -i 'Z:\tmp\'${REC}_HD.ts -o 'Z:\tmp\'$REC -encode "Demux(m2v+wav)" -sound 0 -nd -start -quit
# /usr/bin/wine bontsdemux -i 'Z:\tmp\'${REC}_HD.ts -o 'Z:\tmp\'$REC -encode "Demux(m2v+wav)" -sound 0 -nd -start -quit

/usr/local/bin/ffmpeg -y -i /tmp/${REC}.m2v -threads 4 -vcodec libx264 -fpre /home/wave/.ffmpeg/ibento7.ffpreset -b 1800k -s 960x540 -aspect 16:9 -an -f mp4 /tmp/${REC}.264

/usr/bin/sox /tmp/${REC}.wav /tmp/${REC}-d.wav delay 0.2 0.2

/usr/local/bin/ffmpeg -y -i /tmp/${REC}.264 -threads 4 -vcodec copy -i /tmp/${REC}-d.wav -acodec libfaac -ac 2 -ar 48000 -ab 128k -vsync 1 /tmp/${REC}.mp4

/usr/bin/MP4Box -ipod -inter 500 /tmp/${REC}.mp4 -out $OUTPUT

/home/wave/bin/copy-to-itunes $OUTPUT
fi

# Mobile
if [ $MODE -eq 3 ]; then
/home/wave/bin/ipod-m4v $OUTPUT
fi

# Cleanup first!
rm /tmp/${REC}*

  1. tsrec2で一旦/tmpに録画
  2. モード0:TSファイルをそのまま保存
  3. モード1:HDTSファイルを作成保存
  4. モード2:H264にエンコードして保存
  5. モード3:MPEG4に再エンコードして保存 
  6. ワーク用tmpファイル削除
って感じです。モードごとに独立してなくて、何処までやるかって処理になってます。

tssplit2とtsdemux2
この2つのアップリはWindowsアプリなので、wineで実行できるようにする必要があります。
/root/.wine/drive_c/windows/system32 からこの2つのexeを/home/wave/.wine/drive_c/windows/system32へコピーします。

ffmpeg
-vpre ibento7だと、/home/wave/.ffmpeg/ibento7.ffpreset があっても見に行ってくれないようなので、直接指定で -fpre /home/wave/.ffmpeg/ibento7 って書きました。

soxで微調整
wavecastのエンコード手順はそれなりにいいと思うんですが、録画したものを視聴してみていると、どうも若干音がずれている気がしまして sox を使用して微調整してみました。自分的には合うようになったなと思ってます。本気の人は、編集ソフトとかで絵と音波形を見比べてみるんでしょうけど、私はフィーリングが合えばいいんです。soxは入ってなかったので
$ sudo apt-get install sox
で入れます。

/home/wave/bin/copy-to-itunes $OUTPUT
以前にも書いたiTunesへ自動登録するスクリプトを実行しているところです。気にしないで。

/home/wave/bin/ipod-m4v $OUTPUT
以前にも書いた初代ipod-touchで再生するファイル作成スクリプトです。気にしないで。

この当たりはまだ思ったような結果にならないんですが、今ん処こんな感じですかね。
次回は視聴編です。

2012/05/28

wavecast-01にepgrec入れてみた

wavecastに epgrec 入れてみました。なかなかいい感じです。

必要な環境は既に入っているので、セットアップに必要な作業は少なくて済みました。
動かすまでにやったことを書き記しておきます。

pegrecサイトのインストール前準備を参考に、環境整備

以下の作業は全部waveユーザで行なっています。root絡みはsudoで実行です。

/root/task/epgdump を/usr/local/binにコピー/root/task/ffmpeg を/usr/local/bin にコピー
/root/task/tsrec2 を /home/wave/bin にコピー (中身はrecfsusb2nのようです)
全部/usr/local/binでもいいけど、terec2はデバイス依存ツールなので分けました。

/etc/at.deny/www-dataを削除とあるが、wavecastでは、apacheがwaveユーザで動いているので削除せず。逆に、waveユーザでatが実行できるように、/etc/at.allowにwaveを追加。

/root以下は一般ユーザからはアクセス出来ないようになっているので、
sudoで実行するか、一度パーミッションをゆるゆるにしてから行う感じでしょうか。
自分は後者でした。作業後はパーミッションを元に戻しておきましょう。

epgrecインストール

pegrec-2010322.tar.gz をダウンロードして、/home/wave/epgrec に展開する
$ sudo ln -s /opt/lampp/htdocs/epgrec /home/wave/epgrec
で、/epgrecでWEBアクセスできるようにする。

以下のサブディレクトリのパーミッションを設定する
$ sudo chmod 777 cache template_c video thumbs settings
config.php.sample => config.php にコピーして受信可能なチャンネルだけにする。
do_record.sh.sample をひな形に適当に do_record.sh を作成する。
テスト中の録画コマンドは、
/home/wave/bin/tsrec2 --b25 $CHANNEL $DURATION $OUTPUT 0
だけでいいんじゃないかな。
$ CHANNEL=27 DURATION=10 OUTPUT=/home/wave/epgrec/video/TEST.ts do_record.sh
ってやって録画されることを確認する。

epgrecセットアップ

http://(wave-cast-url)/epgrec へアクセス。WEBベースのセットアップが始まる。
  • step1
    • ディレクトリパーミッションチェック。OK。
  • step2
    • MySQLデータベースを新たに作るのは面倒なので既存のものを設定
    • ここに直接書くのはいかがなものかと思うので・・・
    • /root/task/vidchlget3.py などを参照して、MySQLdb.connect()のところから、user,passwd,dbを設定する
    • その他、保存先、プログラムパスなどを適当に設定
  • step3
    • チューナ設定。適当に設定。
  • step4
    • 確認ページ。間違ってなければ次へ
  • step5
    • EPG初回番組表取得 getepg.phpが実行される


getepg.php 失敗

ここまで順調だったが、ここでつまずいた。スクリプトがphpを /usr/bin/php にあると期待しているが、wavecastは、xamppでセットアップされているので /opt/lampp/以下に入っている。
$ sudo ln -s /opt/lampp/bin/php /usr/bin/php
でリンクして実行できるようにした。

phpスクリプト内のパスを/opt/lampp/bin/php に変更してみたが、セグメントフォールトになった。
php5をインストールして実行してみたが、(多分mysqlの設定絡みで)正常に動かなかった。
このような対処は後々面倒なのでやめよう。

これでEPGRECのWEBページが出ました。

cronの設定

最後に、ドキュメント通りの手順で、epgrec/cron.d/getepg 内の記述を
0 5 * * *   wave        /home/wave/epgrec/getepg.php
に書き換えて/etc/cron.dにコピー。getepg.phpをwaveユーザ権限で毎日5時に実行ってこと。

稼働!

一応、これだけで最低限の動作は確認出来ました。epgrec いいですね。感謝!
次回は、実際の運用で色々手を加えたことを書いてみようと思います。

2012/05/26

wavecast-01 省力化とか#2

省力化(無駄を省く)第2弾

gdm+X+Gnomeを殺し、CUI環境にする

自分も最初はRun Levelを操作すればいいんだよねって思って調べていったら、UbuntuのRunLevel操作でgdmなしにするのって何やらGRUBの設定を編集して update-grub
するってことらしいのだ。で、いろんな記事で書いてある通り編集してみてから
$ sudo update-grub
ってやったら、なんと、Illegal instructionってエラーになるじゃないですか。
編集内容元に戻してもおんなじ。なんで〜?

ということで、さっさとその方法をあきらめて、いいのを見つけました。

Disable GDM at System Boot (Ubuntu 10.10 Maverick)
ここに大変シンプルに解決する方法が!
自分も立ち上げようとしているところを全部コメントアウトしちゃえばいいんじゃね?
って思っていたので、このソリューションはとっても自分向きで好きです。

英語ページですが、簡単に日本語にすると
/etc/init/gdm.confの中で
    start on (filesystem
    and started dbus                                                                                                      
    and (drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1
    or stopped udevtrigger))                    
というところを
    #start on (filesystem
    #          and started dubs
    #          and (drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1
    #               or stopped udevtrigger))
ってコメントアウト。こんだけ。

起動時にubuntuのスプラッシュは出ちゃうんだけど、XorgやらGnomeやらが起動せず
懐かしのコンソールプロンプトが出て、きれいにCUI環境になりました。
稼働プロセスが約220 => 145に減って、消費メモリも560MB=>330MBに減りました。
(リブート直後調べ)

VNCサーバーどうしようかな

上記の設定でもvnc-server(vino-server)がデーモン起動してるんで、外からVNC接続すると勝手にGnomeが立ち上がってリモートデスクトップが出来る。というか出来てしまう。
これも無駄と言えば無駄なんで、オフにしておこうかなと思って、
sysv-rc-confをインストールしてデーモン起動設定しようとしたら、そのリストの中にvino-serverが見当たらない。違う名前なのかな?よくわからないんで、普通に
デスクトップのシステムメニューから設定ー>自動起動するアプリケーションを選んで
リモートデスクトップのチェックを外す。

これで次回から起動しない事は確認したけど、たまに使いたいときがあるかも?と
結局今のところ、VNCサーバーは生かす事にしました。

そうそう、私のPC環境はiMacなので「サーバーに接続」でvnc://。。。ってやると本来はVNC接続が出来るんだけど暗号化を切れないのでWavecastには使えない。
(まあ色々設定直せば使えるように出来るんだろうけど)
なので、Chiken of the VNCを使用しています。これが一番らくちんですね。