ffmpeg 到 kurento rtp 流断断续续的视频问题

ahm*_*ias 7 ffmpeg stream rtp webrtc kurento

我使用 ffmpeg 将 rtp 流发送到 kurento 媒体服务器,然后通过 webrtc 将其发送到浏览器。

ffmpeg (h264 RTP) -> Kurento -> (h264 WebRTC) 浏览器

我正在捕获虚拟 xorg 显示。这是我的 ffmpeg 命令:

ffmpeg -y -v info -fflags +genpts -f x11grab -draw_mouse 0 -r 25 -s 1280x720 -thread_queue_size 4096 -i :0.0+0,0 -an -c:v libx264 -preset veryfast -crf 25 -g 50 -pix_fmt yuv420p -maxrate 2976k -bufsize 5952k -ssrc 112233 -payload_type 103 -tune zerolatency -f rtp rtp://172.16.1.115:40258

这是我在与 kurento RtpEndpoint 协商时使用的虚假 sdp 报价

v=0
o=- 0 0 IN IP4 127.0.0.1
s=Stream
c=IN IP4 127.0.0.1
t=0 0
m=video 9 RTP/AVP 103
a=rtpmap:103 H264/90000
a=fmtp:103 packetization-mode=1
a=sendonly
a=direction:active
a=ssrc:112233 cname:user@example.com 
Run Code Online (Sandbox Code Playgroud)

这是问题所在:

一些 I 帧在帧的下半部分断断续续,而另一些则没有问题。

当另一个 I 帧到达时,它有时会得到纠正,但大多是断断续续的。

当波动发生时,Kms 日志显示:

kmsutils kmsutils.c:483:gap_detection_probe:kmsagnosticbin2-108:sink 检测到流间隙,时间戳:0:51:22.574766908,持续时间:0:00:00.000008237

正常流(完全没有波涛汹涌)

正常流(完全没有波涛汹涌)

波涛汹涌的溪流

波涛汹涌的溪流

当它用 I-Frame 纠正时(有时会发生)

修正流

我不知道是什么导致了这个问题。

我试图解决问题的事情。

  • 添加?pkt_size=1000(1100,900,1200。由于kurento中的mtu默认为1200)
  • 将 -crf 更改为 18-35 之间的不同值
  • 在中等和超快之间更改预设
  • 改变帧率
  • 改变 gop 长度(当我降低 gop 长度时 - 更多 I 帧 - 波动持续时间变短但更频繁)
  • 当我禁用切片线程时,底部没有问题,但在同一场景中整个屏幕冻结

任何帮助,将不胜感激。谢谢。