0

我尝试使用 pycam 文档3.13。录制到网络流,其中客户端是通过套接字发送 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)

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

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

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

0 回答 0