我需要访问和读取从网络摄像机发送实时 MJPEG 素材的 http 流,以便对图像进行一些 opencv 图像处理。
我可以通过 VLC 访问摄像机的镜头,或者只需转到 Chrome 或 Firefox 中的 URL。但是,当服务器只是发送连续提要时,我如何以编程方式访问 http 服务器并分离每个帧?
数据似乎只是简单格式化,在 HTTP header 和 JPEG 数据之间循环。我能想到的解决这个问题的唯一方法是以某种方式向服务器发送请求,解析传入的数据,将 header 与实际的 jpeg 数据分开,然后将其传递给 opencv。
但是,这听起来非常令人费解,我不太确定该从哪里开始。你们知道是否有任何库,或者只是我忽略的更简单的方法,可以使这一切变得更容易?
非常感谢
最佳答案
对于 HTTP 下载,您可以使用 Libcurl图书馆。
AFAIK MJPEG 格式不是标准格式。它的实际字节格式因实现而异。但基本上只是 jpeg 文件与分隔符的连接。如果您使用十六进制编辑器查看字节,您可以轻松区分每个 jpeg 文件。
例如,ffmpeg 的 mjpeg 输出结构如下:
0xff 0xd8 // start of jpeg
{ ... } // jpeg body
0xff 0xd9 // end of jpeg
...
0xff 0xd8 // start of jpeg
{ ... } // jpeg body
0xff 0xd9 // end of jpeg
...
关于c++ - 如何在 C++ 中解析 MJPEG HTTP 流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4801933/