#config load $path = $0; $path =~ s/foltialib.pl$//i; if ($pwd ne "./"){ push( @INC, "$path"); } require "foltia_conf1.pl"; # foltia lib use DBI; use DBD::Pg; $DBDriv=$main::DBDriv; $DBHost=$main::DBHost; $DBPort=$main::DBPort; $DBName=$main::DBName; $DBUser=$main::DBUser; $DBPass=""; $FILESTATUSRESERVINGLONG = 10; $FILESTATUSRESERVINGSHORT = 20; $FILESTATUSRECORDING = 30; $FILESTATUSRECTSSPLITTING = 40; $FILESTATUSRECEND = 50; $FILESTATUSWAITINGCAPTURE = 55; $FILESTATUSCAPTURE = 60; $FILESTATUSCAPEND = 70; $FILESTATUSTHMCREATE = 72; $FILESTATUSWAITINGTRANSCODE = 80; $FILESTATUSTRANSCODETSSPLITTING = 90; $FILESTATUSTRANSCODEFFMPEG = 100; $FILESTATUSTRANSCODEWAVE = 110; $FILESTATUSTRANSCODEAAC = 120; $FILESTATUSTRANSCODEMP4BOX = 130; $FILESTATUSTRANSCODEATOM = 140; $FILESTATUSTRANSCODECOMPLETE = 150; $FILESTATUSALLCOMPLETE = 200; #------------------------------ sub writelog{ my $messages = $_[0]; my $timestump = `date +%Y/%m/%d_%H:%M:%S`; chomp($timestump); if ($debugmode == 1){ open (DEBUGLOG , ">>$toolpath/debuglog.txt") || die "Cant write log file.$! \n "; }else{ open (DEBUGLOG , '>-') || die "Cant write log file.$! \n "; } $messages =~ s/\n//gio; print DEBUGLOG "$timestump $messages\n"; close (DEBUGLOG); }#end writelog sub syobocaldate2foltiadate{ #20041114213000 -> 200411142130 my $foltiadate = $_[0] ; $foltiadate = substr($foltiadate,0,12); return $foltiadate; } sub foldate2epoch{ my $foltiadate = $_[0] ; #EPGをEPOCに # 2004 11 14 21 30 my $eyear = substr($foltiadate , 0, 4); my $emon = substr($foltiadate, 4, 2); $emon--; my $emday = substr($foltiadate , 6, 2); my $q_start_time_hour = substr($foltiadate , 8, 2); my $q_start_time_min = substr($foltiadate , 10, 2); my $epoch = timelocal(0,$q_start_time_min,$q_start_time_hour, $emday, $emon , $eyear); return $epoch; } sub epoch2foldate{ my $s; my $mi; my $h; my $d; my $mo; my $y; my $w; ($s, $mi, $h, $d, $mo, $y, $w) = localtime($_[0]); $mo++; $y += 1900; my $foltiadate; $mo = sprintf("%02d",$mo); $d = sprintf("%02d",$d); $h = sprintf("%02d",$h); $mi = sprintf("%02d",$mi); $foltiadate = "$y$mo$d$h$mi"; return $foltiadate; } sub calclength{ #foltia開始時刻、folti終了時刻 #戻り値:分数 my $sttime = $_[0] ; my $edtime = $_[1] ; my $length = -1; $sttime = &foldate2epoch($sttime); $edtime = &foldate2epoch($edtime); if ($edtime >= $sttime){ $length = $edtime - $sttime; }else{ $length = $sttime - $edtime; } $length = $length / 60; return $length ; } sub calcoffsetdate{ #引き数:foltia時刻、オフセット(+/-)分 #戻り値]foltia時刻 my $foltime = $_[0] ; my $offsetmin = $_[1] ; my $epoch = &foldate2epoch($foltime ); $epoch = $epoch + ($offsetmin * 60 ); $foltime = &epoch2foldate($epoch); return $foltime ; } sub getstationid{ #引き数:局文字列(NHK総合) #戻り値:1 my $stationname = $_[0] ; my $stationid ; my $DBQuery = "SELECT count(*) FROM foltia_station WHERE stationname = '$item{ChName}'"; my $sth; $sth = $dbh->prepare($DBQuery); $sth->execute(); my @stationcount; @stationcount= $sth->fetchrow_array; if ($stationcount[0] == 1){ #チャンネルID取得 $DBQuery = "SELECT stationid,stationname FROM foltia_station WHERE stationname = '$item{ChName}'"; $sth = $dbh->prepare($DBQuery); $sth->execute(); @stationinfo= $sth->fetchrow_array; #局ID $stationid = $stationinfo[0]; #print "StationID:$stationid \n"; }elsif($stationcount[0] == 0){ #新規登録 $DBQuery = "SELECT max(stationid) FROM foltia_station"; $sth = $dbh->prepare($DBQuery); $sth->execute(); @stationinfo= $sth->fetchrow_array; my $stationid = $stationinfo[0] ; $stationid ++; ##$DBQuery = "insert into foltia_station values ('$stationid' ,'$item{ChName}','0','','','','','','')"; #新規局追加時は非受信局をデフォルトに $DBQuery = "insert into foltia_station (stationid , stationname ,stationrecch ) values ('$stationid' ,'$item{ChName}','-10')"; $sth = $dbh->prepare($DBQuery); $sth->execute(); #print "Add station;$DBQuery\n"; &writelog("foltialib Add station;$DBQuery"); }else{ #print "Error getstationid $stationcount[0] stations found. $DBQuery\n"; &writelog("foltialib [ERR] getstationid $stationcount[0] stations found. $DBQuery"); } return $stationid ; } sub calcatqparam{ my $seconds = $_[0]; my $processstarttimeepoch = ""; $processstarttimeepoch = &foldate2epoch($startdatetime); $processstarttimeepoch = $processstarttimeepoch - $seconds ; my $sec = ""; my $min = ""; my $hour = ""; my $mday = ""; my $mon = ""; my $year = ""; my $wday = ""; my $yday = ""; my $isdst = ""; ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($processstarttimeepoch) ; $year+=1900; $mon++;#範囲を0-11から1-12へ my $atdateparam = ""; $atdateparam = sprintf ("%04d%02d%02d%02d%02d",$year,$mon,$mday,$hour,$min); return $atdateparam ; } sub processfind{ my $findprocess = $_[0]; my @processes ; @processes = `ps ax | grep -i $findprocess `; my $chkflag = 0; foreach (@processes ){ if (/$findprocess/i){ unless (/grep/){ #print "process found:$_\n"; $chkflag++ ; }else{ #print "process NOT found:$_\n"; } } } return ($chkflag); }#endsub sub filenameinjectioncheck{ my $filename = $_[0]; $filename =~ s/\///gi; $filename =~ s/\;//gi; $filename =~ s/\&//gi; $filename =~ s/\|//gi; return ($filename ); } sub getphpstyleconfig{ my $key = $_[0]; my $phpconfigpath = ""; my $configline = ""; # read if (-e "$phptoolpath/php/foltia_config2.php"){ $phpconfigpath = "$phptoolpath/php/foltia_config2.php"; }elsif(-e "$toolpath/php/foltia_config2.php"){ $phpconfigpath = "$toolpath/php/foltia_config2.php"; }else{ $phpconfigpath = `locate foltia_config2.php | head -1`; chomp($phpconfigpath); } if (-r $phpconfigpath ){ open (CONFIG ,"$phpconfigpath") || die "File canot read.$!"; while(){ if (/$key/){ $configline = $_; $configline =~ s/\/\/.*$//; $configline =~ s/\/\*.*\*\///; }else{ } } close(CONFIG); }#end if -r $phpconfigpath return ($configline); }#end sub getphpstyleconfig sub getpidbympegfilename { #引き数:m2pfilename #戻り値:PID my $m2pfilename = $_[0] ; if ($m2pfilename eq ""){ return 0 ; } my $DBQuery = "SELECT pid FROM foltia_subtitle WHERE m2pfilename = '$m2pfilename' LIMIT 1 "; my $sth; $sth = $dbh->prepare($DBQuery); $sth->execute(); #print "$DBQuery\n"; my @pidinfo = $sth->fetchrow_array; my $pid = $pidinfo[0]; if ($pid eq ""){ return 0 ; }else{ return $pid; } }#end sub getpidbympegfilename sub changefilestatus { #引き数:PID,updatestatus #戻り値:エラーコード my $pid = $_[0] ; my $updatestatus = $_[1]; if (($pid eq "" ) || ($updatestatus eq "")){ return 0 ; } if ($updatestatus > 0 ){ my $DBQuery = "UPDATE foltia_subtitle SET filestatus = $updatestatus , lastupdate = now() WHERE pid = $pid "; my $sth; $sth = $dbh->prepare($DBQuery); $sth->execute(); return 1; }else{ &writelog("foltialib changefilestatus ERR Sttus invalid:$updatestatus"); return 0 ; } }# end sub changefilestatus sub getfilestatus { #引き数:PID #戻り値:ステータス #10:予約中(5分以上先) #20:予約中(5分以内) #30:録画中 #40:TSSplit中 #50:MPEG2録画終了 #55 静止画キャプチャ待 #60:静止画キャプ中 #70:静止画キャプ終了 #72:サムネイル作成済み(.THM) #80:トラコン待 #90:トラコン中:TSsplit #100:トラコン中:H264 #110:トラコン中:WAVE #120:トラコン中:AAC #130:トラコン中:MP4Box #140:トラコン中:ATOM #150:トラコン完了 #200:全完了 my $pid = $_[0] ; if ($pid eq "" ){ return 0 ; } my $DBQuery = "SELECT filestatus FROM foltia_subtitle WHERE pid = $pid "; my $sth; $sth = $dbh->prepare($DBQuery); $sth->execute(); my @statusinfo = $sth->fetchrow_array; my $status = $statusinfo[0]; if ($status eq ""){ return 0 ; }else{ return $status; } }# end sub getfilestatus sub makemp4dir{ #TIDが100以上の3桁の場合はそのまま my $pspfilnamehd = $_[0]; my $tid = $_[0]; my $pspdirname = "$tid.localized/"; $pspdirname = $recfolderpath."/".$pspdirname; #なければ作る unless (-e $pspdirname ){ system("$toolpath/perl/mklocalizeddir.pl $tid"); #&writelog("recwrap mkdir $pspdirname"); } $pspdirname = "$tid.localized/mp4/"; $pspdirname = $recfolderpath."/".$pspdirname; #なければ作る unless (-e $pspdirname ){ mkdir $pspdirname ,0777; #&writelog("recwrap mkdir $pspdirname"); } return ("$pspdirname"); }#endsub makemp4dir 1;