Python将ffmpeg流实时传输到numpy

Python将ffmpeg流实时传输到numpy,python,ffmpeg,Python,Ffmpeg,我试图在python中通过ffmpeg实时从rtp流中获取帧。在我的服务器上,帧通过管道从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:19

我试图在python中通过ffmpeg实时从rtp流中获取帧。在我的服务器上,帧通过管道从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或VLC可以接收流,但使用我的python代码不能接收流,一开始每帧大约需要5秒,图像只是一些随机的彩色像素。 客户:

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()
有什么想法吗,我怎样才能实时得到这些帧?谢谢你的帮助