GetCam.pl
上传用户:qdrechuli
上传日期:2022-08-01
资源大小:917k
文件大小:6k
源码类别:

视频捕捉/采集

开发平台:

Visual C++

  1. #!/usr/bin/perl -w
  2. use strict;
  3. use DBI;
  4. use LWP::UserAgent;
  5. use vars qw(%base);
  6. sub existf
  7. {
  8. my $existf = 1;
  9. open(FEXIST,$_[0]) or $existf = 0;
  10. close(FEXIST);
  11. return $existf;
  12. }
  13. sub GetImg
  14. {
  15. (my $url,my $user,my $pwd) = @_;
  16. my $ua = LWP::UserAgent->new;
  17. $ua->agent("$0/0.1 " . $ua->agent);
  18. my $req = HTTP::Request->new(GET => 'http://'.$url.'/cgi-bin/jpg/image.cgi');
  19. $req->authorization_basic($user,$pwd);
  20. my $res = $ua->request($req);
  21. if ($res->is_success)
  22. {
  23. return $res->content;
  24.    }
  25. else
  26. {
  27.   return 0;
  28.   }
  29.   }
  30. sub SaveImg
  31. {
  32. (my $CID,my $img,my $tranche,my $min,my $sec) = @_;
  33. my $db = DBI->connect("DBI:mysql:netcam","root","");
  34. my $sqlreq = "SELECT T_Index FROM tranche ";
  35. $sqlreq = $sqlreq." WHERE T_Cam=".$CID." ";
  36. $sqlreq = $sqlreq." AND T_Day='".substr($tranche,0,8)."' ";
  37. $sqlreq = $sqlreq." AND T_Hour=".substr($tranche,8,2)." ";
  38. print "CHILD(",$CID,") : DEBUT INDEXn";
  39.    my $sql = $db->prepare($sqlreq);
  40.    $sql->execute();
  41.    (my $index) = $sql->fetchrow();
  42.    $sql->finish();
  43. if ($index eq '') { $index = 0; }
  44. $index++;
  45. # my $index = $min*60+$sec;
  46. print "CHILD(",$CID,") : FIN INDEX = ",$index,"n";
  47. $base{insert} = $db->prepare("INSERT INTO record VALUES ( ?,?,?,?,?,?,?,?,?)");
  48. $db->do("LOCK TABLE record LOW_PRIORITY WRITE");
  49. $base{insert}->execute('',$CID,$tranche.$min.$sec,$img,length($img),$index,0,substr($tranche,0,8),substr($tranche,8,2));
  50. $db->do("UNLOCK TABLE");
  51. # my $sqlreq = "SELECT Count(T_ID) FROM tranche ";
  52. # $sqlreq = $sqlreq." WHERE T_Cam=".$CID." ";
  53. # $sqlreq = $sqlreq." AND T_Day='".substr($tranche,0,8)."' ";
  54. # $sqlreq = $sqlreq." AND T_Hour=".substr($tranche,8,2)." ";
  55. # my $sql = $db->prepare($sqlreq);
  56. # $sql->execute();
  57. # (my $NbT) = $sql->fetchrow();
  58. # $sql->finish();
  59. if ($index eq 1)
  60. {
  61. $base{insert} = $db->prepare("INSERT INTO tranche VALUES ( ?,?,?,?,?)");
  62. $db->do("LOCK TABLE tranche LOW_PRIORITY WRITE");
  63. $base{insert}->execute('',$CID,$index,substr($tranche,0,8),substr($tranche,8,2));
  64. $db->do("UNLOCK TABLE");
  65. }
  66. else
  67. {
  68. $base{update} = $db->prepare("UPDATE tranche set T_Index=? WHERE T_Cam=? and T_Day=? and T_Hour=?");
  69. $db->do("LOCK TABLE tranche LOW_PRIORITY WRITE");
  70. $base{update}->execute($index,$CID,substr($tranche,0,8),substr($tranche,8,2));
  71. $db->do("UNLOCK TABLE");
  72. }
  73.     $db->disconnect();
  74. }
  75. sub DoCam
  76. {
  77. (my $CID,my $CName,my $CUrl,my $CUser,my $CPwd,my $CActive,my $CFreq) = @_;
  78.   my $db = DBI->connect("DBI:mysql:netcam","root","");
  79. while (1)
  80.   {
  81. my $sqlreq = "SELECT V_Value FROM vars WHERE V_Var='GetCamState'";
  82.    my $sql = $db->prepare($sqlreq);
  83.    $sql->execute();
  84.    (my $NewState) = $sql->fetchrow();
  85. $sql->finish();
  86. if ($NewState eq 'STOP')
  87. {
  88. $db->disconnect();
  89. return;
  90. }
  91. # $sqlreq = "SELECT C_Name,C_Url,C_User,C_Pwd,C_Active,C_Freq FROM cam ";
  92. # $sqlreq = $sqlreq." WHERE C_ID=".$CID;
  93. #   $sql = $db->prepare($sqlreq);
  94. #   $sql->execute();
  95. #   (my $CName,my $CUrl,my $CUser,my $CPwd,my $CActive,my $CFreq) = $sql->fetchrow();
  96. #   $sql->finish();
  97. #   if ($CActive)
  98. #   {
  99. #   print "CHILD(",$CID,") : Activen";
  100. (my $sec,my $min,my $hour,my $mday,my $mon,my $year,my $wday,my $yday,my $isdst) = localtime(time);
  101. $year = $year+1900;
  102. $mon = $mon+1;
  103. my $smon;
  104. my $smday;
  105. if ($mon<10) { $smon = "0".$mon; }
  106. if ($mon>9) { $smon = $mon; }
  107. if ($mday<10) { $smday = "0".$mday; }
  108. if ($mday>9) { $smday = $mday; }
  109. if ($hour<10) { $hour= '0'.$hour; }
  110. if ($min<10) { $min= '0'.$min; }
  111. if ($sec<10) { $sec= '0'.$sec; }
  112. my $tranche = $year.$smon.$smday.$hour;
  113. print "CHILD(",$CID,") : ",$tranche,"n";
  114. print "CHILD(",$CID,") : ",$min," ",$sec,"n";
  115. my $img = GetImg($CUrl,$CUser,$CPwd);
  116. print "CHILD(",$CID,") : ",length($img),"n";
  117. SaveImg($CID,$img,$tranche,$min,$sec);
  118. #   }
  119.    sleep($CFreq);
  120.   }
  121. }
  122. sub SetState
  123. {
  124. (my $State) = @_;
  125. my $db = DBI->connect("DBI:mysql:netcam","root","");
  126. my $sqlreq = "UPDATE vars SET V_Value='".$State."' WHERE V_Var='GetCamState'";
  127. my $sql = $db->prepare($sqlreq);
  128. $sql->execute();
  129. $sql->finish();
  130. $db->disconnect();
  131. }
  132. sub Stop
  133. {
  134. SetState('STOP');
  135. }
  136. sub Start
  137. {
  138. SetState('START');
  139. my $db = DBI->connect("DBI:mysql:netcam","root","");
  140. my $sqlreq = "SELECT C_ID,C_Name,C_Url,C_User,C_Pwd,C_Active,C_Freq FROM cam ";
  141. my $sql = $db->prepare($sqlreq);
  142. $sql->execute();
  143. while ((my $CID,my $CName,my $CUrl,my $CUser,my $CPwd,my $CActive,my $CFreq) = $sql->fetchrow())
  144. {
  145. print "CAM ID = ",$CID,"n";
  146. if ($CActive)
  147. {
  148. $SIG{CHLD}='IGNORE';
  149. my $pid = fork;
  150. if ($pid)
  151. {
  152. print "PARENT : STARTING CHILD ",$pid,"n";
  153. my $sqlreq = "UPDATE cam SET C_Pid=".$pid." WHERE C_ID=".$CID;
  154. my $sql = $db->prepare($sqlreq);
  155. $sql->execute();
  156. $sql->finish();
  157. }
  158. else
  159. {
  160. print "CHILD(",$CID,")  : STARTINGn";
  161. DoCam($CID,$CName,$CUrl,$CUser,$CPwd,$CActive,$CFreq);
  162. $sql->finish();
  163. $db->disconnect();
  164. print "CHILD(",$CID,")  : ENDINGn";
  165. exit(0);
  166. }
  167. }
  168. }
  169. $sql->finish();
  170. $db->disconnect();
  171. }
  172. sub main
  173.   {
  174. $SIG{CHLD}='IGNORE';
  175. my $pid = fork;
  176. if ($pid)
  177. {
  178. print "GETCAM : STARTING PARENT ",$pid,"n";
  179. exit(0);
  180. }
  181. Start();
  182. my $CurState = "START";
  183. my $db = DBI->connect("DBI:mysql:netcam","root","");
  184. while (1)
  185.   {
  186. print "PARENT : READING STATEn";
  187. my $sqlreq = "SELECT V_Value FROM vars WHERE V_Var='GetCamState'";
  188.    my $sql = $db->prepare($sqlreq);
  189.    $sql->execute();
  190.    (my $NewState) = $sql->fetchrow();
  191. $sql->finish();
  192. print "PARENT : CurSTATE = ",$CurState,"n";
  193. print "PARENT : NewSTATE = ",$NewState,"n";
  194. if ($NewState eq 'STOP' and $CurState eq "START")
  195. {
  196. Stop();
  197. $CurState = 'STOP';
  198. }
  199. if ($NewState eq 'START' and $CurState eq "STOP")
  200. {
  201. Start();
  202. $CurState = 'START';
  203. }
  204. if ($NewState eq 'RESTART')
  205. {
  206. Stop();
  207. sleep(10);
  208. Start();
  209. $CurState = 'START';
  210. }
  211. sleep(10);
  212.    }
  213. $db->disconnect();
  214.   }
  215. main();