- コミット日時:
- 2009/05/05 23:34:00 (16 年前)
- ファイル:
-
- trunk/doc/CHANGES.txt (更新) (1 diff)
- trunk/doc/index.html (更新) (3 diffs)
- trunk/install/perl/digitaltvrecording.pl (更新) (3 diffs)
- trunk/install/perl/recwrap.pl (更新) (2 diffs)
- trunk/install/php/viewepg.php (更新) (4 diffs)
凡例:
- 変更無し
- 追加
- 削除
- 更新
- コピー
- 移動
trunk/doc/CHANGES.txt
r90 r91 1 1 foltia 更新履歴 http://www.dcc-jpl.com/soft/foltia/ 2 3 09.05.05 4 digitaltvrecording.pl: 5 recwrap.pl: 6 PT1対応。 2 7 3 8 09.4.30 trunk/doc/index.html
r83 r91 73 73 <ul> 74 74 <li>Linuxの動くAT互換機:筆者の環境ではPentium4(2.8GHz)/2GB RAMの環境で30分番組のハイビジョンTSをデフォルト設定でH.264にトランスコードするのに約90分程度で完了しています。</li> 75 <li>Friio などのデジタルハイビジョン録画デバイス:HDUSもLinuxで動いているようですが未テストです。PT1は絶賛解析中らしいです。期待して待ってましょう。</li>75 <li>FriioやPT1などのデジタルハイビジョン録画デバイス:現在対応しているのはFriio,Friio BS/CS,PT1です。HDUSもLinuxで動いているようですが未テストです。</li> 76 76 <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> 77 77 <div class="sidebar"> … … 100 100 予約ボタンを押すとデータベースの録画予約テーブル[foltia_tvrecord]に番組IDと放送局、録画ビットレートが追加されます。その後、キュー入れプログラム[addatq.pl]を呼びます。addatq.plは番組IDと局IDを受け取り48時間以内の放映予定を探し、それぞれの放映ごとに録画準備のためのプログラム[folprep.pl]を放送予定時刻の5分前にキュー入れします。<br /> 101 101 予約番組の放送予定時刻の5分前になると、準備プログラム[folprep.pl]が実行されます。これは、最新の番組表データを再取得し、放映時刻が変更されてないか確認後、放送開始時刻の1分前に録画プログラム[recwrap.pl]が走るようにキューを入れます。放送時刻が15分以上先に延びていたら、再度放送予定時刻の5分前に準備プログラム[folprep.pl]をキュー入れします。<br /> 102 放送予定時刻の1分前になると録画の一連の流れを管理する録画プログラム[recwrap.pl]が起動します。このプログラムは、録画チャンネルが外部入力であれば外部チューナのチャンネルを適切なものに切り替えるためにリモコン送信プログラム[transfer.pl]を呼びだし、次に実際にビデオでバイスからファイルへの記録を行う録画プログラム[digitaltvrecording.pl]か[tvrecording.pl]を呼び出します。 デジタル録画出来るデバイスが不足した場合は利用可能なアナログ録画デバイスがあればそちらで録画を実行するように努力します。<br />102 放送予定時刻の1分前になると録画の一連の流れを管理する録画プログラム[recwrap.pl]が起動します。このプログラムは、録画チャンネルが外部入力であれば外部チューナのチャンネルを適切なものに切り替えるためにリモコン送信プログラム[transfer.pl]を呼びだし、次に実際にビデオでバイスからファイルへの記録を行う録画プログラム[digitaltvrecording.pl]か[tvrecording.pl]を呼び出します。録画でバイスはPT1→friioの順で接続されていれば自動的に空きデバイスを探して録画します。デジタル録画出来るデバイスが不足した場合は利用可能なアナログ録画デバイスがあればそちらで録画を実行するように努力します。<br /> 103 103 [digitaltvrecording.pl]は実際の録画プログラムを呼び出します。BS1/BS2はwineを利用してTsSplitter.exeを起動して適切な分割処理をします。<br /> 104 104 アナログ録画の場合はキャプチャプログラム[tvrecording.pl]はivtvドライバに付属のrecord-v4l2.plをベースに拡張したもので、搭載されている録画デバイスの空き状況を調べて、空いてる適切なデバイスを利用します。foltiaは特に指定をしない場合、同時録画する場合、地上波録画をキャプチャデバイスの若い番号から順番に、外部入力を一番大きいデバイスから順番に使用していきます。例としてキャプチャカードが4枚入っている場合、地上波録画は/dev/video0から、外部入力録画は/dev/video3から使われていきます。空きデバイスがない場合は、一番若い番号を持つビデオデバイスをつかんでるプロセスを止め、そのデバイスを利用します。録画は前後に10秒程度の余分な録画を行おうとするため、同一のチャネルで連続している番組を指定した場合であっても可能であれば2チューナ使用する形となります。tvrecording.plの録画チャンネルの引数に0を指定した場合はS入力が、-1を指定した場合はコンポジット入力が録画されます。外部入力はデフォルトで一番番号の大きいデバイスを利用します。<br /> … … 179 179 <h3>・各種ツールインストール</h3> 180 180 <p>以下のプログラムを利用します。<br /> 181 recfriio:Friioを使ったデジタルハイビジョン録画に利用 http://2sen.dip.jp/cgi-bin/friioup/source/up0777.zip 182 <br /> 181 recfriio:Friioを使ったデジタルハイビジョン録画に利用 http://2sen.dip.jp/cgi-bin/friioup/source/up0777.zip<br /> 182 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 /> 183 <blockquote>hg clone http://hg.honeyplanet.jp/pt1</blockquote> 184 が便利。 185 183 186 TsSplitter:MPEG-2 184 187 TS streamを分割するwindows用プログラム http://2sen.dip.jp/cgi-bin/friioup/source/up0827.zip<br /> trunk/install/perl/digitaltvrecording.pl
r83 r91 327 327 sub calldigitalrecorder{ 328 328 # 329 # いまんところ白friioと黒friioのみ329 #白friioと黒friio、PT1対応 330 330 #2008/10/23 recfriio4仕様に変更 331 331 # 332 332 my $oserr = 0; 333 333 my $originalrecch = $recch; 334 my $errorflag = 0; 334 335 if ($bandtype == 0){ 335 336 # 地デジ friio … … 375 376 } 376 377 377 378 # PT1 379 # b25,recpt1があるか確認 380 if (-e "$toolpath/perl/tool/recpt1"){ 381 &writelog("digitaltvrecording DEBUG recpt1 --b25 $originalrecch $reclengthsec $outputfile "); 382 $oserr = system("$toolpath/perl/tool/recpt1 --b25 $originalrecch $reclengthsec $outputfile "); 383 $oserr = $oserr >> 8; 384 if ($oserr > 0){ 385 &writelog("digitaltvrecording :ERROR :PT1 is BUSY.$oserr"); 386 $errorflag = 2; 387 } 388 }else{ # エラー recpt1がありません 389 &writelog("digitaltvrecording :ERROR :recpt1 not found. You must install $toolpath/b25 and $toolpath/recpt1."); 390 $errorflag = 1; 391 } 392 # friio 393 if ($errorflag >= 1 ){ 378 394 # b25,recfriioがあるか確認 379 395 if (-e "$toolpath/perl/tool/recfriio"){ … … 396 412 exit 1; 397 413 } 414 }#end if errorflag 398 415 399 416 #BS1/BS2などのスプリットを trunk/install/perl/recwrap.pl
r83 r91 464 464 @processline = split(/\s+/,$_); 465 465 $filename = $processline[8]; 466 #print "DEBUG $_ \n";467 #print "DEBUG $processline[0]/$processline[1]/$processline[2]/$processline[3]/$processline[4]/$processline[5]/$processline[6]/$processline[7]/$processline[8] \n";468 466 $filename =~ s/$recfolderpath\///; 469 #print "DEBUG FILENAME $filename\n"; 470 &writelog("recwrap DEBUG continuousrecordingcheck() FILENAME $filename"); 467 &writelog("recwrap DEBUG continuousrecordingcheck() FILENAME $filename"); 471 468 # 1520-9-20081201-0230.m2t 472 469 @filenameparts = split(/-/,$filename); … … 474 471 $startdate = $filenameparts[2]; 475 472 $starttime = $filenameparts[3]; 476 $startdatetime = $filenameparts[2].$filenameparts[3]; 473 @filenameparts = split(/\./,$starttime); 474 $startdatetime = $startdate.$filenameparts[0]; 477 475 #DBから録画中番組のデータ探す 478 476 $DBQuery = " trunk/install/php/viewepg.php
r70 r91 40 40 </head> 41 41 <?php 42 $start = getgetnumform( start);42 $start = getgetnumform("start"); 43 43 44 44 if ($start == ""){ … … 100 100 } 101 101 102 $page = getgetnumform( p);102 $page = getgetnumform("p"); 103 103 104 104 if (($page == "")|| ($page <= 0) ){ … … 247 247 $rowspan = $i - $dataplace ; 248 248 //そして自分自身にタグを 249 if ($item[$i][$stationname] == ""){ 250 $item[$i][$stationname] = ""; 249 //if ((!isset($item[$i][$stationname])) && ($item[$i][$stationname] == "")){ 250 if (!isset($item[$i][$stationname])){ 251 $item[$i][$stationname] = null ; 251 252 }else{ 252 253 $item[$i][$stationname] = "<td ". $item[$i][$stationname] . "</td>"; … … 261 262 } 262 263 263 }elseif ($item[$i][$stationname] == ""){ 264 // }elseif ((!isset($item[$i][$stationname]))&&($item[$i][$stationname] == "")){ 265 }elseif (!isset($item[$i][$stationname])){ 264 266 //ヌルなら 265 $item[$i][$stationname] = $item[$i][$stationname] ; 267 //$item[$i][$stationname] = $item[$i][$stationname] ; 268 $item[$i][$stationname] = null ; 266 269 // $item[$i][$stationname] = "<td><br></td>" ; 267 270 }else{ 268 271 //なんか入ってるなら 269 272 $rowspan = $i - $dataplace; 273 $itemDataplaceStationname = null; 274 if (isset($item[$dataplace][$stationname])){ 275 $itemDataplaceStationname = $item[$dataplace][$stationname]; 276 } 270 277 if ($rowspan === 1 ){ 271 $item[$dataplace][$stationname] = "<td ". $item [$dataplace][$stationname]. "</td>";278 $item[$dataplace][$stationname] = "<td ". $itemDataplaceStationname . "</td>"; 272 279 }else{ 273 $item[$dataplace][$stationname] = "<td rowspan = $rowspan ". $item [$dataplace][$stationname]. "</td>";280 $item[$dataplace][$stationname] = "<td rowspan = $rowspan ". $itemDataplaceStationname . "</td>"; 274 281 // $item[$dataplace][$stationname] = "<td ". $item[$dataplace][$stationname] . "$rowspan </td>"; 275 282 }