前回に引き続き Mirakurun への移行忘備録。
今回は epgrec UNA を Mirakurun に対応させる。
元の epgrec UNA の動作
視聴, 録画, EPG更新時に do-record.sh から recpt1 を呼び出しているので、
基本的には do-record.sh の recpt1 関連行を Rivarun に対応させれば良い。
この中で少し複雑なのは(リアルタイム)視聴。
元のepgrec UNAは、httpサーバー機能追加版の recpt1 を使って実現している。
リアルタイム視聴したい局を選択すると、
当該チャンネルをターゲットとして recpt1 を httpサーバーとして動作させ、
このサーバーを指すASXファイルを出力する。
視聴後に「視聴停止」ボタンを押す必要があるのは、
このサーバー動作している recpt1 を止めて、チューナーを解放するためだ。
Mirakurun 対応
対応箇所は大きく分けて以下の4つ
- Rivarun のインストール
- do-record.sh: recpt1 を rivarun に
- リアルタイム視聴関連
- BSチャンネル名の変更
Rivarun のインストール
※ あとで実際に Mirakurun を動作させる時にそちらで書き直します。
recpt1 → rivarun
Rivarun は recpt1 と同じように扱えるようにしてあるので変更は少ない。
do-record.sh 内の RECORDER を /usr/bin/rivarun にして
各モードのコマンドオプションを以下のように変える。
(MODE==0 は sid 指定が不要)
1 2 |
- $RECORDER --b25 --strip (--sid $SID) $CHANNEL $DURATION "$OUTPUT" >/dev/null # recpt1 + $RECORDER --b25 (--sid $SID) --ch $TYPE/$CHANNEL $DURATION "$OUTPUT" >/dev/null # rivarun |
リアルタイム視聴関連
(私の環境は verが少し古いので変わっているかもしれないが)
do-record.sh の 14 行目 if [ ${OUTPUT} = '-' ]; then
で
リアルタイム時に recpt1 を httpサーバーとして読んでいるので、
そこから else までを if [ 1 ]; then
とでもしてしまう。
次に config.php の REALVIEW_HTTP_PORT を 8888 から
Mirakurun の TCP port番号に変更する。
(デフォルトは 40772)
次は templates/index.html の 758行目あたり。
不要な「視聴停止」ボタン消す。
1 2 3 4 5 6 7 |
{if $REALVIEW_HTTP == 1} <!-- <div class="set"> <ul><li><a style="color:white;" href="watch.php?ch=-">視聴停止</a></li></ul> </div> --> {/if} |
次は watch.php の 219行目あたりで
1 2 3 4 5 6 7 8 9 10 11 |
} /* if( !isset( $now_type ) ){ // リアルタイム視聴コマンド常駐 $cmdline = 'CHANNEL='.$channel.' SID='.$sid." DURATION='-' TYPE=".$type.' TUNER_UNIT='.TUNER_UNIT1.' TUNER='.$slc_tuner." MODE=1 OUTPUT='-' ".DO_RECORD.' >/dev/null 2>&1'; @@ -263,6 +270,7 @@ function searchProces( $pid ) shmop_write_surely( $shm_id, SEM_REALVIEW, $shm_name ); // リアルタイム視聴tunerNo set while( sem_release( $sem_id[$shm_name] ) === FALSE ) usleep( 100 ); */ break 2; |
あとは同じく watch.php 291行目 で出力ASXファイルを Mirakurun 用に修正する。
1 2 |
- $asf_buf .= "<REF HREF=\"http://".$_SERVER['SERVER_NAME'].':'.REALVIEW_HTTP_PORT.'/'.$channel."/".$sid."\" />"; + $asf_buf .= "<REF HREF=\"http://".$_SERVER['SERVER_NAME'].':'.REALVIEW_HTTP_PORT.'/api/channels/'.$type.'/'.$channel."/services/".$sid."/stream?decode=1\" />"; |
BSチャンネル名変更
epgrec で BS1_0 のようにしているチャンネル名を
Mirakurun では BS01_0 のような形式にする(チャンネル桁数を2桁に)。
PHPは詳しくないので泥臭い方法かもしれないが以下のようにした。
(watch.php 56行目から)
1 2 3 4 5 6 7 8 9 10 |
$tuners = $ST_max; // BSX_X --> BS0X_X if ( $type === 'BS' ){ $ub = substr( $_GET['ch'], 3, 1 ); if ( $ub === '_' ){ $channel = substr( $_GET['ch'], 0, 2 ) . '0' . substr( $_GET['ch'], 2, 3); } } } |
その他
元々動いていたのだから問題ないはずだが、
以下のようにしないと上手く動かなかったため変更した。
(collie.php/206行目, sheepdog/159行目)
1 2 |
- if( shmop_read_surely( $shm_id, $tune_cnt+SEM_ST_START ) ) + if( shmop_read_surely( $shm_id, $tune_cnt+SEM_ST_START )>0 ) |
3月末に Mirakurun に完全移行してしばらく実地テストしたらソースを公開してみようかな。
(Mirakurun と epgrec の共存というのがあまり需要がなさそうだけれど)