通过http GET请求接收JPEG图像

时间:2011-07-27 11:52:25

标签: c++

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

GET /mjpeg?res=full HTTP/1.1\r\nHost: 143.205.116.14\r\n\r\n

之后,我在while循环中接收到具有以下功能的图像:

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

.....

其中SIZE表示缓冲区的大小。事实上,我不知道这里要定义的大小。我收到的尺寸为2940x1920的彩色图像。所以我定义SIZE=2940x1920x3。收到MJPEG图像后,我用ffmpeg对其进行解码。但我观察到ffmpeg只是部分/不正确地解码图像,我只看到图像的一半(甚至更少)。我认为这可能是一个尺寸问题。 在这方面的任何帮助将受到高度赞赏。

此致

2 个答案:

答案 0 :(得分:2)

为什么重新发明轮子(无数次)?使用现成的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 ...

答案 1 :(得分:0)

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