将其他数据嵌入UDP视频流Python OPENCV

时间:2019-05-19 11:38:10

标签: python opencv server udp video-streaming

我正在尝试从服务器流式传输要在客户端上进行分析的视频。

我正在使用vidgears创建ffmpeg UDP流以供客户端连接。

但是,我需要一个中心化的帧数才能同步客户端提供的所有数据。

Client:    
cap = cv2.VideoCapture('udp://localhost:23000')   
while cap.isOpened(): 
    print(cap.get(cv2.CAP_PROP_FRAME_COUNT))

Will only get me the frame count from the time the client connected. 

Is there a way to embed a timecode or frame count when I am stream out the video so I can sync them all up? 

服务器:

i = 0
output_params = {"-vcodec": "mpeg4", '-f': 'mpegts'}
streamer = WriteGearStream(output_filename='udp://localhost:23000', compression_mode=True, logging=True, **output_params)
cap = cv2.VideoCapture(0)
while cap1.isOpened():
   i+=1
   ret, frame = cap.read()
   cap.set(cv2.CAP_PROP_POS_FRAMES, i)
   streamer.write(vis)

WriteGearStream(WriteGear)类:

def __init__(self, output_filename='', compression_mode=True, custom_ffmpeg='', logging=False, **output_params):
    super(WriteGearStream, self).__init__(output_filename='temp.pm4', compression_mode=compression_mode, custom_ffmpeg=custom_ffmpeg, logging=logging, **output_params)
    self.out_file = output_filename

有人知道如何获得与服务器同步的帧数吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我是VidGear视频处理python库的作者。 这不是使用WriteGear API的正确方法,也不是为此目的而设计的,因此恐怕无法使用。

请善用VidGear的新 NetGear API,该专为在网络上的互连系统之间实时同步传输视频帧而设计。此新API实现了围绕PyZmQ的高级包装器包含用于ZeroMQ的python绑定的python库-一种旨在用于分布式或并发应用程序的高性能异步分布式消息传递库。