【问题标题】:How to extract images from Motion Jpeg Stream of IP Camera?如何从 IP 摄像机的 Motion Jpeg 流中提取图像?
【发布时间】:2012-02-10 18:28:30
【问题描述】:

我使用 GET nphMotionJpeg 从 IP Camera Panasonic 获取 Motion Jpeg 流。 响应内容如下文所述。

(2) Data reception 
    "HTTP/1.0 200 OK\r\n" 
    "Content-Type: multipart/x-mixed-re place; bound ary=--myboundary..." 
    "...--myboundary.Content-type: image/jpeg..." 
    JPEG binary data No. 1 (Hexadecimal notation="FFD8...... ........................ ..FFD9") 
    "...--myboundary.Content-type: image/jpeg..." 
    JPEG binary data No. 2 (Hexadecimal notation="FFD8...... ........................ ..FFD9") 
    : 
    : 
    "...--myboundary.Content-type: image/jpeg..." 
    JPEG binary data No. N (Hexadecimal notation="FFD8...... ........................ ..FFD9") 

    * Above mentioned  Content-type: From FFD8(following image/jpeg) to "--my boundary" (just before FFD9) 
    is 1 JPEG data file. 

    (3) Image displaying/saving 
    From the data above, extract JPEG  data, and display the extracted consecutively or save it. 
    A viewer that supports the above data is required to view images. 

我在尝试从上述响应内容中提取 jpeg 图像数据时遇到的问题是它不让我知道每个图像的大小。

如果没有图像尺寸,这很难处理。

我必须尝试编写一个算法来做到这一点,但我太老练了。它可能会影响系统性能,并且可能存在更多错误。

你能给我一个简单的方法吗?

【问题讨论】:

标签: c++ ip-camera


【解决方案1】:

一些 [更好的] IP 摄像机提供 Content-Length 子标题以及每个 JPEG 视频帧,但是这个标题不是强制性的,这在您的情况下会成为一个问题:您没有预先拥有 JPEG 数据长度。

除了继续读取缓冲区并检查是否接收到新的边界线之外,您无能为力,您将在此处切断视频帧。您可能还想检查缓冲区溢出。

另外仅供参考,一些较旧的 Panasonic(例如 BL-C140)和 Axis(例如 213 PTZ)摄像机格式不正确,导致边界的 -- 部分混淆。

【讨论】:

    【解决方案2】:

    使用 Gstreamer。请参阅上面由 Martin Beckett 链接的我的完整帖子。

    gst-launch souphttpsrc location="http://[ip]:[port]/[dir]/xxx.cgi" do-timestamp=true is_live=true ! multipartdemux ! jpegdec !  videoflip method=vertical-flip ! jpegenc !  multifilesink location=image-out-%05d.jpg
    

    【讨论】:

      猜你喜欢
      • 2018-08-01
      • 1970-01-01
      • 2011-12-06
      • 2014-05-04
      • 1970-01-01
      • 2020-08-01
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      相关资源
      最近更新 更多