好吧,如果您希望您的客户端看到 mjpeg 流,您需要发送整个 http 响应。HTTP 客户端(如浏览器)或媒体播放器(如 VLC)需要一个 mjpeg 流,如下所示:
HTTP/1.1 200 OK
Content-Type: multipart/x-mixed-replace; boundary=myboundary
--myboundary
Content-Type: image/jpeg
Content-length: 12345
[image 1 encoded jpeg data]
--myboundary
Content-Type: image/jpeg
Content-length: 45678
[image 2 encoded jpeg data]
...
注意:正如二狗沙在回答中所说,在 Content-length 字段之后必须有一个空行。
顺便说一句,为什么不将您的客户端直接重定向到 mjpeg 流?
例如,您可以使用http://ipcam/mjpg/video.mjpg AXIS IP 摄像机。
如果您只需要通过 HTTP 获取图像,则必须设置正确的标头和 MIME 内容类型 image/jpeg。要解码图像,您必须获取字节数据,并且您将获得 jpeg 编码。然后你将不得不解码 jpeg 以获得特定格式的图像(我认为类似于 yuv420p)。我检查了我的网络摄像机,我认为它的流不是 base64 编码的。
精确您的需求,我会尽力提供更多帮助。
my2c
编辑:
好吧,我想你会做类似的事情:
client : connect to proxy,
get example.com/camera1.mjpg,
while not the end
recv
yourproxy : wait connection
connect to camera,
get 10.0.0.123/camera1.mjpg
while not the end
recv buffer
copy buffer
send buffer to client
也就是说,您必须将正确的标头发送给您的客户。确保使用像 wireshark 这样的工具来监视数据包,并确保在您的客户端发出 HTTP GET 后,您向他发送正确的 MJPEG 流(就像我在帖子开头描述的那样......)
m2c