[Image-SIG] Can't split data stream for an ip camera

Dom Dom mydomdom at gmail.com
Mon Sep 13 19:39:57 CEST 2010


Hello,

I want to display with wxPython the images sent by an ip camera.

Getting the photos is not a problem:
page = urllib2.build_opener().open("http://192.168.1.3/Jpeg/CamImg.jpg


")
image = Image.open(cStringIO.StringIO(page.read()))
Then I display the images one by one with wx with a loop (4 to 8 Frames Per
Second, which is not quick enough). But it works well.

What I'd like to do is to display the frames in a continous mode, ie
'movie'.
The problem is that I can't manage to analyze the stream sent by the camera
whose address is: 'http://192.168.1.3/GetData.cgi


'

I tried to adapt the script mentioned here
(http://thread.gmane.org/gmane.comp.python.general/449768


) without success. See below.

My problem is that I don't know where to begin and where to stop the
extraction
of data (the stream of data is continous):
See the class below:
   boundary = self.buffer.find(r"""--IPCamBoundary""")
   begin = boundary + 43
   end = self.buffer.rfind(r"""--IPCamBoundary""")

I'd appreciate that some help to understand what I should do.

Many thanks in advance for four help
Dominique



--------------------------------------------------------------------------
Below is some info that may be needed with a view to helping me:
>>> stream = urllib2.urlopen('http://192.168.1.3/GetData.cgi


')
>>> print stream.info


()
Date: Sat, 01 Feb 2003 05:30:42 GMT

Server: WYM/1.0

Connection: close

Content-Type: multipart/x-mixed-replace;boundary=IPCamBoundary

Last-Modified: Sat, 01 Feb 2003 05:30:42 GMT

Pragma: no-cache

Cache-Control: no-cache

Expires: 01 Jan 1970 00:00:00 GMT


>>> stream.readline()
'--IPCamBoundary\r\n'
>>> stream.readline()
'Content-Type: image/jpeg\r\n'
>>> stream.readline()
'\r\n'
>>> stream.readline()
'\xff\xd8\xff\xe2\x00\x06>;?b\xff\xe7\x00\x04\x00\x00\xff\xdb\x00C\x00\x04\x03\x03\x04\x03\x03\x04\x04\x04\x04\x05\x05\x04\x05\x06\n'
>>> and so on.
I tried to attach the code returned by the camera  (with two
"--IPCamBoundary\r\n", which seem
to be the begining of a frame.) but it was rejected by the image-sig list...

-------------------------------------------------------------------------------
Script:

class myCamera(object):
    def __init__(self, url = 'http://192.168.1.3/GetData.cgi


', param = None):
        self.url = url
        self.param = param
        self.state = 0
        self.buffer = ''
        self.limit = 8092

    def Start(self):
        try:
            self.fp = urllib2.build_opener().open(self.url)
        except URLError:
            print u"""Check connection"""
        self.state = True

    def Stop(self):
        self.fp.close()
        self.state = 0

    def NextFrame(self):
        if self.state:
            temp = self.fp.read(self.limit)
            self.buffer += temp
            boundary = self.buffer.find(r"""--IPCamBoundary""")
            count = self.buffer.count(r"""--IPCamBoundary""")
            if boundary <> -1:
                if count > 1:
                    begin = boundary + 43
                    end = self.buffer.rfind(r"""--IPCamBoundary""")
                    buff = self.buffer[boundary:end-1]
                    output = cStringIO.StringIO()
                    output.write(buff)
                    contents = output.getvalue()
                    image = Image.open(cStringIO.StringIO(contents))
                    output.close()

This script results in a traceback:
image = Image.open(cStringIO.StringIO(contents))
  File "D:\Python26\lib\site-packages\PIL\Image.py", line 1980, in open
    raise IOError("cannot identify image file")
IOError: cannot identify image file
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/image-sig/attachments/20100913/7d911fe8/attachment.html>


More information about the Image-SIG mailing list