通过http GET请求接收JPEG图像

Receiving JPEG images via http GET request

本文关键字:JPEG 图像 请求 http GET 通过      更新时间:2023-10-16

我想通过GET请求从IP摄像机通过HTTP接收图像。我写了一个程序,创建TCP套接字连接到相机,并发送以下GET请求到相机:

GET /mjpeg?res=full HTTP/1.1rnHost: 143.205.116.14rnrn

之后,在while循环中使用以下函数接收图像:

while((tmpres = recv(sock,(void *) buf, SIZE, 0)) > 0 && check<10)

,其中SIZE表示缓冲区的大小。实际上,我不知道这里应该定义多大。我收到一张2940x1920的彩色图像。我定义了SIZE=2940x1920x3。收到MJPEG图像后,我用ffmpeg解码。但我观察到ffmpeg只是部分/不正确地解码图像,我只看到一半(甚至更少)的图像。我想可能是尺寸的问题。在这方面的任何帮助都将是非常感谢的。

问候,汗

为什么要(无数次地)重新发明轮子?使用现成的HTTP客户端库,如libcurl

对于这个问题,也许您甚至可以使用curl命令行程序将整个解决方案编写为shell脚本:

#!/bin/sh
curl -O "http://143.205.116.14/mjpeg?res=full" || echo "Error."
curl -o myfile.jpg "http://143.205.116.14/mjpeg?res=full" || echo "Error."
# ffmpeg ...

将收到的字节保存为二进制文件并进行分析。可能是不完整的图像(图像可以编码为渐进式JPEG -实际上是隔行的-这意味着如果截断文件,您将看到水平线),也可能是ffmpeg解码问题。或者别的什么。什么是check < 10条件