Я пытаюсь получить кадры из потока rtp через ffmpeg в реальном времени в python. На моем сервере кадры передаются по конвейеру из массивов numpy в ffmpeg и должны быть у клиента переданы обратно в numpy для дальнейшей обработки. Сервер создает файл sdp, который передается клиенту в качестве входных данных. Это выглядит так:
v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 127.0.0.1
t=0 0
a=tool:libavformat 58.42.102
m=video 5004 RTP/AVP 96
b=AS:19000
a=rtpmap:96 H265/90000
С ffplay или VL C поток может быть получен, но с моим кодом python нет, сначала нужно ок. 5se c для каждого кадра, а изображение представляет собой просто несколько случайных цветных пикселей. Клиент:
dimension = '{}x{}'.format(480, 240)
sdf_file = "video.sdp"
command = ['FFMPEG',
'-protocol_whitelist', 'udp,rtp,file,pipe,crypto,data',
'-i', sdf_file,
'-pix_fmt', 'bgr24',
'-r', '24',
'-video_size', dimension,
'-f', 'image2pipe', '-']
size = 480 * 240 * 3
proc = sp.Popen(command, stdout=sp.PIPE)
while True:
try:
tic = time.perf_counter()
frame = proc.stdout.read(size)
print(frame)
if frame is None:
print('no input')
break
image = np.frombuffer(frame, dtype='uint8').reshape(240, 480, 3)
toc = time.perf_counter()
print(f"performed calc in {(toc - tic) * 1000:0.4f} miliseconds")
cv2.imshow('received', image)
except Exception as e:
print(e)
cv2.destroyAllWindows()
proc.stdin.close()
proc.wait()
Есть идеи, как я могу получить кадры в реальном времени? Спасибо за помощь