c++ - 如何在 C++ 中解析 MJPEG HTTP 流?

标签 c++ http opencv mjpeg

我需要访问和读取从网络摄像机发送实时 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/

相关文章:

c++ - 尝试从可变函数模板调用基本情况重载的编译器错误

Python 模拟 C++ 指向类成员的指针

c++ - 从 std::tuple 派生的类直接初始化失败,而它适用于 std::pair

google-chrome - [Vue-Response]在 Crome 60 $http get 返回response.data作为字符串而不是json数组

typescript - 使用 Axios 时,带有凭据的 HTTP CORS 请求失败

python - 使用python在打开的cv中进行圆圈检测

OpenCV CalcPca 输入数据

c++ - 如何使用 C++ 中的 Eigen 库创建高效的 3D 矩阵?

http - 如果没有内容长度 header ,HTTP 保持事件连接是否可行?

c++ - 如何将数组添加到 CvSeq 以及如何检索数组