【发布时间】:2014-06-26 16:23:14
【问题描述】:
我正在尝试编写一个 python 脚本,该脚本加入网络摄像头多播并将接收到的每个帧作为图像存储在本地硬盘上。通常,可以单击指向流的链接,然后在浏览器或 VLC 媒体播放器中播放流。
流作为 UDP 多播提供,我可以使用以下代码(Python33、Windows 7)订阅它:
import socket
import struct
MCAST_GRP = '(the ip)'
MCAST_PORT = (the port)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', MCAST_PORT))
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
while True:
data = sock.recv(1316)
print(data)
这就是我卡住的地方。数据似乎是一个字节流,我希望在其中对图像进行编码,但在不确定图片的格式的情况下,我无法继续解码此流并将其转换为实际图像。打印数据显示的是这种类型的输出:
b'G\x01\x00\x1c\xc4 ...' b'G\x01\x00\x18\x87 ...' b'GA\x015p\x00\xff\xff ...'
如何将这些字节流转换为实际图像?是否有与我需要查找和隔离的 jpg / png 格式相关的标记?
提前感谢您的帮助!
【问题讨论】:
-
你可以看看这个库:pythonware.com/products/pil
-
尝试使用 ImageFile.Parser().feed(data),但出现错误:IOError('cannot parse this image')。也许我必须先解码,或者隔离实际图像在流中的位置?
-
另外,我使用 VLC 发现它使用 H264 - MPEG-4 AVC 编解码器来解码此流。
标签: python opencv udp python-imaging-library