使用 H264、RTP、UDP 的 gstreamer 测试。怎么了?

gstreamer test with H264, RTP, UDP. What's wrong?

我对 gstreamer 比较陌生,正在寻找一些调试思路。我正在查看使用 H264、RTP、UDP 的视频流,并设置了一些测试发送和接收脚本作为概念证明。我没有使用实际网络,而是使用本地主机并将所有代码保存在一台 PC 上。

发件人

gst-launch-1.0 videotestsrc ! video/x-raw,width=640,height=480 !\
timeoverlay !\
x264enc tune=zerolatency byte-stream=true bitrate=3000 !\
h264parse  !\
rtph264pay !\
udpsink host=localhost port=5200

接收者

gst-launch-1.0 udpsrc port=5200 !\
application/x-rtp,encodingname=H264,payload=96 !\
rtph264depay !\
h264parse !\
avdec_h264 !\
autovideosink

这几乎行得通。显示了测试视频,但几秒钟后大部分图像(色块)消失,右下角仅显示噪声框。然后几秒钟后它又闪烁回来,依此类推。

我可以看出它可能与排队、缓冲、同步或带宽有关?它不会在实际网络上丢失内容,因为我正在通过本地主机获取 UDP 流量。 Kinda thrashing about here,添加和删除各种参数并没有太大的区别。是的,其中一些是 copypasta,我可能不太清楚自己在做什么。

如果没有明显的问题,我该如何调试它?

我不认为这是原始的 CPU 功率,因为​​顶部并不表示我接近 100% CPU。

您可以尝试在接收器中添加 rtpjitterbuffer:

gst-launch-1.0 udpsrc port=5200 ! application/x-rtp,encoding-name=H264,payload=96 ! rtpjitterbuffer latency=0 ! rtph264depay ! h264parse ! avdec_h264 ! autovideosink