0

我对 gstreamer 比较陌生,正在寻找一些调试想法。我正在研究使用 H264、RTP、UDP 的视频流,并设置一些测试发送和接收脚本作为概念证明。我没有使用实际的网络,而是使用 localhost 并将所有代码保存在一台 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

这几乎可以工作。显示了测试视频,但几秒钟后,大部分图像(色块)消失了,只有噪点框显示在右下方。然后几秒钟后它又闪烁回来,依此类推。

我可以看到它可能与排队或缓冲或同步或带宽有关?它不会在实际网络上丢失内容,因为我正在通过 localhost 进行 UDP 流量。有点在这里折腾,添加和删除各种参数并没有太大区别。是的,其中一些是copypasta,我可能不太清楚我在做什么。

如果没有什么明显的,我该如何调试呢?

我不认为这是原始 CPU 能力,因为 top 并不表示我接近 100% CPU。

4

1 回答 1

0

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

gst-launch-1.0 udpsrc port=5200 ! application/x-rtp,encoding-name=H264,payload=96 ! rtpjitterbuffer latency=0 ! rtph264depay ! h264parse ! avdec_h264 ! autovideosink
于 2022-01-30T12:56:39.797 回答