機械バカ一代

機械モノおたくのたわごと。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告 |

Debian wheezy ノートにFriio+epgrec+mediatombで、Vierraから快適に録画(その3)。

epgrec_141217_01.jpg

"\( ̄^ ̄)゛ハイ!!・・・その3です。

本日は、epgrecのインストールと動作確認までのお話。


--------
録画するんだから、時計はしっかり合わせておきましょう。

#aptitude install ntpd

で、簡単インストール。

/etc/ntpd.confの編集:


21 #server 0.debian.pool.ntp.org iburst <--コメントアウト
22 #server 1.debian.pool.ntp.org iburst <--コメントアウト
23 #server 2.debian.pool.ntp.org iburst <--コメントアウト
24 #server 3.debian.pool.ntp.org iburst <--コメントアウト
25
26 server ntp.nict.jp <--追加ここから-------
27 server jp.pool.ntp.org
28 server ntp1.jst.mfeed.ad.jp
29 server ntp2.jst.mfeed.ad.jp
30
31 # 1. 立行政法人情報通信研究機構(NICT) の公開NTPサーバー
32 # 2. NTP POOL PROJECTの公開NTPサーバー
33 # 3. インターネットマルチフィード(MFEED) 時刻情報提供サービス Pri
34 # 4. インターネットマルチフィード(MFEED) 時刻情報提供サービス Sec<--追加ここまで--

#/etc/init.d/ntpd restart

で、再起動したら」・・・
一応、確認しておく・・・

# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*ntp-b2.nict.go. .NICT. 1 u 934 1024 377 42.755 -11.901 8.862
-balthasar.gimas 5.125.62.87 3 u 233 1024 377 51.924 -16.139 9.534
+ntp1.jst.mfeed. 172.29.1.100 2 u 796 1024 377 44.952 -10.516 6.016
+ntp2.jst.mfeed. 172.29.1.50 2 u 534 1024 377 48.703 -14.039 10.035
--------

録画用ディレクトリの下準備

バスパワー駆動のUSBハブで接続、HDD2台、計3.5TB

1.5TBのHDDは、残り500GBくらい。
2.0TBのHDDは、残り1.5TBくらいあるので・・・

2.0TBのHDDにnewというディレクトリを作って、そこに録画ファイルをブチ込む事にする。

まずは、自動マウントを確認して、fstabにUUIDで追加-->次回から自動でマウント。

# mount
/dev/sdc1 on /media/HDD15T type ext4 (rw,relatime,user_xattr,acl,barrier=1,data=ordered)
/dev/sdb1 on /media/HDD2T type ext4 (rw,relatime,user_xattr,acl,barrier=1,data=ordered)

( ̄∧ ̄)(_ _)フムフム・・・

# ls -l /dev/disk/by-uuid/
合計 0
lrwxrwxrwx 1 root root 10 12月 16 11:45 1102f174-39be-4ccf-84f4-2421b34a62ed -> ../../sda1
lrwxrwxrwx 1 root root 10 12月 16 11:44 352a8fa6-d8db-4e90-b83a-bc84176764d3 -> ../../sda5
lrwxrwxrwx 1 root root 10 12月 16 11:44 b4c50f35-97c0-4674-bc68-c32f3759a5a9 -> ../../sdb1
lrwxrwxrwx 1 root root 10 12月 16 11:44 dec08d6c-292b-441a-b3f0-a156b5738520 -> ../../sdc1

で、

#cd /etc
#vi fstab

---以下を追加---
UUID=dec08d6c-292b-441a-b3f0-a156b5738520 /media/HDD2T ext4 rw,noauto 0 0
UUID=b4c50f35-97c0-4674-bc68-c32f3759a5a9 /media/HDD15T ext4 rw,noauto 0 0

-------------

/etc/udev/rules.d/に2個のファイルを作る。

#vi 80-usbhdd_1.rules
------内容-------
ACTION=="add", ENV{DEVTYPE}=="partition", ENV{ID_FS_UUID}=="dec08d6c-292b-441a-b3f0-a156b5738520" RUN+="/bin/mount -U $env{ID_FS_UUID}"
-------------

#vi 81-usbhdd_2.rules
------内容-------
ACTION=="add", ENV{DEVTYPE}=="partition", ENV{ID_FS_UUID}=="b4c50f35-97c0-4674-bc68-c32f3759a5a9" RUN+="/bin/mount -U $env{ID_FS_UUID}"
-------------

#reboot

で、前回と同じディレクトリにマウントされている事を確認。
-------------

エンコードやら、YoutubeからのDLファイル、DVDのリッピングなんかで色々とファイルのやりとりもあるので・・

proftpdの設定:

# aptitude install proftpd-basic

設定ファイル:/etc/proftpd/proftpd.conf

Anonymousユーザーでログインできる:

<Anonymous>~</Anonymous>
の間にある#(コメントアウト)を削除

LAN内部からのみログイン可能:

<Limit LOGIN>
 Order allow, deny
Allow from 127.0.0.1, 192.168.XX.0/24, 192.168.1.0/24
Deny from all
</Limit LOGIN>

Resume機能を有効化:

# Allow clients to resume downloads (default on)
AllowRetrieveRestart on

その他の設定:

/etc/hosts.allow
------------
in.proftpd: 192.168.1.
# WANに公開する場合
in.proftpd: ALL
------------

アクセスを許可するホストを記入する。

/etc/hosts.deny
------------
in.proftpd: ALL
------------

xinetdを再起動

# /etc/init.d/xinetd restart

--------

epgrecのインストール:

epgrec自体は、ほとんどがPHPとシェルスクリプトで書かれたものなので、
コンパイルなどは必要なし、apache2のルート・ディレクトリである/var/www/でgit cloneすれば、
すんなり入ります。

/var/www# git clone https://github.com/stz2012/epgrec.git
Cloning into 'epgrec'...
remote: Counting objects: 321, done.
remote: Total 321 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (321/321), 347.39 KiB | 132 KiB/s, done.
Resolving deltas: 100% (111/111), done.

ほらね。

まずは、epgrecのルートをwww-dataのグループに加えます。

/var/www# chown -R www-data:www-data /var/www/epgrec

続いて各種パーミッションの設定。
/var/www/epgrec# chmod 777 cache templates_c video thumbs settings
/var/www/epgrec# chmod 666 thumbs/index.html video/index.html

録画開始スクリプトのリネームとパーミッションの設定
/var/www/epgrec# cp do-record.sh.friio do-record.sh
/var/www/epgrec# chmod 755 do-record.sh

設定ファイルのリネーム

/var/www/epgrec# cp config.php.sample config.php
/var/www/epgrec# vi config.php

まぁ、地デジのチャンネル設定くらいしかやることはないんですが・・・
どーせ黒Friioじゃ地デジの受信もできないし・・

// settings/gr_channel.phpが作成された場合、
// config.php内の$GR_CHANNEL_MAPは無視されます

// 首都圏用地上デジタルチャンネルマップ
// 識別子 => チャンネル番号
/*
$GR_CHANNEL_MAP = array(
"GR27" => "27", // NHK
"GR26" => "26", // 教育
"GR25" => "25", // 日テレ
"GR22" => "22", // 東京
"GR21" => "21", // フジ
"GR24" => "24", // テレ朝
"GR23" => "23", // テレ東
// "GR20" => "20", // MX TV
// "GR18" => "18", // テレ神
"GR30" => "30", // 千葉
// "GR32" => "32", // テレ玉
"GR28" => "28", // 大学
);
*/
// 大阪地区デジタルチャンネルマップ(参考)
$GR_CHANNEL_MAP = array(
"GR24" => "24", // NHK
"GR13" => "13", // 教育
"GR16" => "16", // 毎日
"GR15" => "15", // 朝日
"GR17" => "17", // 関西
"GR14" => "14", // 読売
// "GR18" => "18", // テレビ大阪
);

こんな感じ。・・(うちの辺りはテレビ大阪は入らないしね。。)

録画用ディレクトリとシンボリックリンクの作成。

さっきマウントした外付けHDDに録画を落とすディレクトリを作ります。

# cd /media/HDD2T
# mkdir new
# chmod 777 new

epgerecはデフォルトでルート以下のVideoに録画ファイルを保存するようになっているので、
最初にあるディレクトリを削除して、シンボリックリンクを貼ります。
# cd /var/www/epgrec
# rm -rf video

# ln -s /media/HDD2T/new ./video

# ls -lap ./video
lrwxrwxrwx 1 www-data www-data 17 12月 18 12:03 ./video -> /media/HDD2T/new/

番組表更新のcronジョブを登録します。

/var/www/epgrec# cp cron.d/getepg /etc/cron.d/

ここまで出来たら、リモート(居間のwin7ノート)からブラウザを立ち上げて。
※ここまでも、ぜ~んぶTeraTermのSSHでやってたんだけど・・・・

http://[録画サーバーのIPアドレス]/epgrec

にアクセスすると、初期設定が始まります。
ここで、Mysqlのユーザー名、パスワード、その他いろいろ設定して・・・・

最終段階で、番組表の取得・・・・・・・・

が・・・うんともすんとも言わない・・・・・orz

さて・・

****getepg.phpが、動かん件。*****

上で、recfriioの動作とepgdumpの動作確認はしている訳だから、

getepg.phpを、( --) ・・・・・・ジィ-・・・・と眺めてみても、
何もおかしい所は無い。。。。

しぇば・・

do-record.shの動作検証をしてみます。

OUTPUT=test.ts CHANNEL=BS09_0 DURATION=30 TUNER=0 MODE=0 TYPE=GR /var/www/epgrec/do-record.sh

シーー( ̄、 ̄*)ーーン・・・・・・・あれ、動かない。。。

動かなかったら、do-record.shを編集して、とりあえず動かす。
そういえば・・・recfriioをコンパイルした時に、--stripを使わないオプションでコンパイルしたなぁ・・・・

------do-record.shの編集-----

#!/bin/bash
echo "CHANNEL : $CHANNEL"
echo "DURATION: $DURATION"
echo "OUTPUT : $OUTPUT"
echo "TUNER : $TUNER"
echo "TYPE : $TYPE"
echo "MODE : $MODE"
#echo "SID : $SID" <---ここが肝。(--sidと--stripはsegmentation faultの基なので使えない)

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

if [ ${MODE} = 0 ]; then
# MODE=0<82>A<82>I<95>K<82>,<96>3<89>A<8d>H<82>ITS<82>d<93>f<82>≪<8f>o<82>・<82>±<82>A
$RECORDER --b25 $CHANNEL $DURATION ${OUTPUT} >/dev/null <---ここが肝。
# $RECORDER --b25 --strip --sync --sid epg $CHANNEL $DURATION ${OUTPUT} >/dev/null<---元の構文。

elif [ ${MODE} = 1 ]; then
# <96>U<93>I<82>ISID<82>I<82>Y<8e>c<82>・
$RECORDER --b25 $CHANNEL $DURATION ${OUTPUT} >/dev/null <---ここが肝。
# $RECORDER --b25 --strip --sync --sid $SID $CHANNEL $DURATION ${OUTPUT} >/dev/null<---元の構文。

# mode 2 example is as follows
#elif [ ${MODE} = 2 ]; then
# $RECORDER $CHANNEL $DURATION ${OUTPUT}.tmp.ts --b25 --strip
# ffmpeg -i ${OUTPUT}.tmp.ts ... <93>K<93><96><82>E<83>I<83>v<83>V<83><87><83><93> ${OUTPUT}
fi

---------------------

動いた。

getepg.phpから、recfriioでtsファイルを/tmpに上げて、epgdumpでxmlに変換してます。
1時間ほどで、番組表が埋まって・・・

とりあえず予約録画が出来るようになった。。

試しに、短い番組をいくつか予約録画してみます。(ちょうど無料試聴の日)だったのは幸運。

・・・・が、予約録画が失敗してこける・・・


1)チェックポイント:

# atq

7 Mon Dec 22 05:57:00 2014 a www-data
8 Wed Dec 24 05:57:00 2014 a www-data
13 Sat Dec 27 06:27:00 2014 a www-data
9 Thu Dec 25 05:57:00 2014 a www-data
12 Sat Dec 27 05:57:00 2014 a www-data
10 Fri Dec 26 05:57:00 2014 a www-data

予約は入ってるじゃん。

# at -c 7

#!/bin/sh
# atrun uid=33 gid=33
# mail www-data 0
umask 22
MODE=0; export MODE
OUTPUT=/var/www/epgrec/video/\ほにゃらら~ほにゃ\軆__#51CS221222.ts; export OUTPUT
THUMB=/var/www/epgrec/thumbs/\ほにゃらら~ほにゃ\軆__#51CS221222.ts.jpg; export THUMB
CHANNEL=CS22; export CHANNEL
FORMER=20; export FORMER
DURATION=1820; export DURATION
TUNER=0; export TUNER
TYPE=CS; export TYPE
SID=297; export SID
PWD=/media/HDD2T/new; export PWD
FFMPEG=/usr/bin/ffmpeg; export FFMPEG
cd /media/HDD2T/new || {
echo 'Execution directory inaccessible' >&2
exit 1
}
/var/www/epgrec/recorder.php 7

---------------

(〟-_・)ン?・・・・・・SIDでこけてるのか??

※・・特にCSの録画は致命的・・・という事は・・・・・!!!

まず、CSの仕組みについてお勉強。

※CSを録画したTSファイルには複数の番組情報が格納されております。
よって、例えば以下のコマンドの場合。

$ recfriio --b25 CS20 100 testCS20.ts

以下の番組をまとめて録画した事になるわけで。

* 258ch:フジテレビ739
* 302ch:フジテレビ721
* 332ch:アニマックス
* 340ch:ディスカバリーチャンネル
* 341ch:アニマルプラネット

出力されたtestCS20.tsには5つの番組情報がまとめて入っているため、録画完了あとに見たい番組を分離する必要があるわけです。

そのためには「tssplitter_lite」というツールを使います。

以下、導入手順。

・ツールの取得
#wget http://hp.vector.co.jp/authors/VA038175/download/tssplitter_lite.zip

・zipの展開
# unzip tssplitter_lite.zip

・解凍先へ移動
# cd tssplitter_lite

・いつもの・・・・make.
# make

・いつもの場所へコピー
# cp tssplitter_lite/tssplitter_lite /usr/local/bin


tssplitter_liteコマンド構文:
tssplitter_lite (オリジナルのTSファイル名) (出力TSファイル名) (SID)

ほな・・・
無いものは~~作るしかな~~い。。

新しいdo-record.sh
------------

1  #!/bin/sh
2  echo "CHANNEL : $CHANNEL"
3  echo "DURATION: $DURATION"
4  echo "OUTPUT : $OUTPUT"
5  echo "TUNER : $TUNER"
6  echo "TYPE : $TYPE"
7  echo "MODE : $MODE"
8  echo "SID : $SID"
9
10 RECORDER=/usr/local/bin/recfriio
11 B25=/usr/local/bin/b25
12 SPLIT=/usr/local/bin/tssplitter_lite
13
14 OUTTMP=${OUTPUT}.tmp.ts
15
16 if [ ${MODE} -eq 0 ]; then
17 $RECORDER --b25 --strip $CHANNEL $DURATION ${OUTPUT} >/dev/null
18 elif [ ${MODE} -eq 1 ]; then
19 $RECORDER --b25 --strip $CHANNEL $DURATION ${OUTTMP} >/dev/null
20 if [ ${TYPE} = "CS" ]; then
21 $SPLIT ${OUTTMP} ${OUTPUT} ${SID}
22 elif [ ${TYPE} = "BS" ]; then
23 cp ${OUTTMP} ${OUTPUT}.ts
24
25 fi
26 #中間ファイル削除
27 rm ${OUTTMP}
28 fi

------------

動作確認1

# OUTPUT=ディスカバリーTEST.ts CHANNEL=CS6 DURATION=30 TUNER=0 MODE=1 TYPE=CS SID=340 /var/www/epgrec/do-record.sh

動作確認2

# OUTPUT=BSプレミアムーTEST.ts CHANNEL=BS15_1 DURATION=30 TUNER=0 MODE=1 TYPE=BS SID=340 /var/www/epgrec/do-record.sh

config.phpも編集。

38 // 録画モード(option)
39
40 $RECORD_MODE = array(
41 // ※ 0は必須で、変更不可です。
42 0 => array(
43 'name' => 'Full TS', // モードの表示名
44 'suffix' => '.ts', // ファイル名のサフィックス
45 ),
46
47 1 => array(
48 'name' => 'BS_CS', // 最小のTS
49 'suffix' => '_BCS.ts', // do-record.shのカスタマイズが必要
50 ),
51
52 /* Example is as follows.
53 2 => array(
54 'name' => '12Mbps MPEG4',
55 'suffix' => '.avi',
56 ),
57 */

------------
----12月29日追記---------

上記の方法で、Segmentation faultを回避すると、(当たり前の話なのだが・・・)
連続録画でコケる事になった。

要は、Full_tsの録画が終わってから、ts_splitterに渡って、さらに一時ファイルを削除しているので、
すべてのプロセスが終了するまでデバイスはビジー状態になってしまう為なのだが。。。

そんな訳で、やはりMakefile側でts_splitter内蔵のオプションは選択しておいて、
recfriio に、--split --sid で直接指示できるのが最も懸命な回避方法である。
という訳で、/recfriior5/tssplitter_lite.hppを弄ってみたところ、一応正常に動作している。

簡単に言えば、

u_char buffer[32*1024*1024];
から、
u_char buffer[4*1024*1024];

に変更して、Makefileのoptionsを以下のようにしてコンパイルすれば一応正常に動作する。

# options
B25 = -DB25
#HDUS = -DHDUS
#UDP = -DUDP
#HTTP = -DHTTP
TSSL = -DTSSL

※しかし、2時間以上の番組やフルHD番組などのスプリットではメモリーリークの可能性は捨てきれない。
要は、「バンドエイド・ジョブ」(暫定対策)だったりする。

もう少しソースを良く読んで、malloc使ってメモリをフルに使えるようにしてやらないといかんのではなかろうか。。。
---(まぁ、暇を見てソースをじっくり眺めてみよう。。。)----

以下、パッチねん。

*** tssplitter_lite.hpp_orig 2014-12-29 16:11:21.976967363 +0900
--- tssplitter_lite.hpp 2014-12-29 22:13:51.863916190 +0900
***************
*** 65,71 ****
typedef struct _splitbuf_t
{
int size;
! u_char buffer[32*1024*1024];
} splitbuf_t;

splitter* split_startup(char *sid);
--- 65,71 ----
typedef struct _splitbuf_t
{
int size;
! u_char buffer[4*1024*1024];
} splitbuf_t;

splitter* split_startup(char *sid);



---------12月29日追記ここまで--------

・tsファイル名の厄介な文字の削除
OSによっては正しく扱えない文字を「_」に置換する。
# vi /var/www/epgrec/Reservation.class.php

mb_regex_encoding ('UTF-8');
$filename = mb_ereg_replace("[\./\*:<>\?\\|()\'\"&]","_", trim($filename) );
$filename = mb_ereg_replace("[-×~]","_", trim($filename) );
$filename = mb_ereg_replace(" ","_", $filename );
$filename = mb_ereg_replace(" +","_", $filename );
$filename = mb_ereg_replace("/\x{301c}/u","_", trim($filename) );
$filename = mb_ereg_replace("/\x{ff5e}/u","_", trim($filename) );
$filename = ereg_replace("\xe2\x88\x92", "\xef\xbc\x8d", $filename);
$filename = ereg_replace("\xe3\x80\x9c", "\xef\xbd\x9e", $filename);

$filename = mb_ereg_replace("!","_", $filename );
$filename = mb_ereg_replace("/\x{ff01}/u","_", trim($filename) );
$filename = mb_ereg_replace("/\x{0021}/u","_", trim($filename) );

※250行目あたりに追加

-------(付録)全国BS/CSチャンネルリスト-----

#
## 関西
#
# 13 13 NHK(Eテレ)
# 14 14 よみうりテレビ
# 15 15 朝日放送
# 16 16 毎日放送
# 17 17 関西テレビ
# 18 18 テレビ大阪
# 20 20 びわ湖放送orテレビ和歌山
# 22 22 NHK神戸
# 23 23 NHK和歌山(総合)orKBS京都
# 24 24 NHK大阪(総合)
# 25 25 NHK京都(総合)
# 26 26 NHK大津(総合)orサンテレビ
# 29 29 奈良テレビ
# 31 31 NHK奈良(総合)

## BS(全国)

B1 ,BS01_0: BS朝日
B2 ,BS01_1: BS-TBS
B3 ,BS03_0: WOWOWプライム
B4 ,BS03_1: BSジャパン
B5 ,BS05_0: WOWOWライブ
B6 ,BS05_1: WOWOWシネマ
B7 ,BS07_0: スターチャンネル2/3
B8 ,BS07_1: BSアニマックス
B9 ,BS07_2: ディズニーチャンネル
B10,BS09_0: BS11
B11,BS09_1: スターチャンネル1
B12,BS09_2: TwellV
B13,BS11_0: FOX bs238
B14,BS11_1: BSスカパー!
B15,BS11_2: 放送大学
B16,BS13_0: BS日テレ
B17,BS13_1: BSフジ
B18,BS15_0: NHK BS1
B19,BS15_1: NHK BSプレミアム
B20,BS17_0: 地デジ難視聴1(NHK/NHK-E/CX)
B21,BS17_1: 地デジ難視聴2(NTV/TBS/EX/TX)
B22,BS19_0: グリーンチャンネル
B23,BS19_1: J SPORTS 1
B24,BS19_2: J SPORTS 2
B25,BS21_0: IMAGICA BS
B26,BS21_1: J SPORTS 3
B27,BS21_2: J SPORTS 4
B28,BS23_0: BS釣りビジョン
B29,BS23_1: 日本映画専門チャンネル
B30,BS23_2: D-Life

## CS(全国)

SID CH NAME

296 CS2 TBSチャンネルHD
298 CS2 テレ朝チャンネルHD
299 CS2 朝日ニュースターHD

100 CS4 e2プロモ
227 CS4 ザ・シネマ
331 CS4 カートゥーン
334 CS4 ディズニーXD

221 CS6 東映チャンネル
222 CS6 衛星劇場
223 CS6 チャンネルNECO
250 CS6 sky・Aスポーツ+
254 CS6 GAORA
340 CS6 ディスカバリー
341 CS6 動物ch/アニプラ

55 CS8 ショップチャンネル
335 CS8 キッズステーション

800 CS10 スカチャン0
801 CS10 スカチャン1
802 CS10 スカチャン2
805 CS10 スカチャン3

323 CS12 MTV
324 CS12 ミュージック・エア
353 CS12 BBCワールド
354 CS12 CNNj

292 CS14 時代劇専門chHD
293 CS14 ファミリー劇場HD
310 CS14 スーパー!ドラマHD

290 CS16 SKYSTAGE
305 CS16 チャンネル銀河
311 CS16 AXN
333 CS16 AT-X
342 CS16 ヒストリーチャンネル

240 CS18 ムービープラスHD
262 CS18 ゴルフネットHD
314 CS18 女性ch/LaLa

307 CS20 フジテレビONE
308 CS20 フジテレビTWO
309 CS20 フジテレビNEXT

161 CS22 QVC
325 CS22 エムオン!
343 CS22 ナショジオチャンネル
351 CS22 TBSニュースバード

257 CS24 日テレG+HD
300 CS24 日テレプラス
315 CS24 FOXプラス
321 CS24 スペシャプラス
350 CS24 日テレNEWS24
362 CS24 旅チャンネル

-------チャンネルリスト-----

スポンサーサイト
Linux | コメント:0 | トラックバック:0 |
<<Debian wheezy ノートにFriio+epgrec+mediatombで、Vierraから快適に録画(その4)。 | HOME | Debian wheezy ノートにFriio+epgrec+mediatombで、Vierraから快適に録画(その2)。>>

この記事のコメント

コメントの投稿















コメント非公開の場合はチェック

この記事のトラックバック

| HOME |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。