VP8 流来自 Janus Videoroom 插件,在本地重新流式传输到 10002/10004。从那里,它被以下 gstreamer 管道拾取:
gst-launch-1.0 -v udpsrc \
caps="application/x-rtp,media=(string)video,encoding-name=(string)VP8,payload=100" \
address=127.0.0.1 port=10004 ! \
rtpvp8depay ! rtpvp8pay ! \
udpsink host=127.0.0.1 port=5004
并发送到流插件。正如你所看到的,这里没有转码,只是depayloading和payloading。生成的视频在某些关键帧上分解为伪影,大约在 10 个关键帧中出现一次,只能在下一个关键帧上修复。
如果我删除 depay and pay,只需在 rtp 级别转发,即可获得此
gst-launch-1.0 -v udpsrc \
caps="application/x-rtp,media=(string)video,encoding-name=(string)VP8,payload=100" \
address=127.0.0.1 port=10004 ! \
udpsink host=127.0.0.1 port=5004
它永远不会发生。
我知道这不是 Janus 问题,而是 gstreamer 问题。但也许有人知道可能是什么问题?这已经过非常可靠的测试,在前一种情况下问题很容易重现,而在后一种情况下永远不会发生。
当然,我所做的目标是转码,在我将其归结为这个级别之前,设置和管道中还有很多内容。转载于安装在全新 Ubuntu 18.04 机器上的 Janus,具有所有开箱即用的设置。
更新:
export GST_DEBUG="rtp*:4";
揭示了此错误消息,每次出现工件时都会退出:
rtpbasedepayload gstrtpbasedepayload.c:473:gst_rtp_base_depayload_handle_buffer:
<rtpvp8depay0> 12 <= 100, dropping old packet
“12”的数字通常在 5 到 12 之间波动。