epgrecのポートフォワーディング対応
家の録画サーバはSSH以外の外部からのアクセスを禁止しているので,外から録画した番組を見たい場合はSSHでポートフォワーディングすることになります.
しかし,ポートフォワーディングのせいでアクセスの際のホスト名やポート番号がインストール時に設定したものと違うものになってしまいます.
すると,録画済みリストのASXファイルのENTRYタグは設定されたホスト名を利用しているので,一回ASXファイルを保存して書き換えるなどの必要が生じ不便です.
そこで少しだけepgrecの修正を行いました.
recordedTable.php.patch
--- recordedTable.php 2012-01-06 01:18:47.961721388 +0900 +++ recordedTable.php.mod 2012-01-06 01:20:02.029386003 +0900 @@ -18,6 +18,9 @@ // $options = "WHERE complete='1'"; $options = "WHERE starttime < '". date("Y-m-d H:i:s")."'"; // ながら再生は無理っぽい? +//ポートフォワーディングでも見られるように +$my_install_url = "http://".$_SERVER['SERVER_NAME'] . ":" . $_SERVER['SERVER_PORT'] . "/epgrec"; + if(isset( $_GET['key']) ) { $options .= " AND autorec ='".mysql_real_escape_string(trim($_GET['key']))."'"; } @@ -57,10 +60,10 @@ $arr['station_name'] = $ch->name; $arr['starttime'] = $r->starttime; $arr['endtime'] = $r->endtime; - $arr['asf'] = "".$settings->install_url."/viewer.php?reserve_id=".$r->id; + $arr['asf'] = "".$my_install_url."/viewer.php?reserve_id=".$r->id."&server_name=".$_SERVER['SERVER_NAME']."&server_port=".$_SERVER['SERVER_PORT']; $arr['title'] = htmlspecialchars($r->title,ENT_QUOTES); $arr['description'] = htmlspecialchars($r->description,ENT_QUOTES); - $arr['thumb'] = "<img src=\"".$settings->install_url.$settings->thumbs."/".htmlentities($r->path, ENT_QUOTES,"UTF-8").".jpg\" />"; + $arr['thumb'] = "<img src=\"".$my_install_url.$settings->thumbs."/".htmlentities($r->path, ENT_QUOTES,"UTF-8").".jpg\" />"; $arr['cat'] = $cat->name_en; $arr['mode'] = $RECORD_MODE[$r->mode]['name']; @@ -109,4 +112,4 @@ catch( exception $e ) { exit( $e->getMessage() ); } -?> \ No newline at end of file +?>
viewer.php.patch
--- viewer.php 2012-01-06 01:18:56.011829858 +0900 +++ viewer.php.mod 2012-01-06 00:16:24.924635574 +0900 @@ -15,6 +15,10 @@ if( ! isset( $_GET['reserve_id'] )) jdialog("予約番号が指定されていません", "recordedTable.php"); $reserve_id = $_GET['reserve_id']; +if( ! isset( $_GET['server_name'] )) jdialog("Server_Name取得失敗", "recordedTable.php"); +$server_name = $_GET['server_name']; +if( ! isset( $_GET['server_port'] )) jdialog("Server_Port取得失敗", "recordedTable.php"); +$server_port = $_GET['server_port']; try{ $rrec = new DBRecord( RESERVE_TBL, "id", $reserve_id ); @@ -37,8 +41,10 @@ echo "<ASX version = \"3.0\">"; echo "<PARAM NAME = \"Encoding\" VALUE = \"UTF-8\" />"; echo "<ENTRY>"; - if( ! $rrec->complete ) echo "<REF HREF=\"".$settings->install_url."/sendstream.php?reserve_id=".$rrec->id ."\" />"; - echo "<REF HREF=\"".$settings->install_url.$settings->spool."/".$rrec->path ."\" />"; +// if( ! $rrec->complete ) echo "<REF HREF=\"".$settings->install_url."/sendstream.php?reserve_id=".$rrec->id ."\" />"; + if( ! $rrec->complete ) echo "<REF HREF=\""."http://".$server_name.":".$server_port."/sendstream.php?reserve_id=".$rrec->id ."\" />"; +// echo "<REF HREF=\"".$settings->install_url.$settings->spool."/".$rrec->path ."\" />"; + echo "<REF HREF=\""."http://".$server_name.":".$server_port."/epgrec".$settings->spool."/".$rrec->path ."\" />"; echo "<TITLE>".$title."</TITLE>"; echo "<ABSTRACT>".$abstract."</ABSTRACT>"; echo "<DURATION VALUE="; @@ -49,4 +55,4 @@ catch(exception $e ) { exit( $e->getMessage() ); } -?> \ No newline at end of file +?>
これで設定と異なるアドレスでサーバにアクセスしても録画した番組が見れるようになりました.