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

视频捕捉/采集

开发平台:

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 Count(R_ID) FROM record ";
  35. $sqlreq = $sqlreq." WHERE R_Cam=".$CID." ";
  36. $sqlreq = $sqlreq." AND R_Day='".substr($tranche,0,8)."' ";
  37. $sqlreq = $sqlreq." AND R_Hour=".substr($tranche,8,2)." ";
  38. print "DEBUTn";
  39.    my $sql = $db->prepare($sqlreq);
  40.    $sql->execute();
  41.    (my $index) = $sql->fetchrow();
  42.    $sql->finish();
  43. print "FIN INDEX = ",$index,"n";
  44. $base{insert} = $db->prepare("INSERT INTO record VALUES ( ?,?,?,?,?,?,?,?,?)");
  45. $db->do("LOCK TABLE record LOW_PRIORITY WRITE");
  46. $base{insert}->execute('',$CID,$tranche.$min.$sec,$img,length($img),$index,0,substr($tranche,0,8),substr($tranche,8,2));
  47. $db->do("UNLOCK TABLE");
  48.     $db->disconnect();
  49. }
  50. sub DoCam
  51. {
  52. (my $CID) = @_;
  53. while (1)
  54.   {
  55.   my $db = DBI->connect("DBI:mysql:netcam","root","");
  56. my $sqlreq = "SELECT C_Name,C_Url,C_User,C_Pwd,C_Active,C_Freq FROM cam ";
  57. $sqlreq = $sqlreq." WHERE C_ID=".$CID;
  58.    my $sql = $db->prepare($sqlreq);
  59.    $sql->execute();
  60.    (my $CName,my $CUrl,my $CUser,my $CPwd,my $CActive,my $CFreq) = $sql->fetchrow();
  61.    $sql->finish();
  62.    if ($CActive)
  63.    {
  64.    print "Activen";
  65. (my $sec,my $min,my $hour,my $mday,my $mon,my $year,my $wday,my $yday,my $isdst) = localtime(time);
  66. $year = $year+1900;
  67. $mon = $mon+1;
  68. my $smon;
  69. my $smday;
  70. if ($mon<10) { $smon = "0".$mon; }
  71. if ($mon>9) { $smon = $mon; }
  72. if ($mday<10) { $smday = "0".$mday; }
  73. if ($mday>9) { $smday = $mday; }
  74. if ($hour<10) { $hour= '0'.$hour; }
  75. if ($min<10) { $min= '0'.$min; }
  76. if ($sec<10) { $sec= '0'.$sec; }
  77. my $tranche = $year.$smon.$smday.$hour;
  78. print $tranche,"n";
  79. print $min," ",$sec,"n";
  80. my $img = GetImg($CUrl,$CUser,$CPwd);
  81. print length($img),"n";
  82. SaveImg($CID,$img,$tranche,$min,$sec);
  83.    }
  84.    sleep($CFreq);
  85.    $db->disconnect();
  86.   }
  87. }
  88. sub main
  89.   {
  90.   $SIG{CHLD} = 'IGNORE';
  91. #  while (1)
  92.   {
  93. my $db = DBI->connect("DBI:mysql:netcam","root","");
  94. my $sqlreq = "SELECT C_ID,C_Name,C_Url,C_User,C_Pwd,C_Active,C_Freq FROM cam ";
  95.    my $sql = $db->prepare($sqlreq);
  96.    $sql->execute();
  97.    while ((my $CID,my $CName,my $CUrl,my $CUser,my $CPwd,my $CActive,my $CFreq) = $sql->fetchrow())
  98.    {
  99.    print "CAM ID = ",$CID,"n";
  100.    if ($CActive)
  101.    {
  102.    local $SIG{INT}='IGNORE';
  103.    my $pid = fork;
  104.    if ($pid)
  105.    {
  106.    print "PEREn";
  107. my $sqlreq = "UPDATE cam SET C_Pid=".$pid." WHERE C_ID=".$CID;
  108.    my $sql = $db->prepare($sqlreq);
  109.    $sql->execute();
  110.    $sql->finish();
  111.    }
  112.    else
  113.    {
  114.    print "FILSn";
  115.    DoCam($CID,$CName,$CUrl,$CUser,$CPwd,$CActive,$CFreq);
  116.    $sql->finish();
  117.    $db->disconnect();
  118.    exit(0);
  119.    }
  120.    }
  121.    }
  122. $sql->finish();
  123. $db->disconnect();
  124.    }
  125.   }
  126. main();