我想通过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只是部分/不正确地解码图像,我只看到图像的一半(甚至更少)。我认为这可能是一个尺寸问题。
在这方面的任何帮助将受到高度赞赏。
此致
汗
答案 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
条件?