5

我正在尝试在 WebRTC 的帮助下将屏幕截图的视频发送到 mediasoup。WebRTC 库中有一个类:ScreenCapturerAndroid。它可以工作,但是某些设备上的性能确实很差。特别是如果我使用高清或更好的显示分辨率。

在 stackoverflow 上,我找到了调用setEnableVideoHwAcceleration(true)setVideoHwAccelerationOptions()的建议。但在较新版本的 WebRTC 库中,这些方法已被删除

这是我的代码:

  // ...
PeerConnectionFactory.Builder builder = PeerConnectionFactory.builder();
builder.setOptions(null);

EglBase.Context eglContext = EglUtils.getRootEglBaseContext();

VideoEncoderFactory encoderFactory =
    new DefaultVideoEncoderFactory(
        eglContext, true /* enableIntelVp8Encoder */, true);


PeerConnectionFactory.InitializationOptions initializationOptions =
PeerConnectionFactory.InitializationOptions.builder(context)
//        .setEnableVideoHwAcceleration(true)  // <-- does not work any more 
        .createInitializationOptions();
PeerConnectionFactory.initialize(initializationOptions);

mPeerConnectionFactory =
    builder
        .setVideoEncoderFactory(encoderFactory)
        .createPeerConnectionFactory();

我的问题是:如何使用较新的 WebRTC 库版本为屏幕捕获启用视频硬件加速。

4

1 回答 1

0

这取决于您的设备以及您使用的 libwebrtc 版本。因此,您可以查看 webrtc 源代码以了解硬件支持与否。这意味着如果您的 libwebrtc 没有在源代码中为它做一些工作,视频编码器的硬件加速将不受支持。:P

因此,如果您的 libwebrtc 不支持它,那么即使您在应用程序级别的设置是正确的,也无法快速看到任何东西。

那么,让我们谈谈如何在libwebrtc中检查视频编码器的硬件加速。

检查此源代码 https://chromium.googlesource.com/external/webrtc/+/HEAD/sdk/android/api/org/webrtc/HardwareVideoEncoderFactory.java

您可以在 HardwareVideoEncoderFactory.java 中搜索关键字:
“isHardwareSupportedInCurrentSdk”

今天是 1 月 12 日,我截屏了代码。

在此处输入图像描述

从源代码来看,它们确实显示了清晰的信息。

顺便说一句,您还可以在 GooglePlay 中下载一些媒体编解码器信息应用程序,以检查不同类型的 android 手机的不同类型的编码器/解码器。那也会很有帮助。

于 2021-01-11T16:23:29.693 回答