チェンジセット 94: trunk/install/perl/recwrap.pl

差分発生行の前後
無視リスト:
コミット日時:
2010/02/28 22:28:26 (14 年前)
コミッタ:
sorshi
ログメッセージ:

SQLite採用

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • trunk/install/perl/recwrap.pl

    r91 r94  
    1515use DBI; 
    1616use DBD::Pg; 
     17use DBD::SQLite; 
    1718use Schedule::At; 
    1819use Time::Local; 
     
    2122$path = $0; 
    2223$path =~ s/recwrap.pl$//i; 
    23 if ($pwd ne "./"){ 
     24if ($path ne "./"){ 
    2425push( @INC, "$path"); 
    2526} 
     
    4647 
    4748#DB初期化 
    48         my $data_source = sprintf("dbi:%s:dbname=%s;host=%s;port=%d", 
    49                 $DBDriv,$DBName,$DBHost,$DBPort); 
    50          $dbh = DBI->connect($data_source,$DBUser,$DBPass) ||die $DBI::error;; 
     49$dbh = DBI->connect($DSN,$DBUser,$DBPass) ||die $DBI::error;; 
    5150 
    5251 
     
    5756} 
    5857 
    59 $outputfile = `date  +%Y%m%d-%H%M --date "1 min "`
     58$outputfile = strftime("%Y%m%d-%H%M", localtime(time + 60))
    6059chomp($outputfile); 
    6160 
     
    7776&writelog("recwrap RECSTART DIGITAL $digitalstationband $digitalch $reclength $stationid 0 $outputfilename $tid $countno friio"); 
    7877#録画 
    79 $starttime = (`date +%s`); 
     78    $starttime = time(); 
    8079$oserr = system("$toolpath/perl/digitaltvrecording.pl $digitalstationband $digitalch $reclength $stationid 0 $outputfilename $tid $countno friio"); 
    8180$oserr = $oserr / 256; 
     
    119118#録画 
    120119#system("$toolpath/perl/tvrecording.pl $recch $reclength 0 $outputfile $bitrate $tid $countno"); 
    121 $starttime = (`date +%s`); 
     120    $starttime = time(); 
    122121 
    123122$oserr = system("$toolpath/perl/tvrecording.pl $recch $reclength 0 $outputfilename $bitrate $tid $countno"); 
     
    131130 
    132131#デバイスビジーで即死してないか検出 
    133 $now = (`date +%s`); 
     132$now = time(); 
    134133        if ($now < $starttime + 100){ #録画プロセス起動してから100秒以内に戻ってきてたら 
    135        $retrycounter == 0; 
     134    $retrycounter = 0; 
    136135                while($now < $starttime + 100){ 
    137136                        if($retrycounter >= 5){ 
     
    141140                &writelog("recwrap retry recording $now $starttime"); 
    142141                #アナログ録画 
    143 $starttime = (`date +%s`); 
     142       $starttime = time(); 
    144143if($outputfilename =~ /.m2t$/){ 
    145144        $outputfilename =~ s/.m2t$/.m2p/; 
    146145} 
    147146$oserr = system("$toolpath/perl/tvrecording.pl $recch $reclength N $outputfilename $bitrate $tid $countno"); 
    148 $now = (`date +%s`); 
     147       $now = time(); 
    149148$oserr = $oserr / 256; 
    150149                        if ($oserr == 1){ 
     
    160159 
    161160# m2pファイル名をPIDレコードに書き込み 
    162         $DBQuery =  "UPDATE foltia_subtitle SET m2pfilename = '$outputfilename' WHERE pid = '$pid' "; 
    163          $sth = $dbh->prepare($DBQuery); 
    164         $sth->execute(); 
    165 &writelog("recwrap DEBUG UPDATEDB $DBQuery"); 
     161$sth = $dbh->prepare($stmt{'recwrap.1'}); 
     162$sth->execute($outputfilename, $pid); 
     163&writelog("recwrap DEBUG UPDATEDB $stmt{'recwrap.1'}"); 
    166164&changefilestatus($pid,$FILESTATUSRECEND); 
    167165 
    168166# m2pファイル名をPIDレコードに書き込み 
    169         $DBQuery =  "insert into foltia_m2pfiles values ('$outputfilename')"; 
    170          $sth = $dbh->prepare($DBQuery); 
    171         $sth->execute(); 
    172 &writelog("recwrap DEBUG UPDATEDB $DBQuery"); 
     167$sth = $dbh->prepare($stmt{'recwrap.2'}); 
     168$sth->execute($outputfilename); 
     169&writelog("recwrap DEBUG UPDATEDB $stmt{'recwrap.2'}"); 
    173170 
    174171# Starlight breaker向けキャプチャ画像作成 
     
    181178 
    182179 
    183  
    184180# MPEG4 ------------------------------------------------------ 
    185181#MPEG4トラコン必要かどうか 
    186 $DBQuery =  "SELECT psp,aspect,title FROM foltia_program WHERE tid = '$tid' "; 
    187          $sth = $dbh->prepare($DBQuery); 
    188         $sth->execute(); 
     182$sth = $dbh->prepare($stmt{'recwrap.3'}); 
     183$sth->execute($tid); 
    189184 @psptrcn= $sth->fetchrow_array; 
    190185if ($psptrcn[0]  == 1 ){#トラコン番組 
     
    192187exec ("$toolpath/perl/ipodtranscode.pl"); 
    193188exit; 
    194 # 
    195 # ここから下は旧エンコード#2008/12/23  
    196 # 新エンコードはDBを見て未完了MPEG2を順次トラコン処理、 
    197 # 分散エンコードもきっとラクチンに対応可能 
    198 # 新エンコードではXviD/M4VスタイルとPSPファイル名対応を廃止 
    199  
    200 &changefilestatus($pid,80); 
    201 #MPEG4ムービーディレクトリがあるかどうか 
    202   
    203 #TIDが100以上の3桁の場合はそのまま 
    204 my $pspfilnamehd = ""; 
    205  
    206 $pspfilnamehd = $tid; 
    207 &makemp4dir($tid); 
    208 $pspdirname = "$tid.localized/"; 
    209 $pspdirname = $recfolderpath."/".$pspdirname; 
    210  
    211 #なければ作る 
    212 #unless (-e $pspdirname ){ 
    213 #       system("$toolpath/perl/mklocalizeddir.pl $tid"); 
    214 #       #&writelog("recwrap mkdir $pspdirname"); 
    215 #} 
    216 $pspdirname = "$tid.localized/mp4/"; 
    217 $pspdirname = $recfolderpath."/".$pspdirname; 
    218 #なければ作る 
    219 #unless (-e $pspdirname ){ 
    220 #       mkdir $pspdirname ,0777; 
    221 #       #&writelog("recwrap mkdir $pspdirname"); 
    222 #} 
    223  
    224 #ファイル名決定 
    225 if ($mp4filenamestyle == 1){# 1;よりわかりやすいファイル名 
    226  $pspfilname = $mp4newstylefilename ; 
    227   
    228 }else{##0:PSP ファームウェアver.2.80より前と互換性を持つファイル名 
    229 #・フォルダ名[100MNV01]の100の部分は変更可(100〜999)。 
    230 # MP_ROOT ━ 100MNV01 ┳ M4V00001.MP4(動画) 
    231 #┃                  ┗ M4V00001.THM(サムネイル)※必須ではない 
    232  
    233 #ファイル名決定 
    234 #ファイル名決定 #新アルゴリズム 
    235 #TID 0000-3599まで[3桁] 
    236 #話数 00-999まで[2桁] 
    237  
    238 my $pspfilnameft = ""; 
    239 my $pspfilnameyearhd = ""; 
    240 my $pspfilnameyearft = ""; 
    241  
    242 $btid = $tid % 3600; 
    243 # print "$btid\n"; 
    244  
    245 if($btid >= 0 && $btid < 1000){ 
    246  
    247         $pspfilnamehd = sprintf("%03d",$btid); 
    248  
    249 }elsif ($btid >= 1000 && $btid < 3600){ 
    250         $pspfilnameyearhd = substr($btid, 0, 2); 
    251         $pspfilnameyearhd =~ s/10/A/; 
    252         $pspfilnameyearhd =~ s/11/B/; 
    253         $pspfilnameyearhd =~ s/12/C/; 
    254         $pspfilnameyearhd =~ s/13/D/; 
    255         $pspfilnameyearhd =~ s/14/E/; 
    256         $pspfilnameyearhd =~ s/15/F/; 
    257         $pspfilnameyearhd =~ s/16/G/; 
    258         $pspfilnameyearhd =~ s/17/H/; 
    259         $pspfilnameyearhd =~ s/18/I/; 
    260         $pspfilnameyearhd =~ s/19/J/; 
    261         $pspfilnameyearhd =~ s/20/K/; 
    262         $pspfilnameyearhd =~ s/21/L/; 
    263         $pspfilnameyearhd =~ s/22/M/; 
    264         $pspfilnameyearhd =~ s/23/N/; 
    265         $pspfilnameyearhd =~ s/24/O/; 
    266         $pspfilnameyearhd =~ s/25/P/; 
    267         $pspfilnameyearhd =~ s/26/Q/; 
    268         $pspfilnameyearhd =~ s/27/R/; 
    269         $pspfilnameyearhd =~ s/28/S/; 
    270         $pspfilnameyearhd =~ s/29/T/; 
    271         $pspfilnameyearhd =~ s/30/U/; 
    272         $pspfilnameyearhd =~ s/31/V/; 
    273         $pspfilnameyearhd =~ s/32/W/; 
    274         $pspfilnameyearhd =~ s/33/X/; 
    275         $pspfilnameyearhd =~ s/34/Y/; 
    276         $pspfilnameyearhd =~ s/35/Z/; 
    277          
    278 $pspfilnameyearft = substr($btid, 2, 2); 
    279 $pspfilnameyearft = sprintf("%02d",$pspfilnameyearft); 
    280 $pspfilnamehd = $pspfilnameyearhd . $pspfilnameyearft; 
    281  
    282 } 
    283  
    284 # 話数 
    285 if (0 < $countno && $countno < 100 ){ 
    286 # 2桁 
    287         $pspfilnameft = sprintf("%02d",$countno); 
    288 }elsif(100 <= $countno && $countno < 1000 ){ 
    289 # 3桁 
    290         $pspfilnameft = sprintf("%03d",$countno); # 話数3桁 
    291         $pspfilnamehd = substr($pspfilnamehd, 0, 2); # TID 二桁 後ろ1バイト落とし 
    292 }elsif(1000 <= $countno && $countno < 10000 ){ 
    293 # 4桁 
    294         $pspfilnameft = sprintf("%04d",$countno); # 話数4桁 
    295         $pspfilnamehd = substr($pspfilnamehd, 0, 1); # TID 1桁 後ろ2バイト落とし 
    296  
    297  
    298 }elsif($countno == 0){ 
    299 #タイムスタンプが最新のMP4ファイル名取得 
    300 my $newestmp4filename = `cd $pspdirname ; ls -t *.MP4 | head -1`; 
    301  if ($newestmp4filename =~ /M4V$tid/){ 
    302         $nowcountno = $' ; 
    303                 $nowcountno++; 
    304                 $pspfilnameft = sprintf("%02d",$nowcountno); 
    305         while (-e "$pspdirname/M4V".$pspfilnamehd.$pspfilnameft.".MP4"){ 
    306                 $nowcountno++; 
    307                 $pspfilnameft = sprintf("%02d",$nowcountno);     
    308         print "File exist:$nowcountno\n"; 
    309         } 
    310 #print "NeXT\n"; 
    311 }else{ 
    312 # 0の場合 週番号を100から引いたもの 
    313 # week number of year with Monday as first day of week (01..53) 
    314 #だったけど常に0に 
    315 #       my $weeno = `date "+%V"`; 
    316 #       $weeno = 100 - $weeno ; 
    317 #       $pspfilnameft = sprintf("%02d",$weeno); 
    318         $pspfilnameft = sprintf("%02d",0); 
    319 #print "WEEKNO\n"; 
    320 } 
    321  
    322 } 
    323  
    324 my $pspfilname = $pspfilnamehd.$pspfilnameft  ; 
    325 # print "$pspfilname($pspfilnamehd/$pspfilnameft)\n"; 
    326 }# endif MP4ファイル名が新styleなら 
    327 #2006/12/03_10:30:24 recwrap TRCNSTART vfr4psp.sh /home/foltia/php/tv/591-87-20061203-1000.m2p -591-87-20061203-1000 /home/foltia/php/tv/591.localized/mp4/ 3 
    328  
    329  
    330 # トラコンキューイング #2007/7/10  
    331 my $trcnprocesses = ""; 
    332 my $cpucores = `ls /proc/acpi/processor | wc -l`; 
    333 $cpucores =~ s/[^0-9]//gi; 
    334 unless ($cpucores >= 1 ){ 
    335         $cpucores = 1; 
    336 } 
    337 do { 
    338         $trcnprocesses = `ps ax | grep ffmpeg | grep -v grep |  wc -l `; 
    339         $trcnprocesses =~ s/[^0-9]//gi; 
    340         # 既にトラコンプロセスが走っているなら適当に待機 
    341         if ($trcnprocesses  >= $cpucores){ 
    342                         if (-e "/proc/uptime" ){ 
    343                         $loadaverage = `uptime`; 
    344                         chomp($loadaverage); 
    345                         }else{ 
    346                         $loadaverage = ""; 
    347                         } 
    348                         &writelog("recwrap TRCN WAITING :$trcnprocesses / $cpucores :$outputfilename $loadaverage"); 
    349                 sleep 113; 
    350                 sleep ($recch)*5; 
    351         } 
    352 } until ($trcnprocesses  < $cpucores); 
    353  
    354  
    355 if (($trconqty eq "")||($trconqty == 0 )){ 
    356         &writelog("recwrap TRCNSTART vfr4psp.sh $recfolderpath/$outputfilename $pspfilname $pspdirname $psptrcn[1]"); 
    357         system("$toolpath/perl/transcode/vfr4psp.sh $recfolderpath/$outputfilename $pspfilname $pspdirname $psptrcn[1]"); 
    358         &writelog("recwrap TRCNEND  vfr4psp.sh $recfolderpath/$outputfilename $pspfilname $pspdirname $psptrcn[1]"); 
    359         #最適化 
    360         $DBQuery =  "SELECT subtitle  FROM  foltia_subtitle WHERE tid = '$tid' AND countno = '$countno' "; 
    361                  $sth = $dbh->prepare($DBQuery); 
    362                 $sth->execute(); 
    363          @programtitle = $sth->fetchrow_array; 
    364         if ( $countno == "0" ){ 
    365                 $pspcountno = ""; 
    366         }else{ 
    367                 $pspcountno = $countno ; 
    368         } 
    369         &writelog("recwrap OPTIMIZE  mp4psp -p $pspdirname/M4V$pspfilname.MP4   -t  '$psptrcn[2] $pspcountno $programtitle[0]' "); 
    370         Jcode::convert(\$programtitle[0],'euc'); 
    371         system ("/usr/local/bin/mp4psp -p $pspdirname/M4V$pspfilname.MP4   -t  '$psptrcn[2] $pspcountno $programtitle[0]'") ; 
    372 $mp4filename = "M4V${pspfilname}.MP4"; 
    373 $thmfilename = "M4V${pspfilname}.THM"; 
    374 }else{# #2006/12/6 新エンコーダ 
    375  
    376         &writelog("recwrap TRCNSTART ipodtranscode.pl $recfolderpath/$outputfilename $pspfilname $pspdirname $pid $psptrcn[1]"); 
    377         system("$toolpath/perl/ipodtranscode.pl $recfolderpath/$outputfilename $pspfilname $pspdirname $pid $psptrcn[1]"); 
    378         &writelog("recwrap TRCNEND  ipodtranscode.pl $recfolderpath/$outputfilename $pspfilname $pspdirname $psptrcn[1]"); 
    379  
    380         if($trconqty >= 2){#H.264/AVCなら 
    381         $mp4filename = "MAQ${pspfilname}.MP4"; 
    382         $thmfilename = "MAQ${pspfilname}.THM"; 
    383         }else{ 
    384         $mp4filename = "M4V${pspfilname}.MP4"; 
    385         $thmfilename = "M4V${pspfilname}.THM"; 
    386         } 
    387 } 
    388  
    389 #サムネール 
    390  
    391 # mplayer -ss 00:01:20 -vo jpeg:outdir=/home/foltia/php/tv/443MNV01 -ao null -sstep 1 -frames 3  -v 3 /home/foltia/php/tv/443-07-20050218-0030.m2p 
    392 #2005/02/22_18:30:05 recwrap TRCNSTART vfr4psp.sh /home/foltia/php/tv/447-21-20050222-1800.m2p 44721 /home/foltia/php/tv/447MNV01 3 
    393 &writelog("recwrap THAMJ  mplayer -ss 00:01:20 -vo jpeg:outdir=$pspdirname -ao null -sstep 1 -frames 3  -v 3 $recfolderpath/$outputfilename "); 
    394 system ("mplayer -ss 00:01:20 -vo jpeg:outdir=$pspdirname -ao null -sstep 1 -frames 3  -v 3 $recfolderpath/$outputfilename"); 
    395 &writelog("recwrap THAMI  convert -crop 160x120+1+3 -resize 165x126\! $pspdirname/00000002.jpg $pspdirname/M4V$pspdirname.THM "); 
    396  
    397 if (-e "$pspdirname/$thmfilename"){ 
    398 $timestamp =`date "+%Y%m%d-%H%M%S"`; 
    399 chomp $timestamp; 
    400         system("convert -crop 160x120+1+3 -resize 165x126\! $pspdirname/00000002.jpg $pspdirname/$thmfilename".$timestamp.".THM"); 
    401  
    402 }else{ 
    403         system("convert -crop 160x120+1+3 -resize 165x126\! $pspdirname/00000002.jpg $pspdirname/$thmfilename"); 
    404 } 
    405 # rm -rf 00000001.jpg       
    406 # convert -resize 160x120\! 00000002.jpg M4V44307.THM 
    407 # rm -rf 00000002.jpg   
    408 system("rm -rf $pspdirname/0000000*.jpg "); 
    409  
    410  
    411  
    412  
    413 # MP4ファイル名をPIDレコードに書き込み 
    414         $DBQuery =  "UPDATE foltia_subtitle SET PSPfilename = '$mp4filename' WHERE pid = '$pid' "; 
    415          $sth = $dbh->prepare($DBQuery); 
    416         $sth->execute(); 
    417 &writelog("recwrap UPDATEsubtitleDB  $DBQuery"); 
    418  
    419 # MP4ファイル名をfoltia_mp4files挿入 
    420         $DBQuery = "insert into foltia_mp4files values ('$tid','$mp4filename') "; 
    421          $sth = $dbh->prepare($DBQuery); 
    422         $sth->execute(); 
    423 &writelog("recwrap UPDATEmp4DB  $DBQuery"); 
    424  
    425 &changefilestatus($pid,200); 
    426189}#PSPトラコンあり 
    427190 
    428191sub continuousrecordingcheck(){ 
    429 my $now = `date  +%s --date "2 min "`
     192    my $now = time() + 60 * 2
    430193&writelog("recwrap DEBUG continuousrecordingcheck() now $now"); 
    431194my @processes =`ps ax | grep recfriio`; 
     
    474237                $startdatetime = $startdate.$filenameparts[0]; 
    475238                #DBから録画中番組のデータ探す 
    476         $DBQuery =  " 
    477 SELECT foltia_subtitle.tid,foltia_subtitle.countno,foltia_subtitle.subtitle,foltia_subtitle.startdatetime ,foltia_subtitle.enddatetime ,foltia_subtitle.lengthmin ,foltia_tvrecord.bitrate , foltia_subtitle.startoffset , foltia_subtitle.pid ,foltia_tvrecord.digital  
    478 FROM foltia_subtitle ,foltia_tvrecord  
    479 WHERE  
    480 foltia_tvrecord.tid = foltia_subtitle.tid AND  
    481 foltia_tvrecord.tid = $tid AND  
    482 foltia_subtitle.startdatetime = $startdatetime AND  
    483 foltia_tvrecord.digital = 1"; 
    484         &writelog("recwrap DEBUG continuousrecordingcheck() $DBQuery"); 
    485         $sth = $dbh->prepare($DBQuery); 
     239                    &writelog("recwrap DEBUG continuousrecordingcheck() $stmt{'recwrap.7'}"); 
     240                    $sth = $dbh->prepare($stmt{'recwrap.7'}); 
    486241        &writelog("recwrap DEBUG continuousrecordingcheck() prepare"); 
    487         $sth->execute(); 
     242                   $sth->execute($tid, $startdatetime); 
    488243        &writelog("recwrap DEBUG continuousrecordingcheck() execute"); 
    489244        @recfile = $sth->fetchrow_array; 
track feed