关键帧需要 webrtc android 应用程序中的第一个错误。如何降低传入视频的帧率?

key frame required first error in webrtc android application. How to reduce framerate on incoming video?

我们有一个 webrtc android 应用程序正常工作,我们使用 Kurento 作为媒体服务器,它以 24 fps 的速度发送视频;然而,android 应用程序中的传入视频流呈现出一种周期性滞后,就好像一秒的前 15 帧已被处理并流畅播放,但接下来的 15 帧被跳过,所以我们最终得到了一个视频流畅播放几毫秒,但随后也会暂停几毫秒。

我猜传入的视频帧速率太大,android 设备无法处理,因此它会跳过一些帧,然后在缓冲区再次空闲时继续。我在 logcat 中得到以下输出(我用谷歌搜索但没有找到我的问题的答案)说 首先需要关键帧:

12-28 20:12:27.857 19648-19769/mx.blacklabs.parallax E/org.webrtc.Logging: HardwareVideoDecoder: decode() - key frame required first
12-28 20:12:27.858 19648-19796/mx.blacklabs.parallax E/org.webrtc.Logging: HardwareVideoDecoder: decode() - key frame required first
12-28 20:12:27.858 19648-19769/mx.blacklabs.parallax E/org.webrtc.Logging: HardwareVideoDecoder: decode() - key frame required first

我收到相同的错误消息,但有几毫秒的差异,所以看起来它与我的问题有关。

我试过的

-使用 maxFrameRate MediaConstraint 如图所示 here 但这似乎没有效果。此外,这似乎是为 localMediaStream 而设计的,而我们正在尝试减少 remoteMediaStream。

观察结果

我们使用的 android 设备是运行在 android 5.1.1 上的 Moverio BT-300。我正在使用以下 webrtc 实现 org.webrtc:google-webrtc:1.0.22672

约束会降低视频 source 的帧速率,即 outgoing 帧速率。要降低传入帧速率,请让另一方降低传出帧速率,例如通过带外信号告诉它(如果你控制两端)。