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

2012/06/15

podcastで使い分け

wavecast購入後色々試行錯誤して、家で見るときはブラウザから観たり、iTunesに自動登録された方をiPad/AppleTVで観たり、出先ではiPodTouch(1st)に同期させて観たり、やりたかった事はだいたい出来たかな。

ただ、使いにくい事が1つある!

前記事にも書いたが、リビング用高画質版とモバイル用低画質版の2つを同じようにiTunesへ登録しているためにサムネイルも名前も同じようだから分かりにくい。選ぶときもどっちがどっちやら。

podcast使えないかな? と思い立った。
iTunesムービーは高画質版。podcastを低画質版って使い分ければいいんじゃ?
そうすればiPodTouchの同期設定もpodcastだけにすればいいし。
管理フォルダも別だからメンテもしやすそうだし。
ということで、やってみた。


podcast

については、podcastを制作するを参考に、お勉強。RSSなのね。というかXMLなのね。


プランとしては、podcast用のRSSを出力するスクリプトを用意してiTunesへ登録する。
最近はepgrecで録画するのが多くなって来たので、そっち側に構築。epgrecは、smartyを使っているので、そのまま活用させていただく。

/epgrec/podcast.php
<?php
include_once('config.php');
include_once( INSTALL_PATH . '/DBRecord.class.php' );
include_once( INSTALL_PATH . '/Smarty/Smarty.class.php' );
include_once( INSTALL_PATH . '/Settings.class.php' );

$host = "http://192.168.X.X";

$settings = Settings::factory();
$dbh = @mysql_connect( $settings->db_host, $settings->db_user, $settings->db_pass );

$rvs = DBRecord::createRecords(RESERVE_TBL, "WHERE complete='1' and mode>1");
$records = array();
foreach( $rvs as $r ) {
    $cat = new DBRecord(CATEGORY_TBL, "id", $r->category_id );
    $ch  = new DBRecord(CHANNEL_TBL,  "id", $r->channel_id );
    $arr = array();

    $r->title = str_replace('【デ】','',$r->title);
    $r->title = str_replace('【二】','',$r->title);
    $r->title = str_replace('【字】','',$r->title);

    $arr['title'] = $r->title;
    $arr['author'] = $ch->name;
    $arr['subtitle'] = "";
    $arr['description'] = $r->description;
    $arr['thumb'] = $host.$settings->install_url.$settings->thumbs."/".$r->path.".jpg";
    $arr['url'] = $host.$settings->install_url."/podcast/".$r->path;
    $arr['pubdate'] = $r->starttime;
    $arr['duration'] = strftime("%T",strtotime($r->endtime)-strtotime($r->starttime)-60*60*9);
    $arr['category'] = $cat->name_jp;
    array_push( $records, $arr );
}

$smarty = new Smarty();
$smarty->assign("site_title","録画一覧");
$smarty->assign("site_link",$host.$settings->install_url);
$smarty->assign( "records", $records );
$smarty->display("podcast.xml");
?>

/epgrec/templates/podcast.xml
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
  <channel>
    <title>{$site_title}</title>
    <language>jp</language>
    <itunes:category text="録画">
      <itunes:category text="TV録画"/>
    </itunes:category>

{foreach from=$records item=rec}
<item>
  <title>{$rec.title}</title>
  <itunes:author>{$rec.author}</itunes:author>
  <itunes:summary>{$rec.description}</itunes:summary>
  <enclosure url="{$rec.url}" type="video/mp4"/>
  <guid>{$rec.pubdate}</guid>
  <pubDate>{$rec.pubdate}</pubDate>
  <itunes:category>{$rec.category}</itunes:category>
  <itunes:duration>{$rec.duration}</itunes:duration>
</item>
{/foreach}

  </channel>
</rss>
を作成。(うまく入らないので、どちらも">","<"を全角にしてます

iTunesのpodcastに、http://192.168.?.?/epgrec/podcast.php で登録して出来上がり。家の中だけでいいので、LAN固定IPで問題なし。iTunesの方から勝手に吸い取ってくれるので自動登録フォルダにコピーするより、結果こっちの方が楽だね。

必要最小限のタグしか使ってない。もっと沢山あるみたいだけど、いらないかな。

今回はまったところは、2つ以上のアイテム(エピソード)が追加できなかったこと。最初の1つしかpodcastに出てこないのだ。エラーとかも出ないし・・悩んだよ。
結局、<guid>タグが必要だった事とその内容に日本語が入れられない事だった。
<pubdata>と同じ公開日(録画日)を入れる事にした。そうしたら出たよ。ふぅ。

Webプログラマじゃないんで知らない事だらけ。実際には色々試行錯誤があったけれど、やってみると簡単で面白い。知ってる人にすれば、この辺は既に古い話なんだろうね。実際ネット上を調べてみても数年前の情報がほとんど。今から追いつけるかなぁ。


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が起動したもののやりたい事は出来なかった。残念。どうにかならんもんでしょうかね

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