Shino's Bar

お家で使うLinuxtux

予約録画サーバーを作ろう

5 Feb 2005 (初出 16 Jan 2003)

[ Linuxでテレビ ], [ テレビ録画 ] を土台に予約録画サーバーを我が家で運用中です。 以下はその設計にあたっての構想などを記したものです。 お急ぎの方はtvrecordのページへ。

基本構想

外出中の娘から電話が掛かってきました。 今夜の番組を録画してくれとのこと。 ビデオデッキのセットはそんなに手間ではありませんが、整理ができていないので空きテープを探すのが大変。 こんなときメールで予約録画できるシステムがあると便利だと思う。 特に連続ドラマなどはハードディスク上だと整理が付け易い。

キャプチャーのためのソフトはテレビ録画のページで検討したもののうち、 FFmpeg(MPEG-1/MPEG-4) などが使えそうです。 家庭内LANを使ってこれを配信するには apacheなどのHTTPサーバーを立ち上げておけば適当なウェブブラウザでダウンロード、視聴はこと足ります。

コマンドラインから録画予約するスクリプトを作っておき 受け取ったメールをprocmail などを使ってこのスクリプトを動かしてやるようにすればメールで予約がきます。 ウェブブラウザから予約する場合はCGIからメールを発信すればOK。 重複のチェックや毎週録画などを管理するには 何らかの管理テーブルを持ったシステムが必要でしょう。 予約受付けの成功、録画の成功あるいはエラーメッセージなども依頼者にメールで返してやるのが丁寧というものです。

必要なハード

キャプチャカードのほか、大容量のディスク、高速のCPUを必要とします。

goto ハードウェア編

必要なソフト

キャプチャーにはFFmpegXviDをうちでは使っています。その他の録画ソフトについてはテレビ録画のページをご覧ください。 v4lを制御するために xawtv もインストールしておきます。

配信には apacheなどのHTTPサーバーを立ち上げておけば適当なウェブブラウザでダウンロード、視聴はこと足ります。動画配信専用のソフトに ffserver, HelixUniversalServer, MPEG4IP, VideoLAN などがありますが、家庭内LANで配信する場合でこれらを利用するメリットは無いでしょう。 ウェブブラウザから予約するためのCGIはperlなど。 さまざまな制御はメールシステムで通信するので、sendmailあるいはpostfixなどのメール配信システム、メールによるスクリプトの起動のためにfetchmailとprocmailを使います。 これら配信に必要なソフトはいずれも多くのLinuxディストリビューションでは標準で付いているでしょう。

この他に必要なソフトをパッケージにしました。

goto tvrecord のページ

以下の記事にある諸設定もこのパッケージをインストールすることで行われます。

goto ソフトの構成と説明

ユーザーとグループの作成

キャプチャーのソフトを動かすユーザー名 video、グループ名 video を新しく作成します。 videoユーザーは一般ユーザーと同様にホームディレクトリを持ちますが、ログインは禁止しておいたほうがセキュリティ上好ましいでしょう。

xawtv で正しくられる設定ファイル .xatwv をこの videoホームディレクトリにコピーしておきます。次のコマンドで正しくテレビを観ることができるかチェックします。

$ HOME=/home/video xawtv

パーミッションの設定

root特権のないユーザー権限でキャプチャーのソフトを動かす場合は ビデオ、音声デバイスのパーミッションを適正に設定してやらねばなりません。 Linuxの多くのディストリビューションでは最初にログインしたユーザーにコンソールとともにビデオや音声ディバイスを占有させるのが普通です。 この機構はLinux-PAMで実現されています。 (参考:Red Hat Linux リファレンスガイド)

ユーザー名video、グループ名videoでキャプチャーのソフトを動かす場合の設定は次のようにします。

/etc/security/console.permsを覗いてみると次のような記述があります(Vine Linux 2.6の場合)。

...
<sound>=/dev/dsp* /dev/audio* /dev/midi* /dev/mixer* /dev/sequencer /dev/sound/* /dev/beep
...
<v4l>=/dev/video* /dev/radio* /dev/winradio* /dev/vtx* /dev/vbi* /dev/video/*
...
<console> 0600 <sound> 0600 root
...
<console> 0600 <v4l> 0600 root
...

前半部分でクラス<sound>と<v4l>を定義、 後半部分ではコンソール所有者に与えるときのパーミッション、 コンソール所有者が居ないときのパーミッションと所有者、所有グループを定義しています。 この後半部分を次のように変更します。

...
<console>  0660 <sound> 0660 root.video
...
<console>  0660 <v4l>   0660 root.video

変更後いったんログアウト、再度ログインを2度ばかり繰り返して /dev/video*, /dev/dsp*などのパーミッション、所有グループなどが思ったとおりになっているか確認しておきます。

メールインターフェースの起動設定

さきにユーザー video からメールの受発信ができるようになっているか確認しておきます。 ユーザー video はログイン禁止していますので、いったん root になってから su - video で ユーザー video になることができます。 外部とやりとりする場合は外部への発信もテストしておきます。 外部からの受信は直接受けられなくても procmailなどで内部的に転送できれば構いません。

メールインターフェースの起動には /home/video/.forward に以下の内容を置いておきます。 両端の引用符号(")も必要です。

"| /home/video/bin/mailcommand >> /home/video/mailcommand.log 2>&1"

最初の(|)は日本語キーボードでは Shift+¥のあたりにある縦棒です。 mailcommand の出力はエラー出力を含めて mailcommand.log に吐き出すことにしています。 こうしておかないと、mailcommand 内でエラーが起きるとそのエラーメッセージは video ユーザーにメールで送られるので再び mailcommand コマンドが呼び出され…というように無限ループに入ってしまいます。

root権限で次のように入力すればよいでしょう。両端にさらに(')を追加することに注意。

# echo '"| /home/video/bin/mailcommand >> /home/video/mailcommand.log 2>&1"' > /home/video/.forward

Vine Linux 2.6の postfix ではこれだけで動きますが、メールサーバーによってはセキュリティ上 .forwardによるコマンド起動を禁止している場合があります。 その場合の対処はここでは触れませんので、調べてください。 とりあえず.forwardのパーミッションは 644 としておきます。

procmailによる転送設定

以上で内部的に ユーザー video にメールを送れば mailcommand が起動されます。 外部からメールを受け取るには video@domain.jp のような専用アカウントを持つ方法もありますが、 通常使っているメールアカウントだけでも Subject: の内容で仕分けし video にメールを転送すれば よいわけです。 これには procmail が適当です。 procmailによる転送設定についてはここでは省略します。 たとえば 藤田充典さんによるProcmail の紹介とレシピの書き方 などを参考にしてください。 振り分けのキーワードを「yoyaku」とした場合、レシピは次のようになるでしょう。

### VCR yoyaku system
  :0
  * ^(to|subject:)[ ]*yoyaku
  ! video@localhost.localdomain

Webインターフェースの設定

もちろん apache などの httpサーバーを適切に設定、起動しておかねばなりません。 CGIとMultiviewを使うのでそれらを許可する設定が必要です。 また、CGIからメールを発信できなければなりません。 詳しくはtvrecordジへ。

LinuxでTV 録画関連リンク

問い合わせは E-mail で マスターまで
Shino's Bar goto [シノバー店内案内] [ Linuxでテレビ ] [ テレビ録画 ] [MPEG最前線!] [お家で使うLinux]