ラベル wavecast の投稿を表示しています。 すべての投稿を表示
ラベル wavecast の投稿を表示しています。 すべての投稿を表示

2012/06/22

wavecast に Ubuntu 12.04 LTS インストール

出来る限り最新環境で色々構築してみたくて、やってしまいました。
これで、wavecastがwavecastじゃなくなってしまうけど、まあいいや。


いつものように、インストール手順を書き記しておきます。


64bit Ubuntu serverのISOイメージをダウンロード。
前にも書いたけれど、デスクトップ環境は必要ないので。Server版を入れます。

wavecastのCPUは、Intel Atom D525 なので、IA64です。
http://releases.ubuntu.com/precise/ ←ここから64-bit版のUbuntuServerのISOイメージをダウンロードします。
64-bit PC (AMD64) server install CD ←これね。

wifiドライバ
CD/DVDに焼いてドライブに入れて、いざリブート!そしていつものようにインストール。
順調です。おや?「フリーじゃないファームウエアファイルを必要としています」
だって。iwlwifi-1000-6.ucodeってのを読みたいらしい。NASでもUSBメモリでも何でもいいから入れて?って言われました・・・

探したら、http://intellinuxwireless.org/?n=downloads がヒットしたけど該当するファイルが入っているアーカイブがなかった。iwlwifi-1000-5.ucodeならあったけど・・・
wifiは使ってないから、とりあえずなしで。後からでも入れられるようだし。
wlanの人は、この辺よく調べてからにした方がいいね。

LVMなしでディスク全体を使う設定でインストール再開。
セキュリティ自動アップデートにした。やった事ない。平気かな・・・


OpenSSH、Mail、LAMP を選んでインストール。細かいものは後で手動で。

これといった問題もなくインストール終了。必要最小限なので立ち上がりも速いっす。

とりあえずの環境整備

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install emacs (私はこれがないと・・・)

build-essentialいれようとしたけど、gccってやったら、pentium-builder入れろって出たんでそうする。

$ sudo apt-get install pentium-builder
$ sudo apt-get install make

iMacからsshでアクセス
いつものようにアクセスしたら、RSA host key が変わってるって言われ、失敗した。
.ssh/known_hostsから該当する行を削除して新しいRSA keyを受け入れるようにする。

これで、最小限の環境まで復活です。ここまではCentOSより楽チンですね。


2012/06/01

wavecast録画ファイル名をどうにかする

epgrecならばファイル名カスタマイズ設定が出来るんでいいんですが、wavecastシステムのほうだと「UHF-channnel-date-time-s.mp4」って感じなのです。普通にブラウザベースで視聴するだけなら別にこれでもいいんだけれど、iTunesへ登録してAppleTVとかiPadで見たりしているとファイル名が重要なんです。AppleTVだとサムネイルが出るまですごく時間かかったり、出なかったり・・・なのでね。

と言うことで、録画ファイルをiTunesへコピーする段階でファイル名を番組名にしようと思います。

データベース(MySQL)から抜いてくる


ブラウザで録画した番組リストを出した時の番組名とかは、MySQLのデータベースに記録されているので、そこから引っこ抜いてくればいいやと。

で、調べまして、wavecastのデータベースには、vidrecとかv_vidrecっていう録画した番組のレコードがあると。その中にvid_fileがファイル名、vid_nameが番組名らしいと。

そして作成したファイル名変換スクリプト”v_rename.py”が、こちら。

#! /usr/bin/python
# -*- coding: utf-8 -*-
import sys
import os
import re
path = sys.argv[1]
fname = re.sub(r'^.*/','',path) #パスを消す。os.path使う?
fname = os.path.basename(path) #パスを消す。
vname = fname = re.sub(r'-s.mp4$','',fname) #-s以降を消す


import MySQLdb
from MySQLdb.cursors import DictCursor


try:
    con = MySQLdb.connect(host="127.0.0.1",charset="utf8",
                          db="XXX",user="XXX",passwd="XXX")
    cur = con.cursor();


    if cur.execute("select vid_name from vidrec where vid_file='"+fname+"'") > 0:
        row = cur.fetchone()
        vname = row[0] + fname.split('-')[2] # 日付追加


except:
    cur.close()
    con.close()


print vname
os.rename(path,path.replace(fname,vname))
(db,user,passwdは自分のに合わせて下さい。まあ皆同じだろうけれど)

ファイルパスを受け取って、UHF??っていう名前だけにして検索して、ヒットした番組名に変換です。
直接os.rename()でやってますが、シェル上でやろうとすると日本語コードがらみで面倒くさいので変換までやります。ヒットしなければ同名のまま。っていう処理です。

pythonで書いてありますが、/root/task内処理がpythonベースなので揃えたまでです。
このままでも動きますが、ちょっとでも効率良く動いてもらうために
$ python -m compileall v_rename.py
$ chmod +x v_rename.pyc
ってやって、pycの方を使うようにします。

cpとmvの間か

作ったスクリプトを、/root/taskに入れておいて、以前作ったitunesへのコピースクリプトが

cp $1 /media/nas1/iTunes/
mv /media/nas1/iTunes/*.m* '/media/nas1/iTunes/iTunes に自動的に追加'
な感じなので、

cp $1 /media/nas1/iTunes/
python /root/task/v_rename.pyc /media/nas1/iTunes/UHF*
mv /media/nas1/iTunes/*.m* '/media/nas1/iTunes/iTunes に自動的に追加'
でいいかなっと。
コピー後のファイルパスをちゃんと作って渡すのが面倒くさいのでUHF*ってことにして続きはOSに補完してもらうことにしました。

これで利用しやすくなるかな。


wavecastでepgrec構築 視聴編

wavecast上でepgrec動いたので、やっぱり外からアクセスして観てみたいわけです

外からepgrecページヘアクセス

http://wavecast.tv/01/でいつものように自分のwavecastにログインして
http://(ip-address)/wave/・・・ってなるので
http://(ip-address)/epgrec にURL変更してepgrecページを表示。おぉ。出た出た。


録画済一覧ページが・・・

あらら。サムネイルがちゃんとでない。
HTMLソースを見ると・・・なるほど、ローカルIPアドレスからのURLになっている。
デフォルトのままなら「http://localhost/epgrec」かな。これでは外アクセスには不都合なので、何処かを直さなくては。
と、初めは考えてSettings.class.phpのfactory()関数で、return $obj;の直前で
$obj->install_url = "http://".$_SERVER["SERVER_NAME"]."/epgrec";
ってやれば、その時点でIPアドレスになっていいかと。実際これでもいけるけど、
せっかく設定できるようになっているのに"/epgrec"が決め打ちなのはどうなの?と思い直して、、、はたと気づいたよ。

epgrecのシステム設定で、インストールURLのところを、"/epgrec"だけにすればいいじゃん。後はブラウザが適当に補完してくれる。URLって言葉に惑わされておりました。

HTML5対応

epgrecでの視聴はasf(asx?)フォームを出力するようになっていて、PCでVLCプレイヤーとかで見るように書かれているみたいだが、wavecast同様、どんなプラットフォームでも視聴したいので、ここはちょっ手を加えてHTML5のvideoタグでの再生に対応させる。

viewer.php (再生スクリプト)を直接書き換えればいいんだろうけど、元ソースをできるだけいじりたくないので、別ファイルに。

viewer_html5.phpというファイルを作成して、再生時にこっちが使われるように
recordedTbl.php (録画一覧スクリプト)ないで、
$arr['asf'] = "".$settings->install_url."/viewer.php?reserve_id=".$r->id;

$arr['asf'] = "".$settings->install_url."/viewer_html5.php?reserve_id=".$r->id;
と書き換える。
これでサムネイルとかクリックするとviewer_html5.phpの方が使わる。
viewer_html5.php の中身は一応こんな感じ。
<?php
//「セッションの有効期限をプライベートに調整する」ってことらしい
ini_set('session.cache_limiter', 'private');
session_start();


//キャッシュを無効
header("Expires: Thu, 01 Dec 1994 16:00:00 GMT");
header("Last-Modified: ". gmdate("D, d M Y H:i:s"). " GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");


include_once("config.php");
include_once(INSTALL_PATH . "/DBRecord.class.php" );
include_once(INSTALL_PATH . "/Settings.class.php" );


$settings = Settings::factory();


if( ! isset( $_GET['reserve_id'] )) jdialog("予約番号が指定されていません", "recordedTable.php");
$reserve_id = $_GET['reserve_id'];


try{
$rrec = new DBRecord( RESERVE_TBL, "id", $reserve_id );
$src = $settings->install_url.$settings->spool."/".$rrec->path;
//$src = "/epgrec".$settings->spool."/".$rrec->path;
}
catch(exception $e ) {
exit( $e->getMessage() );
}
?>


<!doctype html>
<html lang="ja">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body style="padding: 0px; margin: 0px; background-color: black;" >
    <div style="vertical-align:middle;">
      <video src="<?php print $src ?>" width="100%" preload="none" autoplay autobuffer controls onclick="this.play();"/>
    </div>
  </body>
</html>

これで手持ちのデバイスから視聴が出来るようになりました!

しかし残念ながら、iOSとAndroidではオートプレイが効きませんな。色んなサイトの記事で書かれている方法を幾つか試してみたんだけどダメ。wavecastからは出来てるんだけどなぁ。この辺はもう少し勉強して試行錯誤するか。
それに結果的に一番良く使っているiPodTouch初代では見れない。対応させたソース設定とか必要なんだろうね。この辺も改良の余地あり。

WAVECASTメニューに統合

冒頭に書いた、http://(my-global-ip)/epgrec にURL変更してepgrecページを表示って手順を踏むのがとても面倒なのでWAVECASTメニューページからepgrecのページヘ飛ぶボタンを付けてみた。

/home/wave/wave/jp/menu.php に、以下の記述を追加しました。
具体的には、<div class="info">・・・</div>の後。
<div class="toolbar">
  <h1>EPGREC メニュー</h1>
</div>
<table bgcolor=black width=100%>
  <tr>
    <td><ul class=edgetoedge><li><a href=../../epgrec/recordedTable.php rel=external>録画リスト</a></td>
    <td><ul class=edgetoedge><li><a href=../../epgrec/reservationTable.php rel=external>予約リスト</a></td>
    <td><ul class=edgetoedge><li><a href=../../epgrec/programTable.php rel=external>番組検索</a></td>
    <td><ul class=edgetoedge><li><a href=../../epgrec rel=external>番組表</a></td>
  <tr>
    <td><ul class=edgetoedge><li><a href=../../epgrec/keywordTable.php rel=external>自動登録</a></td>
    <td><ul class=edgetoedge><li><a href=../../epgrec/envSetting.php rel=external>環境設定</a></td>
    <td><ul class=edgetoedge><li><a href=../../epgrec/systemSetting.php rel=external>システム設定</a></td>
    <td><ul class=edgetoedge><li><a href=../../epgrec/logViewer.php rel=external>動作ログ</a></td>
</table>

menu.phpからの相対パス(../../epgrec)でいける。
rel=externalを付けないと、AndroidやiOSだと飛んでくれないんだね。変な感じ。そういうことならと思って、target="_blank"ってやってみたら、いけるんだけど、今度はPCのブラウザだと別ページになっちゃう。なるほど、そういう事か。

wavecastのページはjQTouchで構成されているので、div,ul,liのclass指定で簡単にデザインを変更できて良い感じ。

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を使用しています。これが一番らくちんですね。

2012/05/24

wavecast-01 省力化とか#1

/tmp/cachegrind.out.xxxx ってファイルがどんどん増えるぞ?
何じゃこれは?と思ったのがきっかけ。

使ったことがないので知らなかったが、Xdebugというphpのプロファイラが有効になっているためにプロファイルログがどんどん記録されているらしい。何らかのプロファイラビュアーを使うと何処でどれほどの負荷があるか調べられるんだと。使うだけなんでいらないっす。


Xdebugの無効化

/opt/lampp/etc/php.iniをいじって、xdebugを無効にする。
[Xdebug]
zend_extension="/usr/lib/php5/20090626+lfs/xdebug.so"
xdebug.remote_enable=false ←これ
xdebug.profiler_enable=0   ←これ
「これ」以外はそのまま。
$ sudo /opt/lampp/lampp restart
とかで、apacheをリスタートする。reloadapacheでも大丈夫だと思うが。一応。

こんなことをやっていたら、他の部分も気になってきた。

IPv6の無効化

どれほどの意味があるか不明だが、使ってもいないのにIPv6が有効だとネットワークのパフォーマンスに影響があるから、使わないなら切っておこうという話もあるので。
$cat /proc/sys/net/ipv6/conf/all/disable_ipv6
ってやると0が返る。有効な状態だ。

/etc/sysctl.confに
# IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
を追加。
$ sudo sysctl -p
を実行。リブートせよという記事も見かけるが、これが一番いいかな。
Ubuntuのディストリビューションバージョンによっては手順が異なるかもしれない。


logrotateを設定する

/opt/lampp/logs/access_logとerror_logがすごく肥大化している!
wavecastは、apacheのログローテートが設定されていないようだ。
早めにやったほうがよさそうだ。

普通にapt-get install apache2とかで入れると勝手に作られてlogrotateもされるのであまり手作業でやったことがなかったな。

ファイル/etc/logrotate.d/apache2を作成。
logrotateはcronから回ってくるので、/opt/lampp/etcに作っても意味なし。

中は、
/opt/lampp/logs/*_log {
              weekly
              missingok
              rotate 52
              compress
              delaycompress
              notifempty
              create 640 root adm
              sharedscripts
              postrotate
              /opt/lampp/lampp reloadapache > /dev/null
              endscript
}
って感じ。/opt/lampp/xxxのところ以外はデフォルトのまま。
$ sudo logrotate -f /etc/logrotate.d/apache2
で確認。大丈夫そうだ。

取り敢えずこんなもんでしょうかね。
最近はずっとsshで操作しているので、そろそろgdmとかgnomeとかXな環境を切ろうかな。メモリもったいないし。

2012/05/23

Wavecast~iTunes~iPodTouch(1st)の流れ

録画ファイルを自動的にiTunesへ登録することが出来るようになったので、iTunesの共有ライブラリ経由で、Mac、Windows、iPad2、iPod Touch(4th)、それからAppleTV(3rd)で、視聴できるようになった。
(ブラウザ経由だとAppleTVが唯一出来ないんだよね。JBまだかな。)

しかしながらひとつ残念なことが・・・

初代iPod Touchを日頃使っているのだが、これだと見れないのだ。

初代でもmpeg4とH.264はサポートしているはずなのだが。
ベースライン化されてるはずだし他のデバイスじゃ見れるしなぁ。なんでだ?
解像度の問題か?
と思って設定はそのままで480x272にしてみたが、対応していない形式だと言われる。

新しい方を持ち歩けばいいんだろうけど、初代でも動画や写真なら現役で使えるんで勿体無い。
というか、新しい方は子供のおもちゃ化しているので自由に持ち出せるのは初代だけだったり。

初代iPod Touchで見れるように
試行錯誤の結果、安易な方法で対応することにした。ビデオコーデックをH.264ではなくMPEG4でエンコードしたら再生できたので、これでいいやと。調べてもそれらしい解決策が見つからなかったし。

手順としては
リビング用は色んな工程を踏んでそれなりのクオリティを確保したのでH264のままで活用したい。
今回欲しいのは、初代iPodTouch専用みたいなものだ。
ということで、TSファイルからの再エンコじゃなくてリビング用ファイルから変換するだけにした。

例のvidrecsrc5.shで色々やった後、/tmp/$1-s.mp4を削除する前に以下の処理を追加した。
/root/task/ffmpeg -y -i /tmp/$1-s.mp4 -threads 3 -acodec copy -vcodec mpeg4 -r 24 -b 1000k -s 480x272 -f mp4 /tmp/$1-s.m4v
解像度をiPod Touchに調度良いサイズにリサイズ。ビットレートも1Mbpsに落とす。音はそのまま。
ファイル名そのままで拡張子を.m4vに。
.m4v にする必要はないんだけどリビング用との違いを拡張子で表現。
一度H.264にしたものをMPEG4にすることになるんで、大きく品質ダウンしないか心配だったが、解像度1/4ということもあってか、bps半分でも十分なクオリティだ。事実上の2パス処理になってるのかも。

ここから前回のiTunesへの自動登録につながるんだけど、この小さい方だけをiTunesへ入れて様子を見ている状態が前回の処理手順だ。今はビッグサイズとこのスモールサイズ両方をiTunesに入れている。

しかーし、ファイル名がUHF-xxxとかなんで、なんだか良く分からん。
番組名をファイル名に入れるように改良するか?
データベースから引いてくるのは簡単だが、予約するときの番組名がDBへ記録される。
毎週録画設定したやつでも最初に記録された番組名のままなので同じ名前になってしまう。
日付を追加するか? ファイル名長いなぁ。
TSファイルからシリーズ番号とか取得できたりするらしいけど、使いものにならないらしい。

どうしようかなぁ。
やっぱり epgrec かな。

Wavecast-01からiTunesへ自動登録

Wavecast本体にiTunesをインストールしてみたが残念ながらホームシェアリングが出来る
状態には出来なかった。しかたないので、録画した動画ファイルを自動的にMac上のiTunes
にコピーするように出来ないかな?
そうすれば、未だ脱獄が出来ないAppleTV(3rdgen)や外出中iPod Touchで視聴できるしっと。


ホームシェアリングで、AppleTVやiPadで視聴するためにiMacでiTunesを動かしている。
iTunesの保存フォルダはNASとして使用しているTimecapsuleになっている。
この状態でどうするか・・・

録画スクリプトの中で最後にNAS上のiTunesフォルダにコピーしてiTunesに登録されれば
目的は果たせるはずだ。

NAS (Timecapsule)をWavecastでマウント
TimecapsuleはSambaでマウント可能なので、smbfsをインストール。
最初からはWavecastには入っていなかった。
$ sudo apt-get install smbfs
マウントする。
$ sudo mkdir /media/nas1
$ sudo mount.smbfs <Timecapsule>:/Data /media/nas1 -o user=<user> pass=<password>
<Timecapsule>はIPアドレスとか/etc/hostsに登録したNASのホスト名とか。
<user>、<password>は、Timecapsuleに設定した共有ディスクのアカウント。
Timecapsuleの場合、「共有ディスクのセキュリティ保護」を「アカウント」にしておかないと上記のようなマウントが出来ない。

これで、いつものiTunes保存フォルダが/media/nas1/iTunes/とかでアクセス出来た。
もちろん、IPアドレスがDHCPで変わってしまわないように固定IPにしておく。

コピー先
何処にコピーすれば良いかだが、iTunesフォルダには、「iTunesに自動的に追加」っていう
フォルダがある。ここにファイルを入れるとiTunes内部に自動登録される仕組みがあるので、ここにコピーすればいい。
ただちょっと困った事に、ファイルコピーが終了する前にiTunesが反応してしまい、コピー途中で登録しようとして失敗してしまうのだ。
この問題を回避するために、NAS上の別の場所に一旦コピーしてから、自動登録フォルダに移動させる事にした。同じボリューム内の移動なら一瞬で終わるから問題は解決。

iMacのスリープ解除
マックではWake on LANのことをWake on Demandって言うらしい。最近のMacOSではWifi接続のマックもリモートでスリープ解除が出来るそうな。ただそのためにはいろんな条件が揃ってないとだめだそうな。AppleTVからiMacのスリープ解除は普通に出来るが、
それ以外だとスクリプトを書いてどうのとか、TimecapsuleやAirMacでどうのとか、
色々大変そうだ。
まあ何だか難しい話はすっ飛ばして、簡単に出来そうな方法を模索する。

sshfsを使う
sshfsとは、ssh経由でリモートマウントが出来てしまう。sambaとかほかのファイルサーバーみたいに面倒な設定をする必要がなく、sshが出来さえすれば使える優れもの。
色々やってみた結果、これが一番簡単っぽい。Wavecastには入ってないので入れる。
$ sudo apt-get install sshfs
$ sudo sshfs <account>@<mac-ip-address>:/users/<account> /media/tmp
ってやると、<account>のパスワードを聞いてくるので入れてやる。
これで/media/tmpにマックの自分のフォルダがマウントされる。マック上に面倒なSamba
設定とかする必要はない。
おっと、言い忘れ。マックにsshで入れるようにするためには、共有設定で
リモートログインを有効にしておく。

とにかく、スリープ状態のマックのボリュームをsshfsでマウントすると、スリープが解除
されるのだ。

vidrecsrc5.sh
そんなこんなで、スクリプト最後に以下のような手順を追加した。
#Transfer
echo <password>|sshfs <account>@imac:/users/<account> /media/tmp -o password_stdin
cp /tmp/$1-s.m4v /media/nas1/iTunes/
mv /media/nas1/iTunes/$1-s.m4v '/media/nas1/iTunes/iTunes に自動的に追加'
fusermount -u /media/tmp
sshfsで-o password_stdinとしているのは、標準入力からパスワードを入力するというオプション。前段のechoでそのパスワードを入れておいてパイプで繋いでおけば、バッチ内で完結する。
ファイルをNASに一旦コピーして、自動登録フォルダに移動させる。
fusermountコマンドでsshfsでマウントしたボリュームをアンマウントする。

cp /tmp/$1-s.m4vと、mp4じゃないあたりは別途記載する予定。
これはこれで難儀な話でして・・・

2012/05/11

Wavecast-01にiTunes入れてみる

Wavecastで色々出来るようになったので、iTunesとか動くかな?と思ってやってみた。
もしうまく動けばAppleTVからwavecastのiTunesがホームシェアリングでアクセス出来たりするんじゃね?と思ったからだ。

ネット記事を参考に普通にトライ
都合の良い事にWavecastにはWine(v1.2.2)がインストールされているので、それを通してWindows版のiTunesを動かせば良いかなということでトライしてみることに。
色々ググってみると、Ubuntu+Wine+iTunesの記事は結構あるようだ。参考にしながらやってみるもインストールは成功しなかった。
はじめは最新のiTnuesをダウンロードして
$ wine iTunesSetup.exe
ってやってみたが、msvcp80.dllがないからインストーラが動きませんと・・・最近のWindows版のiTunesはMSVC使ってビルドされているらしい。で、標準のWineにはmsvcのDLLは入ってないので動かない訳ですね。
じゃあ入れればいいかと、隣のPCからDLLを持ってきて入れてみると確かに少しインストーラが進む。でもなんだかんだとエラーが出て成功しない。
古い7.x位のiTunesじゃないと動かないという記事もあるが、自分はホームシェアリングを試みたいので10.3以上とかじゃないと意味がない。
$ apt-get install buntu-restricted-extras
$ apt-get install wine-gecko
とかやってみたけど進展はしなかったね。

PlayOnLinux
Youtubeで、Install iTunes on Ubuntu Linuxを見つけた。
PlayOnLinuxからiTunesをインストールするっていう内容。PlayOnLinuxはWineのフロントエンドに相当するもので、GUIでWindowsソフトの管理・実行が出来る便利ものらしい。

インストール
UbuntuソフトウエアセンターでPlayOnLinuxを探すと出てくるので、それをインストール。
PlayOnLinuxを起動。なぜかメニュー/アプリケーション/ゲームの所に入っている。元々PCゲームを動かすために作られたものだからだろうか。
最初の起動でアップデートが始まるのでしばらく待つ。待つ。待つ。
アプリのウインドウが出てきたら、インストールボタンを押して、マルチメディアを選ぶ。そこに「iTunes 10」があるんで、選んでダウンロード。ダウンロードが完了すると、そのファイルはどこ?っていうダイアログが出るんで、見つけ出して設定する。
youtubeによるとデスクトップにあるらしいが、自分の場合は見つける事が出来なかったので、予めダウンロードしておいたiTunesSetup.exeを指定した。
するとiTuesSetupが起動してインストーラが走り始める。今度は順調に完了した!
途中、デスクトップアイコンを作成するか?とか聞いてくる。試しにYesとやってみた。iTunes.inkファイルがデスクトップにペッと置かれた・・・なるほど。
後で見てみたら、PlayOnLinuxの管理フォルダに必要なDLLが最初から入っているね。
らくちん。

iTunes起動
iTunesが起動しました。早速ホームシェアリングを設定してみる。AppleIDとパスワードを設定してみたら、iTunesストアサーバーとのアクセスがうまく行かないらしくなしのつぶて・・・苦労してiTunesが起動したもののやりたい事は出来なかった。残念。どうにかならんもんでしょうかね

まあ動いたけどものすごく遅いんで、どのみち実用にはならないんだけどね。でも出来たら出来たで面白いよね。
仕方ないんで(おじさんはあきらめも早いんです)別手段を考えますか。

2012/05/07

wavecast-01 画質調整

ルートになれるようになったので自分なりの調整を施してみた。
その前に簡単に録画環境を書いておく。

/root
ルートユーザディレクトリに色々はいってる。チューナ(FSUSB2N)のドライバ、ffmpeg、その他この製品に関する様々なプログラムが保存されている。なんかテスト環境とかもそのまま入ってる。


/root/task
録画関係のスクリプトは全部/root/taskに入っていて、全てルート権限で実行される。
これからここをいじるので、オリジナルをとっておこう。

tsrec2
地デジ録画は、/root/taskに直接入っている’tsrec2’というプログラムで録画している。
録画TSファイルは一旦/tmpに記録される。それにしてもtsrec2ってなんだろ?ぐぐってもそれらしいのは出てこないし。独自なのかな? じゃなくて、recfsusb2n でした。

TSからmp4になるまで
at00?.shがスケジューラから順に呼び出されて、 vidrecsrc?.pyが起動、 そこからvidrecsrc?.shが呼ばれて最終的に以下の順でプログラムが起動するようになっている。
  1. tsrec2
    /tmpにオリジナルTSファイルを保存(録画)
  2. tssplit2
    オリジナルから必要なHDストリームを取り出す
  3. tsdemux2
    ビデオ(m2v)とサウンド(wav)に分離
  4. ffmpeg
    m2vをx264にエンコード。ここが一番要なところ!
  5. ffmpeg
    wavをfaacでエンコードして、先ほどのx264と合成
  6. mp4box
    最後に iPod 対応にした?mp4ファイルを/home/wavecast/media/<date>に保存。ファイルのオーナーをwavecastにして公開
ffmpegで直接TSからmp4にすることも出来ると思うが、以上のような手順になっている。多分色々やった末にこのような手順に落ち着いたのだろうと思う。なので私は今のところ敢えてこの手順を変更するつもりはない。

画質調整
m2vからx264へのエンコード処理を調整すれば自分の欲している画質に調整できそうだ。
肝心な処理は、vidrecsrc5.shに書かれている。 オリジナルは、
/root/task/ffmpeg -threads4 -i /tmp/$1-h.m2v -vcodec libx264 -vre ibento7 -b 800k -r 20 -s 720x384 -aspect 16:9 -an -f mp4 /tmp/$1-h.264
これを以下のように変更した
/root/task/ffmpeg -threads4 -i /tmp/$1-h.m2v -vcodec libx264 -vre ibento7 -b 1800k -r 24 -s 960x540 -aspect 16:9 -an -f mp4 /tmp/$1-h.264
実施したのは、ビットレート、解像度、fpsの変更。
ffpresetのibento7は、/root/.ffmpegに記述されている。見たところ悪くないのでそのまま使用した。
解像度は日頃iMovieでホームビデオを整理しているがその解像度が960x540なので同じにした。
-r 20だと若干カクつきが気になったので24にちょいアップ。おまじないに近いが。
後はビットレート。cqpでの画質調整は難しいので-bを使う辺りは自分の考えに合っている。
自分の経験ではDVDレベルなら1500kbps程度あれば見れるものになる。
それよりもちょいよくしたいので、1800kbpsにした。欲しい画質はこれで得られた。
これ以上の画質を求めるなら、それなりのハードを購入したほうがいいんじゃないかな。と自分を納得させる。

iPad2やiMac、外出先からも見てみたがスムースな再生ができている。
自分は3G回線を通して見たいとは思わないので、LAN、Wifiでの視聴が出来れば十分だ。

標準では3G回線や海外で見ることを前提とした調整がされているようだが、自分は家で楽しむだけなので、このくらいがちょうどいい。

出先で見たい時はiTunesでファイルを突っ込んでオフラインでみる。
そもそも私は3Gや4G回線を使えるデバイスを持ってなかったりする・・・ランニングコスト高いし。


次にやりたいのは、最近購入したAppleTVでwavecastの録画データを直接再生したいのだ。
だけど3rdなのでまだ脱獄が出来ない orz。。。脱獄すればブラウザ経由で普通に見れるかな?
NASとして見れるかな?UPNPで見れるかな?
この辺はAppleTVで色々出きるようになってからか。今は我慢して普通にiPadでAirPlayする。


wavecast-01 システムセットアップ

めでたくルート権限を取得できたので、環境整備を。
(ルート権限取得手順は「wavecast-01 買ってみた」を参照)

sambaが起動していない
sambaはインストールされていたが、デーモン起動していないようなので
$ sudo smbpasswd -a wavecast でsambaユーザを作成
/etc/samba/smb.confを適当に設定して、service smbd startで起動。
無事に愛用のiMacからwavecastのボリュームを見れるようになった。

psコマンド
プロセスを見るのにpsコマンドをよく使うが、なぜかpsコマンドが/root/taskに入っている。
いちいち、sudo /root/task/ps axとかやるのが面倒なので、/binに移す。


NASのマウント
自分はTimecapsuleをNASとして使用している。macのバックアップとしては使っていない・・・
(TimeMachineバックアップは個人ではやりすぎだと思う。この辺はいずれどうにかする!)
smbfsがインストールされていないので
$ sudo apt-get install smbfs
$ sudo mkdir /media/capsule
$ sudo mount.cifs //192.168.x.x/data/ /media/capsule -o user=??,pass=??,iocharset=utf8
でマウント。まだ実施していないが録画ファイルを自動的にNASにコピーするスクリプトでも書こうかなと思っている。録画ファイル名が無機質なのでその辺をどうにかしてコピーする感じかな。

ssh
普通のLinux的な操作をVNCを通してやるのは使いづらいので、sshをインストール
$ sudo apt-get install ssh
これで、 別のマシンからsshでターミナルだけ接続して操作できるようにする。
このほうが何かと使いやすい。
GnomeとかgdmとかXとか全然要らないので本当はUbuntu-serverでセットアップし直したいところ。
無駄にリソース食われるし。だれかそういうの作ってくれないかな。

emacs
これから色々改変するのに必要なテキストエディタとして便利なemacsも入れておく。
$ sudo apt-get install emacs
因みにVNC上の端末からemacsを起動するとスクリーン解像度よりでかいウインドウで開いちゃうので色々設定が必要になる。私はそういうのは面倒なので、外からsshで入って、emacsでガリガリ。これが基本スタイルです。


これで自分なりの作業環境が整いました。
次はやっと画質調整です。


wavecast-01 買ってみた

我が家にはちょっと古めのHDレコーダ(DIGA)で毎シーズンのドラマを録画して見ている。
チューナ2つしかないので、同時に映画とかスペシャル番組とか重なっていると結構厳しい。
それにHDサイズも大きくないのでドラマだけでいっぱいいっぱい。
最近のチューナ4つとかNAS対応とか買えば解決なんだろうけど、そこまで切迫もしてない。

そこで安価な対応策としてwavecast-01を買ってみた。

家ではiPad Touch、iPad2、中華Android(N-50)とかもあるので、そういうので見れると面白いかな?
Linux(Ubuntu)ベースなので色々おもちゃとして使えるかな?という遊び感覚で使えそうだと。

普通のセットアップやら紹介やらは先人の方にお任せするとして、ここでは自力で何とかする系の
話をまとめてみたいと思う。

画質が物足りない
使ってみると録画映像の画質がかなり悪い。これは製品として悪いということではなく、目的がインターネットを通してどこでも見れるという目的からすると十分適切な設定になっているのだが、自分の使い方からするとちょっと厳しい。
これをまず改善したいと思ったが、普通の使い方では品質調整する事ができない・・・
じゃあ録画スクリプトを改造して自分で調整するかと思ったら、Linuxユーザ全てのパスワードが
わからないのでsudoも出来ず、ルートにもなれず・・・これじゃ調整できないじゃないか。


ルート権限が必要だ
ということで、ルート権限を取得する方法を模索した。
(一応サポートにもメールしてみたが返事がなかった。まあそうだよね)

最初はもういいや!と思って、Mythbuntuをインストールしてみた。ちゃんとチューナ設定とかすれば
結構簡単に動きそうだったけどMythbuntuのフロントエンドが気に入らなかったのでやめやめ。
自分は録画専用機にしたいわけじゃないのだ。

で、付属のリカバリDVD(v1.8)を使って再度インストールし直すことにした。
なぜかというと、リカバリDVDのインストーラは、 Mondo Rescueを使っているので、再インストールする段階でルートパスワード設定出来るんじゃね?と思ったからだ。

案の定出来た。ドキュメント通りに進める段階で、 必ずNoを選択しなさいというところで、Yesを選択。
するとルート権限状態でShellに移行するので、そこでpasswdコマンドで自分の好きなパスワードを設定する。ついでに、wave、wavecastユーザのパスワードも設定する。
用事がすんだら、exitするとインストーラに戻るのでそのまま進める。
再起動すると先ほど設定したパスワードが生きた状態なので、後はやりたい放題だ。

再インストールする際の注意点としては、nukeコマンドを使用しないで、CUIのAutomaticを選ぶようにすることだ。nukeで全自動にすると途中でYes/Noを聞いてこないで一気にインストールされてしまう。

自分の場合、安物のUSB-DVDドライブだったためか、インストーラでパーティションフォーマットとかでエラーになってしまい何度もリトライすることになった。途中別ツールでディスクを綺麗にしたり、ブートローダを削除したり・・・
はじめにMythbuntuを入れてしまったために変な状態になってしまったのかもしれない。
まあ根気よく再トライして何とかなったが。

次回は設定関係