PandaboardにUbuntu+地デジサーバを(地デジサーバソフト編)

==準備==
* Monster TV HDUS
* NTT-ME SCR3310-NTTCom

HDUS については旧型と新型があるらしい。
[http://www26.atwiki.jp/hdus/pages/20.html MonsterTV HDUS @ ウィキ – MonsterTV HDUS 新・旧比較] によれば、こちらで使用しているのは新型みたい。(本体シリアルが177〜)

このへんは各自情報収集して対応してください。

==セットアップ==
必要な情報は概ね [http://www12.atwiki.jp/edaeda/pages/13.html edaeda @ ウィキ – HDUSのセットアップ] に書かれているので、こちらに従えば良いと思います。Linuxのディストリビューションが、上記ページは Fedra であり、いっぽう Pandaboard は Ubuntu であるため、若干の差分があります。

ここでは、差分について書きます。

===事前にインストールしておくパッケージ===
以下のパッケージを事前にインストールしておきます。

* build-essential
* patch
* pkg-config
* libboost-filesystem1.42-dev
* libboost-thread1.42-dev
* libboost1.42-all-dev
* libglib2.0-dev
* libpcsclite-dev
* libusb-dev

具体的には以下のコマンドを入力します。

$ sudo apt-get install patch build-essential pkg-config \
libboost-filesystem1.42-dev libboost-thread1.42-dev \
libboost1.42-all-dev libglib2.0-dev libpcsclite-dev libusb-dev

===「recfriioコマンドのインストール」における追加修正===

g++ -O2 -g -Wall -pthread -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DB25 -DHDUS -DUDP `pkg-config –cflags glib-2.0` -c -o IoThread.o IoThread.cpp
In file included from IoThread.cpp:13:
RingBuf.hpp:90: error: ‘condition’ in namespace ‘boost’ does not name a type
RingBuf.hpp: In member function ‘void RingBuf::setReady(T*)’:
RingBuf.hpp:188: error: ‘cond’ was not declared in this scope
RingBuf.hpp: In member function ‘const T* RingBuf::getPopPtr(unsigned int)’:
RingBuf.hpp:233: error: ‘cond’ was not declared in this scope
RingBuf.hpp: In member function ‘void RingBuf::interrupt()’:
RingBuf.hpp:260: error: ‘cond’ was not declared in this scope
make: *** [IoThread.o] エラー 1

というエラーが発生した場合は RingBuf.hpp に下のような一行を加える

RingBuf.hpp


#include
#include
// add st
#include
// add ed

また
Recordable.hpp:118: error: ISO C++ forbids declaration of ‘uint8_t’ with no type
といったコンパイルエラーが発生した場合は Recordable.hpp に以下を追加する。


#include

AbstractFriio.cpp:221: error: ‘umask’ was not declared in this scope
というコンパイルエラーが発生した場合は、AbstractFriio.cpp に


#include

を追加します。

また boost_filesystem でリンクエラーとなる場合はMakefileを修正します。

LIBS = -lpthread -lboost_thread-mt -lboost_filesystem `pkg-config –libs glib-2.0`
↓↓↓↓↓
LIBS = -lpthread -lboost_thread-mt -lboost_filesystem-mt `pkg-config –libs glib-2.0`

===「HDUSを認識させる」における修正===
/etc/rc.local には、以下のコマンドを記述します。
SKNET_AS11Loader.sys が /usr/local/bin に存在する場合の例です。

/bin/sh -c ‘cd /usr/local/bin;./as11loader’

SKNET_AS11Loader.sys を /usr/local/bin 以外に配置した場合、cd で指定するディレクトリをそれにあわせて変更してください。

※as11loader はカレントディレクトリに SKNET_AS11Loader.sys があることを前提にした動作となっているようです。

なお、上記のコマンドは、接続しているHDUSの数だけ記述します。また、後述する udev を使用する場合は、/etc/rc.local の修正は不要です。(「HDUSの自動ロード」参照)

===「ICカードリーダのセットアップ」における修正===

pcscdの起動方法が Ubuntu では異なります。

$ sudo /etc/init.d/pcscd start

リスタートする場合は以下のとおり。

$ sudo /etc/init.d/pcscd restart

yum や chkconfig は必要ありません。

===HDUSの自動ロード===
$ sudo vi /etc/udev/rules.d/52-as11loader.rules

中身はこんな感じ。

SUBSYSTEM==”usb”, SYSFS{idVendor}==”1738″, SYSFS{idProduct}==”5211″, RUN+=”/bin/sh -c ‘cd /usr/local/bin ; /usr/local/bin/as11loader'”
SUBSYSTEM==”usb”, ENV{DEVTYPE}==”usb_device”, ATTRS{idVendor}==”3275″, ATTRS{idProduct}==”6051″, MODE=”0666″, GROUP=”video”

===Ubuntu11.04 Upgrade時の注意===
5/6時点では、Ubuntu11.04ではカードリーダが動作しません。よって、以下の対応により乗り切ります。

sudo vi /etc/apt/sources.list

deb http://ports.ubuntu.com/ubuntu-ports/ natty main universe restricted multiverse

の”natty”とある部分を”maverick”とする。つまり

deb http://ports.ubuntu.com/ubuntu-ports/ maverick main universe restricted multiverse

と変更。

$ sudo apt-get remove pcscd libpcsclite-dev libpcsclite1 libccid
$ sudo apt-get install pcscd libpcsclite-dev libpcsclite1 libccid

取得:1 http://ports.ubuntu.com/ubuntu-ports/ maverick/main libpcsclite1 armel 1.5.5-3ubuntu2 [50.6 kB]
取得:2 http://ports.ubuntu.com/ubuntu-ports/ maverick/universe libccid armel 1.3.11-1 [105 kB]
取得:3 http://ports.ubuntu.com/ubuntu-ports/ maverick/main libpcsclite-dev armel 1.5.5-3ubuntu2 [68.2 kB]
取得:4 http://ports.ubuntu.com/ubuntu-ports/ maverick/universe pcscd armel 1.5.5-3ubuntu2 [86.9 kB]

インストールが終わったら、

sudo vi /etc/apt/sources.list

deb http://ports.ubuntu.com/ubuntu-ports/ natty main universe restricted multiverse

に戻しておくこと。

また、このままだと、apt-get update; apt-get upgrade すると、新しいバージョンのpcscdがインストールされ、現象が再発してしまうため、インストールしたバージョンを固定します。

$ echo libpcsclite1 hold | sudo dpkg –set-selections
$ echo libccid hold | sudo dpkg –set-selections
$ echo libpcsclite-dev hold | sudo dpkg –set-selections
$ echo pcscd hold | sudo dpkg –set-selections

==EPGrecのインストール==
===epgdumpr2のインストール===
http://www.mda.or.jp/epgrec/index.php/インストール前の準備
から、以下のファイルをダウンロードします。

$ wget “http://www.mda.or.jp/epgrec/index.php?plugin=attach&refer=インストール前の準備&openfile=epgdumpr2-utf8.tar.gz” -O epgdumpr2-utf8.tar.gz

とでもすれば良いでしょう。

次に http://www.honeyplanet.jp/epgdumpr2-utf8_segv.patch.gz のパッチをダウンロードします。パッチをあてないとUbuntuでは Segmentation Faultが発生するようです。

$ wget http://www.honeyplanet.jp/epgdumpr2-utf8_segv.patch.gz
$ wget http://2sen.dip.jp/cgi-bin/dtvup/source/up0246.zip
$ wget http://2sen.dip.jp/cgi-bin/dtvup/source/up0248.zip

$ tar xvzf epgdumpr2-utf8.tar.gz
$ gunzip epgdumpr2-utf8_segv.patch.gz
$ unzip up0246.zip
$ unzip up0248.zip
$ cd epgdumpr2/
$ cp ../epgdumpr2-utf8_segv.patch ./
$ cp ../fix_overflow_184.patch ./
$ cp ../fix_overflow_maxseclen.patch ./
$ patch -p1 < epgdumpr2-utf8_segv.patch $ patch -p1 < fix_overflow_184.patch $ patch -p1 < fix_overflow_maxseclen.patch $ make $ sudo cp epgdump /usr/local/bin/ ===atのインストール=== $ sudo apt-get install at ===epgrecのビルド=== http://sourceforge.jp/projects/epgrec/releases/ から最新版をダウンロードします。 インストールは以下のとおり。 $ sudo tar xvzpf epgrec-日付.tar.gz -C /var/www/ ※/var/www がドキュメントルートの場合 ===config.phpの設定=== /var/www/epgrec/config.php.sampleをconfig.phpにリネームします。 $ sudo mv /var/www/epgrec/config.php.sample /var/www/epgrec/config.php config.phpを環境に合わせて修正する。 ====地上デジタルチャンネルマップ$GR_CHANNEL_MAPの設定==== サンプルを見ればなんとなく分かると思います。済んでいる地域に合わせてチャンネル情報を修正します。 http://www.maspro.co.jp/contact/bro/bro_ch.html あたりを参考に設定すれば良いでしょう。 ====do-record.shの設定==== こちらでは、以下のとおりとしています。
#!/bin/sh

RECORDER=/usr/local/bin/recfriio
B25=/usr/local/bin/b25

if [ ${MODE} -eq 0 ]; then
# MODE=0では必ず無加工のTSを吐き出すこと
sleep 2
$RECORDER –b25 –strip –hdus $CHANNEL $DURATION ${OUTPUT}
else
$RECORDER –strip –hdus –b25 $CHANNEL $DURATION ${OUTPUT}
fi

====www-dataをrootグループに加える====
$ sudo gpasswd -a www-data root

====/etc/at.denyの編集====
WEBサーバで使用しているユーザ(www-data等)が含まれている場合は削除します。

===ffmpeg===
Ubuntu に含まれる ffmpeg は H.264 に対応していないため、自前でビルドします。

git を使っているので、インストールしていない場合は予めインストールしておきます。

$ sudo apt-get install git-core

====ffmpegとx264ライブラリの削除====
$ sudo apt-get remove ffmpeg x264 libx264-dev

====必要なライブラリをインストール====
$ sudo apt-get update
$ sudo apt-get install libfaac-dev libmp3lame-dev libxvidcore-dev

====x264ライブラリのインストール====

$ cd /tmp
$ git clone git://git.videolan.org/x264.git
$ cd x264
$ ./configure
$ make
$ sudo make install

====ffmpegのインストール====
$ cd /tmp
$ git clone git://git.videolan.org/ffmpeg.git ffmpeg
$ cd ffmpeg
$ ./configure –enable-shared –enable-sse –enable-ssse3 –enable-pthreads –enable-gpl –enable-libmp3lame –enable-libfaac –enable-nonfree –enable-libx264 –enable-libxvid –enable-pthreads –enable-zlib
$ make
$ make install

===WEBサーバについて===
Apache は重そうなので、lighttpd をインストールした。epgrecに必要な MySQL や PHP もインストール。

$ sudo apt-get install lighttpd php5 php-pear php5-gd php5-cgi php5-mysql mysql-server

もしかしたら php-pear と php5-gd は必要ないかも。

設定は検索する等して対処してください。