Tricky: Getting PHP to read Webcam JPG stream.. Plz help.

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
roel018
Forum Newbie
Posts: 1
Joined: Wed Aug 19, 2009 1:08 am

Tricky: Getting PHP to read Webcam JPG stream.. Plz help.

Post by roel018 »

Hi everybody!

I'm struggling with a serious issue for days now.
I have a so called PHP proxy file which I'm using to bypass javascript's Same-Domain policy. This way, I'm reading the status of my public webcam (online or offline). I'm calling a file integrated in this (very advanced, build-in webserver enabled) webcam of mine to accomplish this, and it works great, without any flaws (I even manage to bypass the Basic Authentication protection this way).

Anyway, you'll find my code below.

The problem I'm facing, is that I would like to catch the webcam's image stream using the exact same method. The webcam's image stream, which is in fact a series of JPG's (mJPG), broadcasted by a file called GetData.cgi using the "multipart/x-mixed-replace" mime-type. When I type "http://192.x.x.4/GetData.cgi?1234" into my browser's address bar, after providing the webcam's username and password, I instantly get the JPG stream. So it's really there.. When I check the page's properties in my browser, it says it's an image/jpeg document.

Now, I would really like to know HOW I could get that stream of JPG's, and echo them onto the screen. That's all I want. Because I would like to create an <IMG> tag in my page, have the SRC pointed to this PHP proxy file, and have the image returned. All attempts so far have ended in PHP throwing errors at me that the provided data is NO valid image data... Bummer.

Hope someone can help me out here. I'm posting the GetData.cgi contents as well just below my proxy file's code.

Thanks,
Kind regards,
Roel


I use the code below (proxy_get_binary.php) to get the images and to access other files on the cam's build-in webserver (the later works perfectly). I'm calling this script with the following javascript command: return ('<img id="oCamCtl" src="proxy_get_binary.php?remotefile=/GetData.cgi&status=true' + '&keycode=3748845" width="' + width + 'px" height="' + height + 'px" />');

PHP Code:

Code: Select all

<?php
error_reporting(-1);
$masteruser = 'myloginname';
$masterpass = 'mypassword';
 
$status= ($_POST['status']);
$keycode = ($_POST['keycode']);
$remotefile = ($_POST['remotefile']);
 
$remoteserver = '192.xxx.xxx.104';
 
 
$urlstring = '?status='.$status;
$url = 'http://'.$remoteserver.$remotefile.$urlstring;
 
$url = parse_url($url);
$port = 80;
 
//just some checks to see if user is allowed to access this page:
if($keycode == '3748845') {
    $host = $url['host'];
} else {
    $host = "127.0.0.1";
}
 
$fh = fsockopen( $host, $port );
if( $fh ) {
    fwrite( $fh, "GET ".$url['path'].$urlstring." HTTP/1.0\r\n" );
    // in case we deal with virtual hosts pass the domain we are interested in.
    fwrite( $fh, "Host: ".$url['host']."\r\n" );
    // rfc2617: basic authorization header plus base64 encoded username:password
    fwrite( $fh, "Authorization: Basic ".base64_encode( $masteruser.":".$masterpass )."\r\n" );
    // end of the request header
    fwrite( $fh, "\r\n" );
     // practically ignore all answering headers send by the server
    while( ! feof( $fh ) && ($debug = fgets( $fh )) != "\r\n" ) /*echo $debug*/;
    // display only the body of the message
    while( ! feof( $fh ) ) {
        echo fgets( $fh );
    }
    fclose( $fh );
}
 
?>
Here's some info (from the manufacturer) about the cgi script that gives me headaches:

Code: Select all

 
GetData.cgi is designed for "server-push". "Server-push" means that user need not always detect camera's state, and the camera server transfer the camera data on its own.
 
HTTP/1.0 200 OK
Date: Wed, 19 Feb 2003 03:40:16 GMT
Server: WYM/1.0
Connection: close
Content-Type: multipart/x-mixed-replace;boundary=WINBONDBOUDARY
Last-Modified: Wed, 19 Feb 2003 03:40:16 GMT
Pragma: no-cache
Cache-Control: no-cache
Expires: 01 Jan 1970 00:00:00 GMT
 
--WINBONDBOUDARY
Content-Type: image/jpeg
<content of jpeg file>
 
--WINBONDBOUDARY
Content-Type: image/jpeg
<content of jpeg file>
 
--WINBONDBOUDARY
...
 
THNX!!!!!!
User avatar
yacahuma
Forum Regular
Posts: 870
Joined: Sun Jul 01, 2007 7:11 am

Re: Tricky: Getting PHP to read Webcam JPG stream.. Plz help.

Post by yacahuma »

I have not work with AJAx to much, but I think thats what you could use. The ajax will pick up the files and place them in the html.

Why dont you use something like flash? Also I think html 5 have video support built in. Is firefox html 5 compatible???
Post Reply