微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将视频数据块从套接字重定向到 opencv 以进行视频重建

如何解决将视频数据块从套接字重定向到 opencv 以进行视频重建

我尝试使用 pycam 文档 3.13. Recording to a network stream,其中客户端是通过套接字发送 H.264 视频的 pycam,服务器以增量方式读取类似文件的对象并重定向数据到视频播放器。代码开箱即用。

上面示例中的客户端对我来说似乎是一个完美的解决方案,因为我使用 pizero 进行视频捕获,并且这种方法发送数据时无需在发送端进行任何额外处理。因此,客户端不断发送数据:

camera.start_recording(socket_connection,format='h264')
while(True):
  # break
camera.stop_recording

另一方面,接收者通过套接字从类文件对象读取数据并将数据流推送给播放器:

# server reads data from file-like object
connection = server_socket.accept()[0].makefile('rb')
cmdline = ['mplayer','-fps','25','-cache','1024','-']
player = subprocess.Popen(cmdline,stdin=subprocess.PIPE)
while True:
    # Repeatedly read 1k of data from the connection and write it to
    # the media player's stdin
    data = connection.read(1024)
    if not data:
        break
    player.stdin.write(data)

播放器“知道”如何从接收到的数据中解码视频,但是如果我想将视频保存到文件和/或在接收端处理/调整它的大小,我需要知道如何重建帧。

最终目标是接收视频流数据,然后将其保存到标准视频文件中,同时缩小视频的大小并进一步向下传输网络。我找到了许多解决方案,如 thisthis 等关于如何使用 opencv 发送/接收视频的教程,但我不知道如何针对我的具体情况调整它们。根据我的理解, cv2.VideoCapture() 只能从相机设备或文件中捕获。但是因为我有一个连续的视频流,我以 1024 字节的块接收(如上例所示),

  1. 如何将这些数据块重定向到 opencv 函数,即 cv2.VideoCapture(),以捕获和处理视频?
  2. 假设发送端保持不变,是否还有另一种重建视频的方法

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。