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>
//「セッションの有効期限をプライベートに調整する」ってことらしい
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>
<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指定で簡単にデザインを変更できて良い感じ。