我需要一些帮助来让ffplay接收和解码以h264编码的实时流。
我试图在计算机A之间制作点对点流,从Kinect接收视频帧,运行ffplay的计算机B显示实时流。
这些是我在两台计算机上运行的命令。
计算机A(RPI 3)
ffmpeg -f rawvideo -vcodec rawvideo -pix_fmt rgb24 -s 640x480 -i - -threads 4 -preset ultrafast -codec:v libx2 64 -an -f rtp rtp://192.168.0.100:2000
这就是ffmpeg输出的内容:
fps= 14 q=12.0 size=856kB time=00:00:05.56 bitrate=1261.4kbits/s speed=0.54x
出流在10-20帧之间运行。这不好,但我可以解决这个问题。
计算机B
ffplay -protocol_whitelist "file,udp,rtp" -probesize 32 -sync ext -i streaming.sdp
streaming.sdp
v=0
0=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 192.168.0.100
t=0 0
a=tool:libavformat 57.56.100
m=video 2000 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1
我得到的是流,但是大约0.0001fps,这是非常糟糕的。我的猜测是我在ffplay命令上遗漏了一些东西,因为ffmpeg显示了一个更稳定和更快的流,但我似乎无法找到我所缺少的东西。
提前致谢
答案 0 :(得分:1)
问题不在于ffmpeg,而是在我写的代码中,它从设备中获取数据。我多次收到相同的帧,并阻止线程捕获数据,使大多数帧与第一帧重复。