title: What is the best method to capture images from a live video device for use by a Java-based application?
body: <p>I am looking into an image processing problem for semi-real time detection of certain scenarios.  My goal is to have the live video arrive as Motion JPEG frames in my Java code <em>somehow</em>.  </p>
  
  <p>I am familiar with the <a href="http://java.sun.com/javase/technologies/desktop/media/jmf/" rel="noreferrer">Java Media Framework</a> and, sadly, I think we can consider that an effectively dead API.  I am also familiar with <a href="http://www.axis.com/" rel="noreferrer">Axis boxes</a> and, while I really like their solution, I would appreciate any critical feedback on my specific points of interest.  </p>
  
  <p>This is how I define "best" for the purpose of this discussion:</p>
  
  <ul>
  <li>Latency - if I'm controlling the camera using this video stream, I would like to keep my round-trip latency at less than 100 milliseconds if possible.  That's measured as the time between my control input to the time when I see the visible change.  EDIT some time later: another thing to keep in mind is that camera control is likely to be a combination of manual and automatic (event triggers).  We need to see those pictures right away, even if the high quality feed is archived separately.</li>
  <li>Cost - free / open source is better than not free.</li>
  <li>Adjustable codec parameters - I need to be able to tune the codec for certain situations.  Sometimes a high-speed low-resolution stream is actually easier to process.</li>
  <li>"Integration" with Java - how much trouble is it to hook this solution to my code?  Am I sending packets over a socket?  Hitting URLs?  Installing Direct3D / JNI combinations?</li>
  <li>Windows / Linux / both? - I would prefer an operating system agnostic solution because I have to deliver to several flavors of OS but there may be a solution that is optimal for one but not the other.</li>
  </ul>
  
  <p>NOTE: I am aware of other image / video capture codecs and that is not the focus of this question.  I am specifically <em>not</em> interested in streaming APIs (e.g., MPEG4) due to the loss of frame accuracy.  However, if there is a solution to my question that delivers another frame-accurate data stream, please chime in.</p>
  
  <p>Follow-up to this question: at this point, I am strongly inclined to buy appliances such as the <a href="http://www.axis.com/products/video/video_server/index.htm" rel="noreferrer">Axis video encoders</a> rather than trying to capture the video in software or on the PC directly.  However, if someone has alternatives, I'd love to hear them.</p>