Python and webcam capture delay?

jack catcher (nick) nomail at thank.you
Mon Jul 6 13:41:03 EDT 2009


Rhodri James kirjoitti:
> On Mon, 06 Jul 2009 07:10:38 +0100, jack catcher (nick) 
> <nomail at thank.you> wrote:
> 
>> Tim Roberts kirjoitti:
>>> "jack catcher (nick)" <nomail at thank.you> wrote:
>>>> I'm thinking of using Python for capturing and showing live webcam 
>>>> stream simultaneously between two computers via local area network. 
>>>> Operating system is Windows. I'm going to begin with VideoCapture 
>>>> extension, no ideas about other implementation yet. Do you have any 
>>>> suggestions on how short delay I should hope to achieve in showing 
>>>> the video? This would be part of a psychological experiment, so I 
>>>> would need to deliver the video stream with a reasonable delay (say, 
>>>> below 100ms).
>>>  You need to do the math on this.  Remember that a full 640x480 RGB 
>>> stream
>>> at 30 frames per second runs 28 megabytes per second.  That's more than
>>> twice what a 100 megabit network can pump.
>>>  You can probably use Python to oversee this, but you might want to 
>>> consider
>>> using lower-level code to control the actual hardware.  If you are
>>> targeting Windows, for example, you could write a DirectShow graph to 
>>> pump
>>> into a renderer that transmits out to a network, then another graph to
>>> receive from the network and display it.
>>>  You can manage the network latency by adding a delays in the local 
>>> graph.
>>
>> Thanks Tim, you're correct about the math. What is your main point 
>> about DirectShow: that it is generally faster and more reliable than 
>> doing the job high-level, or that one could use coding/decoding in 
>> DirectShow to speed up the transmission? I think the latter would be a 
>> great idea if the latency were tolerable. On the other hand, I'd like 
>> to keep things simple and do all the programming in Python. I've got 
>> no experience with DirectShow, but I guess the filters need to be 
>> programmed in C++ and called from Python?
>>
>> Another option might be to use resolution 320x240 at 15fps.
> 
> Does the webcam just deliver frames, or are you getting frames out of
> a decoder layer?  If it's the latter, you want to distribute the encoded
> video, which should be much lower bandwidth.  Exactly how you do that
> depends a bit on what format the webcam claims to deliver.

Well, getting already encoded video from the webcam sounds almost like a 
free lunch (which it probably is not). At least I wouldn't want to get 
too long a delay because of the encoding.

I haven't got the webcam(s) yet, and I guess I can basically purchase 
any ones I find suitable for getting the job done. Any recommendations?



More information about the Python-list mailing list