Created: Apr 14, 2012

マニュアルがないと何もできない私が OneSeg24 for Linux サーバを構築するマニュアルを自分用に作ってみた。

[player.pl] ■目次
1. はじめに
2. Linux インストール
3. Linux 用 UOT-100 ドライバのインストール
4. ディスクの増設
5. ワンセグ録画ソフト dvbstream のインストール
6. ストリームサーバ perlRTMP の導入
7. OneSeg24 for Linux のインストール
8. 運用
9. (iPhone 向けストリーミング) OneSeg24 for iPhone のインストール
10. 「player.pl差し替え版sqlite3対応版」による、見やすく検索できる番組表と番組のMP4変換ダウンロード
11. 字幕対応
12. トラブルシューティング
13. リファレンス


■1. はじめに
経緯について興味がある方は、前に書いたこちらを参照してください。
マニュアルがないと何もできない私が OneSeg24 for Linux と OneSeg24 for iPhone を入れたときの記録。
http://www.eonet.ne.jp/~y-katow/OneSeg24forLinux-install-memo.html

UOT-100 で OneSeg24 for Linux を構築する手順については、
今お読みになっている本ページで完結していますので
上記を参照しなくても大丈夫です。

書き直した理由:
検索可能な番組表や MP4 ダウンロード、字幕対応ができたので更新してみた。

やっぱり古い OS ではなんか気持ち的にアレなので、
UOT-100 デバイスドライバがビルドできて
今もサポートされている OS にしてみた。
(Ubuntu 8.04.4 LTS Server)

サーバー版にしたのは、サポート期限が長いから。
あとは単に趣味。マウス操作嫌いだから。

前回ではホームディレクトリがめちゃくちゃになったので、
ダウンロード場所と作業場所、実運用場所に分けてみた。

ユーザの public_html でないのが主流だと分かったのでやり直してみた。

あとから再構築する際は操作をコピペして省力化できるように、
コマンドラインで済ませるようにしてみた。
※ダウンロード URL を直リンにしたので、今後取れなくなるかもしれない。

分かりやすいように、各ドキュメントに沿わせてできるだけ各操作で何をしているか書いてみた。


■2. Linux インストール
■2.1 Linux インストール準備
Ubuntu 8.04.4 LTS Server は、Long Time Support といわれるだけあって、
2008年4月にリリースされたもののサーバー版は2013年4月までサポートされる。

主要 ftp サイトにある。なんとなく理研から取る。go.jp だし。
ftp://ftp.riken.go.jp/Linux/ubuntu-iso/CDs-Ubuntu/8.04.4/ubuntu-8.04.4-server-i386.iso

ubuntu-8.04.4-server-i386.iso を CD-R に焼く。
マニュアルがないと何もできないので焼くソフトが分からない場合 → DeepBurner とかどうでしょう
ISOイメージファイルの焼き方、ISO形式のCD・DVDの作り方 - DeepBurner、CDBurnerXP、CD Manipulator
http://memorva.jp/internet/pc/iso_cd_dvd.php

気分的に、Windows とか入ってたディスクではどうなるか分からないので
MBR とパーティションテーブルをデータ消去したディスクにインストールする。
マニュアルがないと何もできないのでどうデータ消去したらいいか分からない場合 → DBANとかどうでしょう
@IT:Security Tips > ハードディスクの内容を安全に消去 - DBAN
http://www.atmarkit.co.jp/fsecurity/rensai/securitytips/024dban.html
起動後 "boot: " プロンプトで "quick" と打って、dwipe が開始されれば
ディスクの先頭にある MBR とパーティションテーブルは消えているだろうから、電源落としてOK.

※注意 起動する HDD(プライマリマスタ)は数十 GB 程度がよいみたい。

大きい場合→
数百 GB になると、インストール後の再起動で
error: out of disk.
grub rescue>
という画面が出て Ubuntu が起動しなかったことがあった。

小さい場合→
調子に乗って 8GB HDD でやってみたら、小さすぎて
カーネル構築の際に "No space left on device" が出た。

録画データを落とす ts ディレクトリは別 HDD
(プライマリスレーブとか、USB 外付けとか)にすることにした。
フォーマットを NTFS にしておくと後々 Windows に移行するとかあったとき便利じゃなイカ?

インストール時には混乱を避けるため、 HDD 一台のみでやる。

■2.2 Linux インストール(Ubuntu 8.04.4 LTS Server)

ubuntu-8.04.4-server-i386 の CD-R から起動

"Language"画面
"English"のまま[Enter]。

"ubuntu"画面
"Install Ubuntu Server"のまま[Enter]。

"[!!] Choose language"画面
"English - English"のまま[Enter]。
"Choose a country"
一番下の"other"を選択、[Enter]。
"Japan"を選択、[Enter]。

"[!] Ubuntu installer main menu"画面
"Detect keyboard layout?"
[Tab]で"<No>を選択し、[Enter]。
"Japan"を選択、[Enter]。
"Japan"を選択、[Enter]。
"Method for toggling between national and Latin mode:"
"Alt+Shift"のまま[Enter]。

"Scanning CD-ROM"画面
"Loading additional compornents"画面
CD-ROMをスキャンするのでしばらく待つ。2、3分

※IPアドレスは便宜上、192.168.1.63/24 とする。以下同様。
"Configuring the network with DHCP"画面
"<Cancel>を選択、[Enter]
※間に合わなかったら"<Back>で戻る。
"[!!] Configure the network"画面、
"Configure network manually"を選択
"IP address:" 192.168.1.63
"Netmask:" 255.255.255.0 のまま
"Gateway:" お使いのブロードバンドルータのIPアドレス
"Name server addresses:" お使いのブロードバンドルータのIPアドレスまたはプロバイダのDNSのIPアドレス
"Hostname:" コンピュータ名を適切に入力
"Domain name:" 任意

"Setting up the clock"画面
"Getting the time from a network time server..."

"[!!] Partition disks"画面
"Guided - use entire disk"のまま[Enter]。
ディスクが選択されているので[Enter]。
"If you continue, the changes listed below will be written to the disks."
内容を確認して[Tab]で"<Yes>を選択し、[Enter]

"Installing the base system"画面
インストールが進行するのでしばらく待つ。
10分くらい。

"[!!] Set up users and passwords"画面
"Full name for the new user:" 「OneSeg24 for Linux」トカ何トカ
"Username for your account:" oneseg24
"Choose a password for the new user:" 適切に入力。
"Re-enter password to verify:"
"Encrypt your home directory?"には"<No>のまま[Enter]。

"[!] Configure the package manager"画面
"HTTP proxy information (blank for none):" 必要なら、http://プロキシサーバのfqdnまたはIPアドレス:ポート/ "<Continue>
"Cofiguring apt"画面
"Select and install software"画面

"[!] Software selection"画面
何もチェックを入れてないまま[Enter]。

"Select and install software"画面
インストールが進行するのでしばらく待つ。
10分くらい。

"[!!} Finish the installation"画面
CD-R を取り出してから[Enter]

■2.3 Linux 初期設定
他端末からのコピーによる省力化を目的として、
遠隔操作用に telnet サーバ、ftp サーバを導入する。
他端末には Teraterm とか入れておいたらコマンドがコピペできて便利かも。

oneseg24 でログイン。

最新のパッケージリストに更新
$ sudo apt-get update
telnetd をインストール
$ sudo apt-get -y install telnetd
$ sudo reboot
再起動後、他端末から telnet で接続できることを確認。

※以下、基本的に他端末から telnet にて操作。

ftpd をインストール
$ sudo apt-get -y install ftpd
他端末から ftp で接続、転送できることを確認。


■3. Linux 用 UOT-100 ドライバのインストール

UOT-100 driver for Linux Wiki - SourceForge.JP
http://sourceforge.jp/projects/uot100/wiki/FrontPage
これを参考に。

Ubuntu におけるビルドに関しては
cvoc-e121 @ ウィキ - ドライバのインストール
http://www47.atwiki.jp/cvoc-e121/16.html
を参考にした。

$ sudo -s

必要パッケージを入手。
# apt-get -y install build-essential
# apt-get -y install kernel-package libncurses5-dev

カーネルのバージョンを確認。
# uname -r

上記の該当するバージョンのカーネルソースを入手。
# apt-get -y install linux-source-2.6.24

カーネルソースを展開する。
# cd /usr/src
# tar jxvf linux-source-2.6.24.tar.bz2
# exit

UOT-100 のドライバを入手する。
$ mkdir ~/Downloads
$ wget -P ~/Downloads http://jaist.dl.sourceforge.jp/uot100/29431/uot100-0.1.tar.gz

※プロキシが必要な環境にいる場合
"No route to host."と出るので
$ sudo vi +/http_proxy /etc/wgetrc
http_proxy = http://プロキシサーバのfqdnまたはIPアドレス:ポート/
ftp_proxy = http://プロキシサーバのfqdnまたはIPアドレス:ポート/
としてやりなおす。

作業用ディレクトリ作成。
$ mkdir ~/make
$ cd ~/make
ドライバ展開。
$ tar xvzf ~/Downloads/uot100-0.1.tar.gz

http://sourceforge.jp/projects/uot100/wiki/FrontPage
を参考に。

$ sudo -s
# cd ~/make/uot100-0.1
# cp -r frontends dvb-usb /usr/src/linux-source-2.6.24/drivers/media/dvb/
# echo dvb-usb-uot100-objs = uot100.o >> /usr/src/linux-source-2.6.24/drivers/media/dvb/dvb-usb/Makefile
# echo obj-m += dvb-usb-uot100.o >> /usr/src/linux-source-2.6.24/drivers/media/dvb/dvb-usb/Makefile
# echo obj-m += mtv211.o >> /usr/src/linux-source-2.6.24/drivers/media/dvb/frontends/Makefile

~/make/OneSeg24forLinux_1.0.0.2/driver/readme.txt を参考に
パッチを適用する。
# cd /usr/src/linux-source-2.6.24/drivers/media/dvb/dvb-usb/
# patch < ~/make/OneSeg24forLinux_1.0.0.2/driver/uot100-usbhub.patch
# patch < ~/make/OneSeg24forLinux_1.0.0.2/driver/uot100-tuning.patch

ビルドの設定をする。
# cd /usr/src/linux-source-2.6.24/
# cp /boot/config-2.6.24-26-server .config

# make oldconfig
何か問われた場合は、適当に[Enter]を押す。

# make menuconfig
".config - Linux Kernel v2.6.24.6 Configuration"という
ncurses で水色の CUI 画面が出てくる。
以下を確認。
" Device Drivers ---> 選択して[Enter]
" Multimedia devices ---> 選択して[Enter]
"<M> DVB for Linux"
2ツ下の
"[*] DVB/ATSC adapters ---> 選択して[Enter]
"<M> Support for various USB DVB devices" になっていることを確認。
[→]キーで"< Exit >を選択、[Enter]を押す。
(※[Tab]キーで"< Exit >に飛んで[Space]を押すと"<M>マークが消えるので注意)
[→]キーで"< Exit >を選択、[Enter]を押す。
[→]キーで"< Exit >を選択、[Enter]を押す。
[→]キーで"< Exit >を選択、[Enter]を押す。
※"Dou you wish to save your new kernel configuration?" と問われたら
設定を触らない限りは問われないはずなので
[Tab]キーで"< No >を選択、[Enter]を押す。

このままでビルドすると、xenを求められる。以下記事を参考に回避。
秘密のLinux日記(NG)(2009-02-19)
http://www.deer-n-horse.jp/linux/diary/?date=20090219

# make menuconfig
" Processor type and features ---> 選択して[Enter]
"[*] Paravirtualized guest support ---> 選択して[SPACE]で"[*]"チェックを外す
[→]キーで"< Exit >を選択、[Enter]を押す。
[→]キーで"< Exit >を選択、[Enter]を押す。
"Do you wish to save your new kernel configuration?" で "< Yes >を選択。

# make-kpkg clean

カーネルのビルドを行う。かなり時間がかかる。
コンソールを開いて放置していて猫がキーボードを跳ねても困るし、
他端末からの telnet では電気代がもったいないし接続が切れても困るので
GNU screen 仮想端末にて実行しつつ、デタッチする。
# apt-get -y install screen
# screen
ついでに次回のために経過時間をはかっておく。
revision オプションは数字を入れる必要がある。日付にしておく。
# time make-kpkg --initrd --revision=`date +"%Y%m%d"` kernel_image kernel_headers modules_image
^A^D でデタッチ。
# exit
$ exit
かなり待つ。5時間くらいか。

$ sudo -s
screen をレジューム。
# screen -r
ビルドが終了していることを確認する。経過時間を見る。
screen を終了する。
# exit

ビルドしたイメージをインストールする。
# cd /usr/src
# dpkg -i linux-image-2.6.24_`date +"%Y%m%d"`_i386.deb
# dpkg -i linux-headers-2.6.24_`date +"%Y%m%d"`_i386.deb
新しいイメージにて再起動する。
# reboot

UOT-100 ワンセグチューナーを何本か挿す。
$ sudo -s
# dmesg
"dvb-usb: SEAGRAND UOT-100 successfully initialized and connected."が
挿した本数分出ていることを確認。
# ls -d /dev/dvb/adapter?
adapter? が挿した本数分出ていることを確認。
追加で挿してみても挿した合計本数分出ていることを確認。

24時間ワンセグ野郎関連ディレクトリ作成。
# mkdir /usr/local/oneseg24
# chmod 777 /usr/local/oneseg24


■4. ディスクの増設
$ sudo shutdown -h now
電源が切れたら HDD 2台目を接続。

電源を入れる。
oneseg24でログイン

ディスクまるごとワンパーティション、
Windows で使うかもしれないので NTFS で ts ディレクトリにする。

$ sudo -s

デバイス名確認。
# fdisk -l | more

パーティショニング。
# fdisk /dev/sdb
(新規パーティション)n、(プライマリパーティション1)p、1、
(ディスク全体デフォルト値)[Enter]、[Enter]、(書き込んで終了)w

NTFS でクイックフォーマット。
# sudo apt-get -y install ntfsprogs
# mkfs.ntfs --quick /dev/sdb1

マウントポイント作成。
# mkdir /mnt/oneseg24

マウント実行確認。
# mount -t ntfs /dev/sdb1 /mnt/oneseg24

マウントオプション確認。
# mount

エントリを fstab に追記。
# vi + /etc/fstab
/dev/sdb1 /mnt/oneseg24 auto noauto,rw,nosuid,nodev,noatime,allow_other 0 0

※noauto にしておかないと、起動時にディスクが繋がっていない場合に落ちることがあった

ts ディレクトリ作成
# mkdir /mnt/oneseg24/ts
# ln -s /mnt/oneseg24/ts /usr/local/oneseg24/ts

起動時にマウントするスクリプトを作成
# cat > /usr/local/oneseg24/mountts.sh
#!/bin/sh
/bin/mount /mnt/oneseg24
^D
# chmod 755 /usr/local/oneseg24/moutts.sh
起動時に HDD をマウントするよう設定。
/etc/rc.local 末尾、"exit 0" の前に入れる。
# vi + /etc/rc.local
/bin/sh /usr/local/oneseg24/mountts.sh

# reboot
念のため再起動時にマウントされているか確認する。
$ mount


■5. ワンセグ録画ソフト dvbstream のインストール

dvbstream-0.5.tar.gz のダウンロード。
DVB tools | Free software downloads at SourceForge.net
http://sourceforge.net/projects/dvbtools/
http://downloads.sourceforge.net/project/dvbtools/dvbstream/dvbstream-0.5/dvbstream-0.5.tar.gz

$ wget -P ~/Downloads http://downloads.sourceforge.net/project/dvbtools/dvbstream/dvbstream-0.5/dvbstream-0.5.tar.gz

OneSeg24forLinux_1.0.0.2.tar.gz のダウンロード。
これには dvbstream 用複数起動修正パッチが含まれている。
パッチのおかげで最大8本の同時録画が可能となる。
OneSeg24 for Linux
http://code.google.com/p/oneseg24/
http://oneseg24.googlecode.com/files/OneSeg24forLinux_1.0.0.2.tar.gz

$ wget -P ~/Downloads http://oneseg24.googlecode.com/files/OneSeg24forLinux_1.0.0.2.tar.gz

作業用ディレクトリに移り、展開
$ cd ~/make
$ tar xvzf ~/Downloads/dvbstream-0.5.tar.gz
$ tar xvzf ~/Downloads/OneSeg24forLinux_1.0.0.2.tar.gz

$ cd dvbstream-0.5
dvbstream 用複数起動修正パッチを当てる。
$ patch < ~/make/OneSeg24forLinux_1.0.0.2/driver/dvbstream.patch
コンパイル。
$ make

$ sudo -s
make install が効かないので cp する。
# cp dvbstream /usr/local/bin
# chmod u+s /usr/local/bin/dvbstream
# exit

dvbstream はチャンネルの選局を周波数で行います。
周波数の計算式は以下の通りです。
ch * 6000 + 395143 = 周波数

ch は以下ページで調べることができます。
UHF 地上波デジタル放送周波数
http://www.max.hi-ho.ne.jp/mishima/mk/dezitaru/channel.html
テレビ周波数チャンネル - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%86%E3%83%AC%E3%83%93%E5%91%A8%E6%B3%A2%E6%95%B0%E3%83%81%E3%83%A3%E3%83%B3%E3%83%8D%E3%83%AB

兵庫県の一例
ch22 NHK総合・神戸 527143
ch13 NHKEテレ1・大阪 473143
ch26 サンテレビ 551143
ch16 MBS毎日放送 491143
ch15 ABCテレビ 485143
ch18 テレビ大阪 503143
ch17 関西テレビ 497143
ch14 よみうりテレビ 479143

計算が面倒なときは
$ for ch in 22 13 26 16 15 18 17 14; do echo `expr $ch \* 6000 + 395143`; done > ~/make/freq.txt
とかやって freq.txt を編集すればいいんじゃなイカ?

$ cd ~/make
キャプチャテスト用スクリプトを作成。
$ cat > dvbtest.sh
#!/bin/sh
/usr/local/bin/dvbstream -c 0 -f `/usr/bin/expr 22 \* 6000 + 395143` 8192 -o > test0.ts &
/bin/sleep 3
/usr/local/bin/dvbstream -c 1 -f `/usr/bin/expr 13 \* 6000 + 395143` 8192 -o > test1.ts &
/bin/sleep 3
/usr/local/bin/dvbstream -c 2 -f `/usr/bin/expr 26 \* 6000 + 395143` 8192 -o > test2.ts &
/bin/sleep 3
/usr/local/bin/dvbstream -c 3 -f `/usr/bin/expr 16 \* 6000 + 395143` 8192 -o > test3.ts &
/bin/sleep 3
/usr/local/bin/dvbstream -c 4 -f `/usr/bin/expr 15 \* 6000 + 395143` 8192 -o > test4.ts &
/bin/sleep 3
/usr/local/bin/dvbstream -c 5 -f `/usr/bin/expr 18 \* 6000 + 395143` 8192 -o > test5.ts &
/bin/sleep 3
/usr/local/bin/dvbstream -c 6 -f `/usr/bin/expr 17 \* 6000 + 395143` 8192 -o > test6.ts &
/bin/sleep 3
/usr/local/bin/dvbstream -c 7 -f `/usr/bin/expr 14 \* 6000 + 395143` 8192 -o > test7.ts &
^D
$ chmod 755 dvbtest.sh
テスト実行。
$ sh dvbtest.sh
キャプチャされているか確認。
$ ls -l test?.ts
確認できたらテスト停止。
$ killall dvbstream

できた test[0-7].ts が Windows機にて、以下 URL の TSConverter で MP4 に変換できるか確認する。
UOT-100/LOG-J200 用予約録画ソフト -24時間ワンセグ野郎派生ツール
http://theremin.hostoi.com/oneseg.htm
[ミニヒューズフォルダー]
電波状況が悪いと ts のファイルサイズが 0 のままだったりする。
電波状況がよくないと ts ができても MP4 に変換できない場合がある。
電波状況については、dvbstream を単独で起動して stderr 出力から "Signal strength" や "SNR" を見る
アンテナ線をトライアンドエラーして苦労するよりブースターを入れるほうが改善する。

アンテナは壁の端子から取る。
同軸ケーブルは太い 5C2V を使って引き回しは最小限に。
サーバは普段使わないからアンテナ端子のすぐそばに設置する。
UOT-100 にはミニヒューズホルダーで取り付けると外れにくい。
ちなみに共立電子で一個70円。送料定形外120円。

【共立エレショップ】eleshop.jp 基板型ミニヒューズホルダー[R指] 【パーツフロア】:電子部品,半導体,キットの通信販売
http://eleshop.jp/shop/g/g59S122/


■6. ストリームサーバ perlRTMP の導入

~/make/OneSeg24forLinux_1.0.0.2/oneseg24/readme.txt を読むと、
perlRTMP がいるようだ。

perlrtmp - perl RTMP Server for MPEG2-TS/MP4(H264/AAC) Streaming
http://code.google.com/p/perlrtmp/
http://perlrtmp.googlecode.com/files/perlrtmp_1.0.1.1.tar.gz

ダウンロード
$ wget -P ~/Downloads http://perlrtmp.googlecode.com/files/perlrtmp_1.0.1.1.tar.gz
ソース展開
$ cd ~/make
$ tar xvzf ~/Downloads/perlrtmp_1.0.1.1.tar.gz
$ cd perlrtmp_1.0.1.1
$ view readme.txt

~/make/perlrtmp_1.0.1.1/readme.txt を見ると、
Flash プレーヤーが必要であり、JW FLV MEDIA PLAYER を推奨している。

■6.1 Web サイト埋め込み式動画再生プレーヤ JW FLV MEDIA PLAYER の導入
(結果を言うと入れなくてもよいのだが、perlRTMP のマニュアルではテストに使っているので入れておく)
~/make/perlrtmp_1.0.1.1/readme.txt で言及しているバージョンは JW FLV MEDIA PLAYER 4.2 だが、
現在は JW Player と名を変え、バージョンも 5.7 とかなり変わっている。
マニュアルと異なっていると困るので、"JW FLV MEDIA PLAYER 4.2" を検索して探す。

ダウンロード
$ wget -P ~/Downloads http://download3.fyxm.net/14/14532/mediaplayer.zip
展開
$ sudo apt-get -y install unzip
$ unzip -d ~/make/mediaplayer ~/Downloads/mediaplayer.zip
※ちなみにこれは JW FLV MEDIA PLAYER 4.4

■6.2 Web サーバの設定
~/make/OneSeg24forLinux_1.0.0.2/readme.txt
~/make/OneSeg24forLinux_1.0.0.2/oneseg24/readme.txt
~/make/perlrtmp_1.0.1.1/readme.txt
によれば、Web サーバの CGI 環境も必要なようなので設定する。
(~/make/OneSeg24forLinux_1.0.0.2/oneseg24/readme.txt には public_html とあるが、
別にユーザディレクトリの ~/public_html に置く必要はない。)
テストページとして JW FLV MEDIA PLAYER の readme.html を使う。

・静的 html の公開。
$ sudo -s
apache2 のインストール。
# apt-get -y install apache2
テストページのコピー。
# cp ~/make/mediaplayer/* /var/www

他端末から
http://192.168.1.63/readme.html
を開いて"Player Example"が再生できていれば
Web サーバの設定はできている。

CGI 設定。
# vi +/cgi-script /etc/apache2/mods-available/mime.conf
cgi-script のコメントを外し、拡張子 .pl を追加する。
#AddHandler cgi-script .cgi

AddHandler cgi-script .cgi .pl

# vi /etc/apache2/sites-available/default
<Directory /var/www/>ディレクティブを編集
その1.Indexes を削除、ExecCGI を追加。
Options Indexes FollowSymLinks MultiViews

Options FollowSymLinks MultiViews ExecCGI

その2.AllowOverride を All に。
AllowOverride None

AllowOverride All

変更を反映。
# /etc/init.d/apache2 restart

CGIテストページを作成。 # cat > /var/www/first.pl #!/usr/bin/perl print "Content-type: text/html\n\n"; print "Hello, World."; ^D # chmod 755 /var/www/first.pl

他端末から
http://192.168.1.63/first.pl
を開いて"Hello, World."が出れば CGI 設定はできている。

■6.3 ストリームサーバ(perlRTMP)のインストール
$ cd ~/make/perlrtmp_1.0.1.1
$ view readme.txt

~/make/perlrtmp_1.0.1.1/readme.txt を参考に。

追加インストールが必要なライブラリを導入。
# apt-get -y install libdigest-SHA-perl

テストページの作成。上記録画テストしたファイルを使う。 # cp ~/make/test0.ts /var/www/test.ts # chmod 644 /var/www/test.ts # cat > /var/www/test.html <html> <body> <script type='text/javascript' src='swfobject.js'></script> <div id='preview'>This div will be replaced</div> <script type='text/javascript'> var s1 = new SWFObject('player.swf','player','320','200','9','#ffffff'); s1.addParam('allowfullscreen','true'); s1.addParam('allowscriptaccess','always'); s1.addParam('wmode','opaque'); s1.addParam('flashvars','streamer=rtmp://192.168.xxx.xxx&file=test.ts.flv'); s1.write('preview'); </script> </body> </html> ^D # vi +/xxx /var/www/test.html
以下を編集
streamer=rtmp://192.168.xxx.xxx

streamer=rtmp://192.168.1.63
# exit

ストリームサーバのテスト。
$ cd ~/make/perlrtmp_1.0.1.1
$ perl server.pl /var/www &

他端末から
http://192.168.1.63/test.html
を開く。録画テストした動画が再生できることを確認する。
(上記 server.pl がバックグラウンドで動いている間だけ)
再生できないとき→/var/www/test.ts が o+r になっているか?

確認できたら止める。
$ killall perl

運用ディレクトリにコピー。
$ sudo -s
# cd ~/make
# cp -r ./perlrtmp_1.0.1.1 /usr/local/oneseg24
# exit


■7. OneSeg24forLinux の導入
$ cd ~/make/OneSeg24forLinux_1.0.0.2
$ cd oneseg24
$ view readme.txt

~/make/OneSeg24forLinux_1.0.0.2/oneseg24/readme.txt を参考に。

■7.1 ライブラリのインストール
$ sudo -s
# apt-get -y install sqlite3
# apt-get -y install libdbi-perl
# apt-get -y install libdbd-sqlite3-perl
# exit

$ cd ~/make/OneSeg24forLinux_1.0.0.2/oneseg24
チャンネル部分を編集。
$ vi epg.sql

以下に兵庫県の例を挙げる。
insert into da_channel (dc_ch, dc_name) values (22, 'NHK総合・神戸');
insert into da_channel (dc_ch, dc_name) values (13, 'NHKEテレ1・大阪');
insert into da_channel (dc_ch, dc_name) values (26, 'サンテレビ');
insert into da_channel (dc_ch, dc_name) values (16, 'MBS毎日放送');
insert into da_channel (dc_ch, dc_name) values (15, 'ABCテレビ');
insert into da_channel (dc_ch, dc_name) values (18, 'テレビ大阪');
insert into da_channel (dc_ch, dc_name) values (17, '関西テレビ');
insert into da_channel (dc_ch, dc_name) values (14, 'よみうりテレビ ');

チャンネルの番号は前述のページを参照。
放送局名は iEPG 規格を作った SONY が運営している以下サイトから
コピペすれば確実かも。
テレビ番組表【Gガイド.テレビ王国】
http://tv.so-net.ne.jp/

データベース作成
OneSeg24forLinux のプログラムがファイルを作成できるようディレクトリに権限を設定。
$ sudo chmod 777 /usr/local/oneseg24 (777でいいか自信がない)
データベース作成
$ sqlite3 /usr/local/oneseg24/epg.db '.read epg.sql'

■7.3 録画スクリプトの起動
epg.pl 修正
$ vi +/epg.db epg.pl
my $dsn = 'DBI:SQLite:dbname=epg.db';

my $dsn = 'DBI:SQLite:dbname=/usr/local/oneseg24/epg.db';

ts.pl 修正
dvbstream のパス、rec.pl epg.pl のパス。
変更ないのでこのままでOK。

録画ディレクトリの作成
$ mkdir /usr/local/oneseg24/ts

作業ディレクトリから運用ディレクトリへコピー
$ sudo -s
# cd ~/make
# cp -r ./OneSeg24forLinux_1.0.0.2 /usr/local/oneseg24

録画スクリプト作成
# cat > /usr/local/oneseg24/oneseg24.sh
#!/bin/sh
cd /usr/local/oneseg24/OneSeg24forLinux_1.0.0.2/oneseg24
/usr/bin/perl ts.pl -c 0 -f `/usr/bin/expr 22 \* 6000 + 395143` -h 22 -d /usr/local/oneseg24/ts >/usr/local/oneseg24/log/dvbstream0.log 2>&1 &
/bin/sleep 3
/usr/bin/perl ts.pl -c 1 -f `/usr/bin/expr 13 \* 6000 + 395143` -h 13 -d /usr/local/oneseg24/ts >/usr/local/oneseg24/log/dvbstream1.log 2>&1 &
/bin/sleep 3
/usr/bin/perl ts.pl -c 2 -f `/usr/bin/expr 26 \* 6000 + 395143` -h 26 -d /usr/local/oneseg24/ts >/usr/local/oneseg24/log/dvbstream2.log 2>&1 &
/bin/sleep 3
/usr/bin/perl ts.pl -c 3 -f `/usr/bin/expr 16 \* 6000 + 395143` -h 16 -d /usr/local/oneseg24/ts >/usr/local/oneseg24/log/dvbstream3.log 2>&1 &
/bin/sleep 3
/usr/bin/perl ts.pl -c 4 -f `/usr/bin/expr 15 \* 6000 + 395143` -h 15 -d /usr/local/oneseg24/ts >/usr/local/oneseg24/log/dvbstream4.log 2>&1 &
/bin/sleep 3
/usr/bin/perl ts.pl -c 5 -f `/usr/bin/expr 18 \* 6000 + 395143` -h 18 -d /usr/local/oneseg24/ts >/usr/local/oneseg24/log/dvbstream5.log 2>&1 &
/bin/sleep 3
/usr/bin/perl ts.pl -c 6 -f `/usr/bin/expr 17 \* 6000 + 395143` -h 17 -d /usr/local/oneseg24/ts >/usr/local/oneseg24/log/dvbstream6.log 2>&1 &
/bin/sleep 3
/usr/bin/perl ts.pl -c 7 -f `/usr/bin/expr 14 \* 6000 + 395143` -h 14 -d /usr/local/oneseg24/ts >/usr/local/oneseg24/log/dvbstream7.log 2>&1 &
^D
# chmod 755 /usr/local/oneseg24/oneseg24.sh
# mkdir /usr/local/oneseg24/log
録画スクリプト実行。
# /bin/sh /usr/local/oneseg24/oneseg24.sh
# exit

番組表 CGI の設定
$ cd ~/make/OneSeg24forLinux_1.0.0.2/public_html

epg.cgi、setup.cgi 修正
$ vi +/oneseg24 epg.cgi setup.cgi
my $dsn = 'DBI:SQLite:dbname=../oneseg24/epg.db';

my $dsn = 'DBI:SQLite:dbname=/usr/local/oneseg24/epg.db';

player.cgi 修正
$ vi +/xxx player.cgi
以下を修正
my $streamer = 'rtmp://192.168.xxx.xxx';

my $streamer = 'rtmp://192.168.1.63';

番組表 CGI のコピー
$ sudo -s
# cd ~/make/OneSeg24forLinux_1.0.0.2/public_html
# cp -r ./* /var/www
# exit

・チャンネル設定(一度だけ)
CGI からチャンネル設定ができるように権限を設定
$ chmod 666 /usr/local/oneseg24/epg.db
これを忘れると"500 Internal Server Error"となる。

他端末から
http://192.168.1.63/setup.cgi
ストリームごとの放送日時と番組名が表示されますので、
プルダウンを選択して放送局と対応させてください。
最後に「登録」ボタンをクリックして設定を保存します。

[epg.cgi]

・ストリームサーバの起動スクリプト作成
$ sudo -s
# cat > /usr/local/oneseg24/perlrtmp.sh
#!/bin/sh
cd /usr/local/oneseg24/perlrtmp_1.0.1.1
/usr/bin/perl server.pl /usr/local/oneseg24/ts >/usr/local/oneseg24/log/perlrtmp.log 2>&1 &
^D
# chmod 755 /usr/local/oneseg24/perlrtmp.sh
ストリームサーバの起動
# /bin/sh /usr/local/oneseg24/perlrtmp.sh

・視聴
他端末から
http://192.168.1.63/epg.cgi
番組表が表示されますので、番組名をクリックするとプレーヤー画面に移動します。

[player.cgi]

各種起動スクリプトをシステム起動時に自動実行させる設定。
# vi + /etc/rc.local
exit 0 の前に追加。
/bin/sh /usr/local/oneseg24/mount.sh
/bin/sh /usr/local/oneseg24/oneseg24.sh
/bin/sh /usr/local/oneseg24/perlrtmp.sh

# reboot
再起動しても番組表ページが表示され(Webサーバ起動、epg.cgi動作)、
最新の番組が録画されており(oneseg24.sh動作)、
プレーヤー画面が再生される(perlrtmp.sh動作)ことを確認する。


■8. 運用

ディスクの空き容量を把握しておく。
$ df -h
1チャンネル一日で 5GB 弱消費するので、空き容量から計算して保持する日数を決める。
例えば、一ヶ月ていど保持して古いものから自動削除させるには 31日として

削除スクリプト作成
# cat > /usr/local/oneseg24/rmts.sh
#!/bin/sh
/usr/bin/find /mnt/oneseg24/ts -mindepth 1 -maxdepth 1 -type d -mtime +31 -exec rm -r {} \;
^D
# chmod 755 /usr/local/oneseg24/rmts.sh

※find のパス引数がシンボリックリンクだと見つからないので
実ディレクトリの方を指定しておく

タイマー設定
# crontab -e
10 0 * * * /bin/sh /usr/local/oneseg24/rmts.sh

毎日深夜0時10分に実行させている。
ディレクトリごと消したいので "-type d"、"rm -r" している。


■9. (iPhone 向けストリーミング) OneSeg24 for iPhone のインストール
[iPhone.cgi]

ダウンロード
$ wget -P ~/Downloads http://oneseg24.googlecode.com/files/OneSeg24foriPhone.tar.gz
展開
$ cd ~/make
$ tar xvzf ~/Downloads/OneSeg24foriPhone.tar.gz
$ cd OneSeg24foriPhone
$ view readme.txt

~/make/OneSeg24foriPhone/readme.txt を参考に。

2ファイル、保存ディレクトリパス設定変更
$ vi +/ts m3u8.cgi ts.cgi
my $dir = '/ts';

my $dir = '/usr/local/oneseg24/ts';

[m3u8.cgi]

OneSeg24 for Linux の番組表をコピーして iPhone 用に変更
$ cp ~/make/OneSeg24forLinux_1.0.0.2/public_html/epg.cgi ./iPhone.cgi
$ vi +/player.cgi iPhone.cgi
player.cgi

m3u8.cgi

作業用ディレクトリから公開ディレクトリにコピー
$ sudo cp -r ./lib ./*.cgi /var/www

iPhone から
http://192.168.1.63/iPhone.cgi
で PC 同様の番組表が見れて、録画が再生できることを確認。


■10. 「player.pl差し替え版sqlite3対応版」による、見やすく検索できる番組表と番組のMP4変換ダウンロード
[player.pl]

※ここからはドキュメントが付属していないので導入はたいへんになる。

Rubber Duckie: player.pl差し替え版sqlite3対応版一応公開
http://r-duck.blogspot.com/2009/09/playerplsqlite3.html

リンクページは
Rubber Duckie
http://rduck.web.fc2.com/

player.pl差し替え版sqlite3対応版
http://rduck.web.fc2.com/player-sqlite090926.tar.bz

■10.1 player.pl差し替え版sqlite3対応版の設定

$ wget -P ~/Downloads http://rduck.web.fc2.com/player-sqlite090926.tar.bz
$ cd ~/make
$ tar xvf ~/Downloads/player-sqlite090926.tar.bz
$ cd player-sqlite

~/make/player-sqlite/define.pl を参考に。

$ vi define.pl

define.pl を読むと、mp4 を作る場合、以下が必要とある。
TSConverter、MP4Box、FFMpeg、neroAacEnc、neroAacDec
→ あとで余裕があったらやることにする。

$BaseDir = '/usr/local/www/apache22';

$BaseDir = '/var/www';

@iepg_chan = (
"22:NHK総合・神戸",
"13:NHKEテレ1・大阪",
"26:サンテレビ",
"16:MBS毎日放送",
"15:ABCテレビ",
"18:テレビ大阪",
"17:関西テレビ",
"14:よみうりテレビ"
);

$RwIPOD = '_ipod';

#$RwIPOD = '_ipod';

$DBNAME = "/media/disk/oneseg24/epg.db";

$DBNAME = "/usr/local/oneseg24/epg.db";

define.pl の記述どおりの以下フォルダを作成する。
$log_folder = $BaseDir . '/log';
$CacheDir = $BaseDir . '/cache';
$ShotDir = $BaseDir . '/data/simg';
$mp4_folder = $BaseDir . '/data/mp4';

$ sudo -s
# cd /var/www
# mkdir -p log cache data/simg data/mp4
# chmod -R 777 log cache data
# exit

■10.2 player45.swf 導入

$ vi player.pl

player.pl を眺めていると、player45.swf が必要と分かった。
このバージョンのダウンロードページが見つからなかったので、
"player45.swf filetype:swf" で検索して
インストールしている個人のページから適当に入手。
(いろいろ問題ありそうなので、ここには入手先を書かない。 自分で探してください . )
念のため2,3サイトからダウンロードして diff で同一ファイルであることを確認。

$ wget -P ~/Downloads http://どこか1/swf/player45.swf
$ wget -P ~/Downloads http://どこか2/swf/player45.swf
$ wget -P ~/Downloads http://どこか3/swf/player45.swf
$ cd ~/Download
$ diff player45.swf player45.swf.1
$ diff player45.swf player45.swf.2

$ sudo cp ~/Downloads/player45.swf /var/www

■10.3 segwrapperの導入

$ cd ~/make/player-sqlite
$ vi download.pl encode.pl player.pl
segwrapper の場所として perlrtmp のライブラリを定義する場所がある。
# segwrapperの場所
use lib '/opt/perlrtmp/lib';

segwrapper 単体をインストールすることで問題なく動く。

segwrapper.zip - perlrtmp - 『24時間ワンセグ野郎』同梱 segwrapper.pm 改良版 - perl RTMP Server for MPEG2-TS/MP4(H264/AAC) Streaming - Google Project Hosting
http://code.google.com/p/perlrtmp/downloads/detail?name=segwrapper.zip&can=2&q=
http://perlrtmp.googlecode.com/files/segwrapper.zip

$ wget -P ~/Downloads http://perlrtmp.googlecode.com/files/segwrapper.zip
$ cd ~/make
$ unzip -d segwrapper ~/Download/segwrapper.zip
$ cd segwrapper
$ mv segwrapper.pm segwrapper.pm.dos
$ sudo apt-get -y install nkf
$ nkf -w -Lu segwrapper.pm.dos > segwrapper.pm

ここでこのまま使うと、
http://192.168.1.63/player.pl
500 Internal Server Error
$ sudo view /var/log/httpd/error_log
Can't locate Time/JulianDay.pm in @INC
というように出る。

以下ページより、segwrapper が JulianDay.pm を使わないようにするパッチを入手。
Rubber Duckie: segwrapper.pm の脱 inverse_julian_day 化
http://r-duck.blogspot.com/2009/09/segwrapperpm-inversejulianday.html

$ cat > ~/Downloads/segwrapper.pm.patch
^D
$ patch -l < segwrapper.pm.patch (うまくいかない)
上記ページのコピペではタブ→スペース変換がうまくいってないみたいで
うまくパッチがあたらないので手パッチする。
(たいした量じゃないので見れば分かる . )
$ vi segwrapper.pm.patch segwrapper.pm

$ patch -l < ~/Downloads/segwrapper.pm.patch

$ vi segwrapper.pm
my $TSFOLDER = "D:\\TS";

my $TSFOLDER = "/usr/local/oneseg24/ts";

$ sudo -s
# cd ~/make
# cp -r ./segwrapper /usr/local/oneseg24
# exit

$ cd ~/make/player-sqlite
$ vi player.pl encode.pl download.pl
3ファイル、segwrapper の場所を定義
use lib '/opt/perlrtmp/lib';

use lib '/usr/local/oneseg24/segwrapper';

$ sudo cp -r ./* /var/www

■10.4 player.pl 動作確認
[player.pl]

http://192.168.1.63/player.pl
ページ上方の「・時間別番組表から直接選択して抽出」カレンダー表示が動作することを確認。
番組名をクリックして別ウィンドウで番組が再生できることを確認。
ページ下方の「・時間を指定して番組抽出」が動作することを確認。
ページ下方の「・番組表から検索して抽出」が動作することを確認。

ページ下方の「以下のジャンルを抽出」については問題があることが分かっている。
500 Internal Server Error
DBD::SQLite::db prepare failed: no such column: e.dv_id(1) at dbdimp.c line 271 at /var/www/player.pl line 2156.

このエラーは、本環境 Ubuntu 8.04 LTS Server / perl v5.8.8 だけでなく、
Fedora 8 / perl v5.8.8 と、Fedora 9 / perl v5.10.0 で再現した。
Fedora、Ubuntu ともにこれ以上のバージョンでは UOT-100 のデバイスドライバがコンパイルできないため、試していない。
ちなみに、Siano チューナで運用している Ubuntu 10.04 / Perl v5.10.1 ではエラーは再現せず、問題なく動作した。
perl のバージョンに問題があるのではないか?
→気に入らない人は perl のバージョンを上げてみてください。
マニュアルがないと何もできない私は、Ubuntu 8.04 LTS 用の perl v5.10.1 を用意できなかったので諦めた。

番組再生ウィンドウ右下の"・TS download"をクリックすると、
ダウンロードは一瞬で終わり
[WARN] No TS File
という内容の18バイトのファイルができてしまう。
以下ページを参考にして回避する。

数学ハカセの憂鬱: lenny で24時間ワンセグ野郎(その5)
http://blog.cane.jp/article/28857187.html
segwrapper.pm を編集。
$ cd ~/make/segwrapper
$ vi segwrapper.pm
return ($Base."\\".$datstr."\\".$str."_Ch".($Ch+0));

return ($Base."/".$datstr."/".$str."_Ch".($Ch+0));

$ cd ~/make
$ sudo cp -r ./segwrapper /usr/local/oneseg24

番組再生ウィンドウ右下の"TS download"をクリックし、ダウンロード可能か確認する。

これで番組視聴画面から ts ファイルのダウンロードが可能となった。

現在のところ、
番組再生ウィンドウ左下の「・PC用MP4作成」をクリックすると
リロードされたうえに「■MP4作成に失敗しました」と出る。

以下、MP4変換環境構築はけっこう面倒なので、
Windows で視聴しているなら PC 用 MP4 はその端末で
ダウンロードした ts ファイルを TSConverter にかければよいでしょう。

■10.5 PC用MP4作成対応
端末が Windows じゃないから MP4 変換してダウンロードしたいという人、
Windows だけど MP4 変換できたら嬉しいよねという人に。

・TSConverter、MP4Box 導入
以下ページを参考に。
何をやっているのか分からないので説明は省く。
Linuxでワンセグ録画 その4 (TSストリームをMP4ファイルに変換) | ぷちのいず
http://petit-noise.net/blog/20110611/linux%E3%81%A7%E3%83%AF%E3%83%B3%E3%82%BB%E3%82%B0%E9%8C%B2%E7%94%BB-%E3%81%9D%E3%81%AE4-ts%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%A0%E3%82%92mp4%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E5%A4%89%E6%8F%9B

$ wget -P ~/Downloads http://theremin.hostoi.com/file/TSConverter_9_01.zip
$ wget -P ~/Downloads http://rduck.web.fc2.com/TSConverter_4_26_patch.tar.bz2
$ wget -P ~/Downloads http://petit-noise.net/system/files/TSConverter-linux.patch
$ cd ~/make
$ unzip ~/Downloads/TSConverter_9_01.zip
$ cd TSConverter
$ unzip Source.zip
$ tar xvf ~/Downloads/TSConverter_4_26_patch.tar.bz2
$ cd Source
$ nkf -e -Lu TSConverter.cpp > TSConverter.c
$ mv TSConverter.h TSConverter.h.dos
$ nkf -Lu TSConverter.h.dos > TSConverter.h
$ patch -p1 < ../TSConverter090426.patch
$ patch -p0 < ~/Downloads/TSConverter-linux.patch
$ gcc -o TSConverter TSConverter.c
In file included from TSConverter.c:120:
TSConverter.h:12:6: warning: no newline at end of file
TSConverter.c: In function ‘GetSubtraction64’:
TSConverter.c:619: warning: integer constant is too large for ‘long’ type
$ sudo cp TSConverter /usr/local/bin

・TSConverterが必要としている MP4Box を導入
$ sudo apt-get -y install subversion
$ cd ~/make
$ svn co https://gpac.svn.sourceforge.net/svnroot/gpac/trunk/gpac
Error validating server certificate for 'https://gpac.svn.sourceforge.net:443':
- The certificate is not issued by a trusted authority. Use the
fingerprint to validate the certificate manually!
Certificate information:
- Hostname: *.svn.sourceforge.net
- Valid: from Sat, 25 Feb 2012 23:58:41 GMT until Sun, 31 Mar 2013 19:51:44 GMT
- Issuer: GeoTrust, Inc., US
- Fingerprint: 0b:11:76:de:db:4c:74:72:cb:01:49:7d:13:70:c2:f1:13:7b:cb:bf
(R)eject, accept (t)emporarily or accept (p)ermanently? t
(中略)
Checked out revision 3960.(2012/03/22時点)

※プロキシ環境にいる場合は
could not connect to server
$ vi +/^[global ~/.subversion/servers
[global]
http-proxy-host = プロキシのホスト名またはIPアドレス
http-proxy-port = プロキシのポート
としてやりなおす。

$ cd gpac
$ ./configure --static-mp4box
error: zlib not found on system or in local libs
と出るので zlib ライブラリをインストールしてやりなおし。
$ sudo apt-get -y install zlib1g-dev
$ ./configure --static-mp4box
pkg-config not found, configure may detect wrong libraries

$ make -j5
$ sudo cp bin/gcc/MP4Box /usr/local/bin

・TSConverterが必要としている DteEdit を導入
$ cd ~/make
$ svn checkout http://svn.sourceforge.jp/svnroot/rec10/tstools/DtsEdit
(中略)
Checked out revision 929.(2012/03/22時点)
$ wget -P ~/Downloads http://rduck.web.fc2.com/DtsEdit_20081009_patch.tar.bz2
$ cd DtsEdit
$ mkdir patch
$ cd patch
$ tar xvf ~/Downloads/DtsEdit_20081009_patch.tar.bz2
$ cd ..
$ for file in src/{*.cpp,*.h}; do echo $file; nkf -wd $file > $file.tmp; mv $file.tmp $file; done
$ cd src
$ nkf -w ../patch/DtsEdit.patch | patch -p1
$ rm stdint.h
$ vi +/gpac Makefile
$(CPP) -o $@ $(OBJS) -lgpac -L/usr/local/lib

$(CPP) -o $@ $(OBJS) /home/oneseg24/make/gpac/bin/gcc/libgpac_static.a -lz -L/usr/local/lib

$ make
$ sudo cp DtsEdit /usr/local/bin

・TSConverter、MP4Box の動作確認。
$ cd ~/make/player-sqlite
$ grep TSConverter *.pl
ここに出てくる TSConverter を呼んでいる処理が動くか確認する。
$ cd ~/make
$ TSConverter test0.ts
test0.mp4 が生成されているか確認。

$ cd ~/make/player-sqlite
$ grep MP4Box *.pl
ここに出てくる MP4Box を呼んでいる処理が動くか確認する。
$ cd ~/make
$ TSConverter test0.ts
$ TSConverter test1.ts
$ MP4Box -quiet -ipod -add test0.mp4 test1.mp4
エラーが出ていないことを確認。

・設定
$ cd ~/make/player-sqlite
$ vi define.pl
$TSConverter = '/opt/bin/TSConverter';

$TSConverter = '/usr/local/bin/TSConverter';

$MP4Box = '/usr/local/bin/mp4box';

$MP4Box = '/usr/local/bin/MP4Box';

DtsEditは少し離れているので注意。
$startCmd = 'export DTSEDIT=/opt/bin/DtsEdit; ';

$startCmd = 'export DTSEDIT=/usr/local/bin/DtsEdit; ';

TSConverter のオプション。
$TSCO{22} = '-r -l'; # NHK総合・神戸
$TSCO{13} = '-r -l'; # NHKEテレ1・大阪
$TSCO{26} = '-r -l'; # サンテレビ
$TSCO{16} = '-r -l'; # MBS毎日放送
$TSCO{15} = '-r -l'; # ABCテレビ
$TSCO{18} = '-r -l'; # テレビ大阪
$TSCO{17} = '-r -l'; # 関西テレビ
$TSCO{14} = '-r -l'; # よみうりテレビ

$ sudo cp define.pl /var/www

番組再生ウィンドウ右下の「・PC用MP4作成」をクリックし、しばらく待つ。
自動的にリロードされ
「■ TSを抽出中です。おまちください..(TS/???MBytes)」
「■ TSをMP4に変換中です。おまちください...」
「■ TSをMP4に変換中です。おまちください...(tmp/???MBytes)」
「■ PC向け最終処理発行中です。おまちください...」
と変化し、最終的にリンクが「・PC用MP4 (???MB)」となる。
そこからダウンロード可能か確認する。MP4 プレイヤーで再生が可能か確認する。


■11. 字幕対応
[caption.pl]

Rubber Duckie: アクセシビリティ、または24時間ワンセグ野郎字幕対応
http://r-duck.blogspot.com/2009/09/24.html
http://rduck.web.fc2.com/caption091002.tar.bz2

ぱぱネット(仮)様製作によるdumpeitにより、
TS ファイルから SUB ファイルを作る必要がある。
ということで、以下が紹介されている。

ぱぱネット(仮)(2008-12-24)
http://linux.papa.to/?date=20081224#p07
http://linux.papa.to/image/dumpeit_win33_20090106.zip

■11.1 字幕データ抽出 dumpeit 導入
$ wget -P ~/Downloads http://linux.papa.to/image/dumpeit_win32_20090106.zip
$ cd ~/make
$ unzip ~/Downloads/dumpeit_win32_20090106.zip
$ cd dumpeit
$ make
$ sudo cp dumpeit /usr/local/bin
$ cd /usr/local/oneseg24/ts
$ sudo dumpeit *

■11.2 字幕表示 caption.pl 導入
$ wget -P ~/Downloads http://rduck.web.fc2.com/caption091002.tar.bz2
$ cd ~/make
$ mkdir caption091002
$ cd caption091002
$ tar xvf ~/Downloads/caption091002.tar.bz2
$ vi caption.091002.pl
my $TSFOLDER='/media/disk/one24';

my $TSFOLDER='/usr/local/oneseg24/ts';
$ cp caption.091002.pl caption.pl
$ sudo cp caption.pl unk.txt /var/www

$ cd ~/make/player-sqlite/
$ vi player.pl
上記ページを参考に、 request.flv を呼んでいる4箇所に、オプションとして以下を追記。
fullscreen=true

fullscreen=true&plugins=captions-1&captions.file=caption.pl?file=$request.xml
$ sudo cp player.pl /var/www

番組表から字幕番組を選んで再生し、字幕が表示されるか確認する。
NHK の番組は字幕が多いので確認しやすい。

■11.3 字幕データ作成の自動処理
番組の TS ファイルごとに 字幕の SUB ファイルを生成するのだが、
TS ファイルは1時間ごとに分けられているので
ファイル作成完了直後に処理を走らせるのがよいかも。

毎時0分に TS ファイルの作成が完了するので、できたての TS ファイルを処理するには
毎時59分に日時覚えて、ちょっと待って(毎時0分を過ぎたら)実行したらよいんじゃなイカ?

$ sudo -s
# cat > /usr/local/oneseg24/caption.sh
#!/bin/sh
export ymd=`/bin/date +"%y%m%d"`
export H=`/bin/date +"%H"`
/bin/sleep 120
/usr/local/bin/dumpeit /usr/local/oneseg24/ts/$ymd/$ymd$H"_Ch"??.ts
^D
# chmod 755 /usr/local/oneseg24/caption.sh

# crontab -e
59 * * * * /bin/sh /usr/local/oneseg24/caption.sh

■11.4 字幕対応ソフトについての余談
上記のものより新しい dumpeit_20110718.zip を試してみると、
dvbstream と連携してリアルタイムに SUB ファイルを作成してくれるようだ。
(上の cron での一時間おきに字幕作成対応なんてしなくても即字幕作成してくれる)
ただ、SUB ファイルの文字コードと記述内容が違っていて、
そのまま上記 caption.pl との組み合わせでは字幕が化けてしまう。
(コンパイルオプションで文字コードは変更可能みたいだが字幕に PID の文字列が追加されてしまう)
ちゃんと見れる組み合わせがあるんだろうけど
caption.pl の新しいバージョンは見つけられなかった...

上の cron 対応だと、正時を回って dumpeit の処理が終わらないと字幕が見れないわけだけど、
そんなに困らないのでよしとした。


■12. トラブルシューティング

・UOT-100
USB HUB との相性の問題がかなりあるらしい。
USB HUB でトライアンドエラーして苦労するよりかは
PC の 拡張スロットに余裕があれば多ポート USB 拡張ボードを入れるほうがよい。
玄人志向 - 商品一覧 >> セレクトシリーズ >> インターフェース >> USB >> USB2.0 >> USB2.0N6P-PCI
http://www.kuroutoshikou.com/modules/display/?iid=162

・dvbstream
電波状況が悪いと ts のファイルサイズが 0 のままだったりする。
電波状況がよくないと ts ができても再生できない場合がある。
電波状況については、dvbstream の stderr 出力から "Signal strength" や "SNR" を見る
アンテナ線をトライアンドエラーして苦労するよりブースターを入れるほうが改善する。

・TSダウンロード
NHK に顕著だが、番組の切り替わりに音声モードが変わる(二カ国語→普通など)場合に
再生画面では音声が聞こえるが、ダウンロードした TS では音声が聞こえない場合がある。
→ すいませんどうしたらいいか分かりません。あきらめてください。
番組単位ではなくなるが、毎時の TS ファイルを ftp とかで出したら聞けなくもない。

・MP4作成
MP4 が作成されない場合
/var/www の log cache data が 777 になっているか?

・dumpeit
字幕取得を後日に手動でかけると、TS フォルダの mtime が変わってしまい
削除スクリプトの find で引っかからなくなり削除されず、ディスクを圧迫することがある。
touch -t MMDDhhmm などで各年日時フォルダの mtime を変更すると回避できる。

・caption
字幕放送と明記されており、sub ファイルにデータが EUC で作成されるにもかかわらず
再生画面に字幕が出ないケースを何度か確認した。(キルミーベイベーなど)
→ すいませんどうしたらいいか分かりません。あきらめてください。


■13. リファレンス
OneSeg24 for Linux
http://code.google.com/p/oneseg24/

UOT-100 driver for Linux Project Top Page - SourceForge.JP
http://sourceforge.jp/projects/uot100/

DVB tools | Free software downloads at SourceForge.net
http://sourceforge.net/projects/dvbtools/

perlrtmp - perl RTMP Server for MPEG2-TS/MP4(H264/AAC) Streaming
http://code.google.com/p/perlrtmp/

Rubber Duckie: player.pl差し替え版sqlite3対応版一応公開
http://r-duck.blogspot.com/2009/09/playerplsqlite3.html

segwrapper.zip - perlrtmp - 『24時間ワンセグ野郎』同梱 segwrapper.pm 改良版 - perl RTMP Server for MPEG2-TS/MP4(H264/AAC) Streaming - Google Project Hosting
http://code.google.com/p/perlrtmp/downloads/detail?name=segwrapper.zip&can=2&q=
http://perlrtmp.googlecode.com/files/segwrapper.zip

Rubber Duckie: segwrapper.pm の脱 inverse_julian_day 化
http://r-duck.blogspot.com/2009/09/segwrapperpm-inversejulianday.html

数学ハカセの憂鬱: lenny で24時間ワンセグ野郎(その5)
http://blog.cane.jp/article/28857187.html

Linuxでワンセグ録画 その4 (TSストリームをMP4ファイルに変換) | ぷちのいず
http://petit-noise.net/blog/20110611/linux%E3%81%A7%E3%83%AF%E3%83%B3%E3%82%BB%E3%82%B0%E9%8C%B2%E7%94%BB-%E3%81%9D%E3%81%AE4-ts%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%A0%E3%82%92mp4%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E5%A4%89%E6%8F%9B

Rubber Duckie: アクセシビリティ、または24時間ワンセグ野郎字幕対応
http://r-duck.blogspot.com/2009/09/24.html

ぱぱネット(仮)(2008-12-24)
http://linux.papa.to/?date=20081224#p07


y-katow web home
y-katow@iris.eonet.ne.jp