チェンジセット 91

差分発生行の前後
無視リスト:
コミット日時:
2009/05/05 23:34:00 (15 年前)
コミッタ:
sorshi
ログメッセージ:

PT1対応。

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • trunk/doc/CHANGES.txt

    r90 r91  
    11foltia 更新履歴 http://www.dcc-jpl.com/soft/foltia/ 
     2 
     309.05.05 
     4digitaltvrecording.pl: 
     5recwrap.pl: 
     6PT1対応。 
    27 
    3809.4.30 
  • trunk/doc/index.html

    r83 r91  
    7373<ul> 
    7474  <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> 
    7676  <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> 
    7777 <div class="sidebar"> 
     
    100100   予約ボタンを押すとデータベースの録画予約テーブル[foltia_tvrecord]に番組IDと放送局、録画ビットレートが追加されます。その後、キュー入れプログラム[addatq.pl]を呼びます。addatq.plは番組IDと局IDを受け取り48時間以内の放映予定を探し、それぞれの放映ごとに録画準備のためのプログラム[folprep.pl]を放送予定時刻の5分前にキュー入れします。<br /> 
    101101   予約番組の放送予定時刻の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 /> 
    103103 [digitaltvrecording.pl]は実際の録画プログラムを呼び出します。BS1/BS2はwineを利用してTsSplitter.exeを起動して適切な分割処理をします。<br /> 
    104104   アナログ録画の場合はキャプチャプログラム[tvrecording.pl]はivtvドライバに付属のrecord-v4l2.plをベースに拡張したもので、搭載されている録画デバイスの空き状況を調べて、空いてる適切なデバイスを利用します。foltiaは特に指定をしない場合、同時録画する場合、地上波録画をキャプチャデバイスの若い番号から順番に、外部入力を一番大きいデバイスから順番に使用していきます。例としてキャプチャカードが4枚入っている場合、地上波録画は/dev/video0から、外部入力録画は/dev/video3から使われていきます。空きデバイスがない場合は、一番若い番号を持つビデオデバイスをつかんでるプロセスを止め、そのデバイスを利用します。録画は前後に10秒程度の余分な録画を行おうとするため、同一のチャネルで連続している番組を指定した場合であっても可能であれば2チューナ使用する形となります。tvrecording.plの録画チャンネルの引数に0を指定した場合はS入力が、-1を指定した場合はコンポジット入力が録画されます。外部入力はデフォルトで一番番号の大きいデバイスを利用します。<br /> 
     
    179179 <h3>・各種ツールインストール</h3> 
    180180<p>以下のプログラムを利用します。<br /> 
    181 recfriio:Friioを使ったデジタルハイビジョン録画に利用 http://2sen.dip.jp/cgi-bin/friioup/source/up0777.zip 
    182 <br /> 
     181recfriio:Friioを使ったデジタルハイビジョン録画に利用 http://2sen.dip.jp/cgi-bin/friioup/source/up0777.zip<br /> 
     182recpt1: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 
    183186TsSplitter:MPEG-2 
    184187TS streamを分割するwindows用プログラム http://2sen.dip.jp/cgi-bin/friioup/source/up0827.zip<br /> 
  • trunk/install/perl/digitaltvrecording.pl

    r83 r91  
    327327sub calldigitalrecorder{ 
    328328# 
    329 #いまんところ白friioと黒friioのみ 
     329#白friioと黒friio、PT1対応 
    330330#2008/10/23 recfriio4仕様に変更  
    331331# 
    332332my $oserr = 0; 
    333  
     333my $originalrecch = $recch; 
     334my $errorflag = 0; 
    334335if ($bandtype == 0){ 
    335336# 地デジ friio 
     
    375376} 
    376377 
    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 
     393if ($errorflag >= 1 ){ 
    378394# b25,recfriioがあるか確認 
    379395        if  (-e "$toolpath/perl/tool/recfriio"){ 
     
    396412        exit 1; 
    397413        } 
     414}#end if errorflag 
    398415 
    399416#BS1/BS2などのスプリットを 
  • trunk/install/perl/recwrap.pl

    r83 r91  
    464464                @processline = split(/\s+/,$_); 
    465465                $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"; 
    468466                $filename =~ s/$recfolderpath\///; 
    469                 #print "DEBUG FILENAME $filename\n"; 
    470                         &writelog("recwrap DEBUG continuousrecordingcheck()  FILENAME $filename"); 
     467                &writelog("recwrap DEBUG continuousrecordingcheck()  FILENAME $filename"); 
    471468                # 1520-9-20081201-0230.m2t 
    472469                @filenameparts = split(/-/,$filename); 
     
    474471                $startdate = $filenameparts[2]; 
    475472                $starttime = $filenameparts[3]; 
    476                 $startdatetime = $filenameparts[2].$filenameparts[3]; 
     473                @filenameparts = split(/\./,$starttime); 
     474                $startdatetime = $startdate.$filenameparts[0]; 
    477475                #DBから録画中番組のデータ探す 
    478476        $DBQuery =  " 
  • trunk/install/php/viewepg.php

    r70 r91  
    4040</head> 
    4141<?php 
    42 $start = getgetnumform(start); 
     42$start = getgetnumform("start"); 
    4343 
    4444if ($start == ""){ 
     
    100100} 
    101101 
    102 $page = getgetnumform(p); 
     102$page = getgetnumform("p"); 
    103103 
    104104if (($page == "")|| ($page <= 0) ){ 
     
    247247                $rowspan = $i - $dataplace ; 
    248248                //そして自分自身にタグを 
    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 ; 
    251252                        }else{ 
    252253                        $item[$i][$stationname]  = "<td ". $item[$i][$stationname] . "</td>"; 
     
    261262                        } 
    262263 
    263         }elseif ($item[$i][$stationname] == ""){ 
     264//      }elseif ((!isset($item[$i][$stationname]))&&($item[$i][$stationname] == "")){ 
     265        }elseif (!isset($item[$i][$stationname])){ 
    264266        //ヌルなら 
    265                 $item[$i][$stationname]  =  $item[$i][$stationname] ; 
     267                //$item[$i][$stationname]  =  $item[$i][$stationname] ; 
     268                $item[$i][$stationname]  =  null ; 
    266269//              $item[$i][$stationname]  =  "<td><br></td>" ; 
    267270        }else{ 
    268271        //なんか入ってるなら 
    269272                $rowspan = $i - $dataplace; 
     273                $itemDataplaceStationname = null; 
     274                if (isset($item[$dataplace][$stationname])){ 
     275                $itemDataplaceStationname = $item[$dataplace][$stationname]; 
     276                } 
    270277                        if ($rowspan === 1 ){ 
    271                         $item[$dataplace][$stationname]  = "<td ". $item[$dataplace][$stationname] . "</td>"; 
     278                        $item[$dataplace][$stationname]  = "<td ". $itemDataplaceStationname . "</td>"; 
    272279                        }else{ 
    273                         $item[$dataplace][$stationname]  = "<td rowspan = $rowspan ". $item[$dataplace][$stationname] . "</td>"; 
     280                        $item[$dataplace][$stationname]  = "<td rowspan = $rowspan ". $itemDataplaceStationname . "</td>"; 
    274281//                      $item[$dataplace][$stationname]  = "<td ". $item[$dataplace][$stationname] . "$rowspan </td>"; 
    275282                        } 
track feed