【问题标题】:WebRTC: How to enable hardware acceleration for the video encoderWebRTC:如何为视频编码器启用硬件加速
【发布时间】:2020-07-28 15:19:58
【问题描述】:

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

在 stackoverflow 上我找到了一个 suggestion 来调用 setEnableVideoHwAcceleration(true)setVideoHwAccelerationOptions()。但在较新版本的 WebRTC 库中,methods have been removed

这是我的代码:

  // ...
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 库版本为屏幕捕获启用视频硬件加速。

【问题讨论】:

    标签: webrtc webrtc-android mediasoup


    【解决方案1】:

    这取决于您的设备以及您使用的 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 中下载一些 Media Codec Info App,以检查不同类型的 Android 手机的不同类型的编码器/解码器。这也很有帮助。

    【讨论】:

      猜你喜欢
      • 2013-11-11
      • 2012-07-04
      • 1970-01-01
      • 2015-11-29
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      相关资源
      最近更新 更多