Index: trunk/doc/CHANGES.txt =================================================================== --- trunk/doc/CHANGES.txt (リビジョン 90) +++ trunk/doc/CHANGES.txt (リビジョン 91) @@ -1,3 +1,8 @@ foltia 更新履歴 http://www.dcc-jpl.com/soft/foltia/ + +09.05.05 +digitaltvrecording.pl: +recwrap.pl: +PT1対応。 09.4.30 Index: trunk/doc/index.html =================================================================== --- trunk/doc/index.html (リビジョン 83) +++ trunk/doc/index.html (リビジョン 91) @@ -73,5 +73,5 @@ <ul> <li>Linuxの動くAT互換機:筆者の環境ではPentium4(2.8GHz)/2GB RAMの環境で30分番組のハイビジョンTSをデフォルト設定でH.264にトランスコードするのに約90分程度で完了しています。</li> - <li>Friioなどのデジタルハイビジョン録画デバイス:HDUSもLinuxで動いているようですが未テストです。PT1は絶賛解析中らしいです。期待して待ってましょう。</li> + <li>FriioやPT1などのデジタルハイビジョン録画デバイス:現在対応しているのはFriio,Friio BS/CS,PT1です。HDUSもLinuxで動いているようですが未テストです。</li> <li>(アナログ録画をする場合)ivtvドライバで動作するビデオキャプチャカード:foltiaの機能を引きだすためには複数のエンコーダを搭載するのがおすすめです。手もとの環境ではIOデータ <a href="http://www.iodata.jp/prod/multimedia/tv/2003/gv-mvprx/">GV-MVP/RX</a>を2枚、<a href="http://www.iodata.jp/prod/multimedia/tv/2004/gv-mvprx2w/index.htm">GV-MVP/RX2W</a>を1枚で計4チャンネル同時録画環境にしています。画質の点からは複数エンコーダが一枚のカードに載ったRX2Wよりも1エンコーダのGV-MVP/RX2の方が多少有利なようです。</li> <div class="sidebar"> @@ -100,5 +100,5 @@ 予約ボタンを押すとデータベースの録画予約テーブル[foltia_tvrecord]に番組IDと放送局、録画ビットレートが追加されます。その後、キュー入れプログラム[addatq.pl]を呼びます。addatq.plは番組IDと局IDを受け取り48時間以内の放映予定を探し、それぞれの放映ごとに録画準備のためのプログラム[folprep.pl]を放送予定時刻の5分前にキュー入れします。<br /> 予約番組の放送予定時刻の5分前になると、準備プログラム[folprep.pl]が実行されます。これは、最新の番組表データを再取得し、放映時刻が変更されてないか確認後、放送開始時刻の1分前に録画プログラム[recwrap.pl]が走るようにキューを入れます。放送時刻が15分以上先に延びていたら、再度放送予定時刻の5分前に準備プログラム[folprep.pl]をキュー入れします。<br /> - 放送予定時刻の1分前になると録画の一連の流れを管理する録画プログラム[recwrap.pl]が起動します。このプログラムは、録画チャンネルが外部入力であれば外部チューナのチャンネルを適切なものに切り替えるためにリモコン送信プログラム[transfer.pl]を呼びだし、次に実際にビデオでバイスからファイルへの記録を行う録画プログラム[digitaltvrecording.pl]か[tvrecording.pl]を呼び出します。デジタル録画出来るデバイスが不足した場合は利用可能なアナログ録画デバイスがあればそちらで録画を実行するように努力します。<br /> + 放送予定時刻の1分前になると録画の一連の流れを管理する録画プログラム[recwrap.pl]が起動します。このプログラムは、録画チャンネルが外部入力であれば外部チューナのチャンネルを適切なものに切り替えるためにリモコン送信プログラム[transfer.pl]を呼びだし、次に実際にビデオでバイスからファイルへの記録を行う録画プログラム[digitaltvrecording.pl]か[tvrecording.pl]を呼び出します。録画でバイスはPT1→friioの順で接続されていれば自動的に空きデバイスを探して録画します。デジタル録画出来るデバイスが不足した場合は利用可能なアナログ録画デバイスがあればそちらで録画を実行するように努力します。<br /> [digitaltvrecording.pl]は実際の録画プログラムを呼び出します。BS1/BS2はwineを利用してTsSplitter.exeを起動して適切な分割処理をします。<br /> アナログ録画の場合はキャプチャプログラム[tvrecording.pl]はivtvドライバに付属のrecord-v4l2.plをベースに拡張したもので、搭載されている録画デバイスの空き状況を調べて、空いてる適切なデバイスを利用します。foltiaは特に指定をしない場合、同時録画する場合、地上波録画をキャプチャデバイスの若い番号から順番に、外部入力を一番大きいデバイスから順番に使用していきます。例としてキャプチャカードが4枚入っている場合、地上波録画は/dev/video0から、外部入力録画は/dev/video3から使われていきます。空きデバイスがない場合は、一番若い番号を持つビデオデバイスをつかんでるプロセスを止め、そのデバイスを利用します。録画は前後に10秒程度の余分な録画を行おうとするため、同一のチャネルで連続している番組を指定した場合であっても可能であれば2チューナ使用する形となります。tvrecording.plの録画チャンネルの引数に0を指定した場合はS入力が、-1を指定した場合はコンポジット入力が録画されます。外部入力はデフォルトで一番番号の大きいデバイスを利用します。<br /> @@ -179,6 +179,9 @@ <h3>・各種ツールインストール</h3> <p>以下のプログラムを利用します。<br /> -recfriio:Friioを使ったデジタルハイビジョン録画に利用 http://2sen.dip.jp/cgi-bin/friioup/source/up0777.zip -<br /> +recfriio:Friioを使ったデジタルハイビジョン録画に利用 http://2sen.dip.jp/cgi-bin/friioup/source/up0777.zip<br /> +recpt1:PT1を使ったデジタルハイビジョン録画に利用。オリジナルの<a href="http://sourceforge.jp/projects/pt1dvr/">recpt1</a>からのb25拡張版を想定。 入手は<a href="http://pc11.2ch.net/test/read.cgi/linux/1231189481/252n">【視聴・録画】Linuxでテレビ総合【デジタル/アナログ】 http://pc11.2ch.net/test/read.cgi/linux/1231189481/252n</a>による<br /> +<blockquote>hg clone http://hg.honeyplanet.jp/pt1</blockquote> +が便利。 + TsSplitter:MPEG-2 TS streamを分割するwindows用プログラム http://2sen.dip.jp/cgi-bin/friioup/source/up0827.zip<br /> Index: trunk/install/perl/digitaltvrecording.pl =================================================================== --- trunk/install/perl/digitaltvrecording.pl (リビジョン 83) +++ trunk/install/perl/digitaltvrecording.pl (リビジョン 91) @@ -327,9 +327,10 @@ sub calldigitalrecorder{ # -#いまんところ白friioと黒friioのみ +#白friioと黒friio、PT1対応 #2008/10/23 recfriio4仕様に変更 # my $oserr = 0; - +my $originalrecch = $recch; +my $errorflag = 0; if ($bandtype == 0){ # 地デジ friio @@ -375,5 +376,20 @@ } - +# PT1 +# b25,recpt1があるか確認 + if (-e "$toolpath/perl/tool/recpt1"){ + &writelog("digitaltvrecording DEBUG recpt1 --b25 $originalrecch $reclengthsec $outputfile "); + $oserr = system("$toolpath/perl/tool/recpt1 --b25 $originalrecch $reclengthsec $outputfile "); + $oserr = $oserr >> 8; + if ($oserr > 0){ + &writelog("digitaltvrecording :ERROR :PT1 is BUSY.$oserr"); + $errorflag = 2; + } + }else{ # エラー recpt1がありません + &writelog("digitaltvrecording :ERROR :recpt1 not found. You must install $toolpath/b25 and $toolpath/recpt1."); + $errorflag = 1; + } +# friio +if ($errorflag >= 1 ){ # b25,recfriioがあるか確認 if (-e "$toolpath/perl/tool/recfriio"){ @@ -396,4 +412,5 @@ exit 1; } +}#end if errorflag #BS1/BS2などのスプリットを Index: trunk/install/perl/recwrap.pl =================================================================== --- trunk/install/perl/recwrap.pl (リビジョン 83) +++ trunk/install/perl/recwrap.pl (リビジョン 91) @@ -464,9 +464,6 @@ @processline = split(/\s+/,$_); $filename = $processline[8]; - #print "DEBUG $_ \n"; - #print "DEBUG $processline[0]/$processline[1]/$processline[2]/$processline[3]/$processline[4]/$processline[5]/$processline[6]/$processline[7]/$processline[8] \n"; $filename =~ s/$recfolderpath\///; - #print "DEBUG FILENAME $filename\n"; - &writelog("recwrap DEBUG continuousrecordingcheck() FILENAME $filename"); + &writelog("recwrap DEBUG continuousrecordingcheck() FILENAME $filename"); # 1520-9-20081201-0230.m2t @filenameparts = split(/-/,$filename); @@ -474,5 +471,6 @@ $startdate = $filenameparts[2]; $starttime = $filenameparts[3]; - $startdatetime = $filenameparts[2].$filenameparts[3]; + @filenameparts = split(/\./,$starttime); + $startdatetime = $startdate.$filenameparts[0]; #DBから録画中番組のデータ探す $DBQuery = " Index: trunk/install/php/viewepg.php =================================================================== --- trunk/install/php/viewepg.php (リビジョン 70) +++ trunk/install/php/viewepg.php (リビジョン 91) @@ -40,5 +40,5 @@ </head> <?php -$start = getgetnumform(start); +$start = getgetnumform("start"); if ($start == ""){ @@ -100,5 +100,5 @@ } -$page = getgetnumform(p); +$page = getgetnumform("p"); if (($page == "")|| ($page <= 0) ){ @@ -247,6 +247,7 @@ $rowspan = $i - $dataplace ; //そして自分自身にタグを - if ($item[$i][$stationname] == ""){ - $item[$i][$stationname] = ""; + //if ((!isset($item[$i][$stationname])) && ($item[$i][$stationname] == "")){ + if (!isset($item[$i][$stationname])){ + $item[$i][$stationname] = null ; }else{ $item[$i][$stationname] = "<td ". $item[$i][$stationname] . "</td>"; @@ -261,15 +262,21 @@ } - }elseif ($item[$i][$stationname] == ""){ +// }elseif ((!isset($item[$i][$stationname]))&&($item[$i][$stationname] == "")){ + }elseif (!isset($item[$i][$stationname])){ //ヌルなら - $item[$i][$stationname] = $item[$i][$stationname] ; + //$item[$i][$stationname] = $item[$i][$stationname] ; + $item[$i][$stationname] = null ; // $item[$i][$stationname] = "<td><br></td>" ; }else{ //なんか入ってるなら $rowspan = $i - $dataplace; + $itemDataplaceStationname = null; + if (isset($item[$dataplace][$stationname])){ + $itemDataplaceStationname = $item[$dataplace][$stationname]; + } if ($rowspan === 1 ){ - $item[$dataplace][$stationname] = "<td ". $item[$dataplace][$stationname] . "</td>"; + $item[$dataplace][$stationname] = "<td ". $itemDataplaceStationname . "</td>"; }else{ - $item[$dataplace][$stationname] = "<td rowspan = $rowspan ". $item[$dataplace][$stationname] . "</td>"; + $item[$dataplace][$stationname] = "<td rowspan = $rowspan ". $itemDataplaceStationname . "</td>"; // $item[$dataplace][$stationname] = "<td ". $item[$dataplace][$stationname] . "$rowspan </td>"; }