WebRTC: Как включить аппаратное ускорение для видеокодера

Пытаюсь отправить видео захвата экрана в mediasoup с помощью WebRTC. Для этого есть класс в библиотеке WebRTC: ScreenCapturerAndroid. Это работает, но производительность на некоторых устройствах очень плохая. Особенно, если я использую разрешение экрана HD или лучше.

В 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.


person Valelik    schedule 28.07.2020    source источник


Ответы (1)


это зависит от вашего устройства и от того, какую версию libwebrtc вы использовали. Таким образом, вы можете проверить исходный код webrtc, чтобы узнать, поддерживает ли HW или нет. Это означает, что аппаратное ускорение видеокодера не будет поддерживаться, если ваш libwebrtc не выполняет для него некоторую работу в исходном коде. :П

Так что, если ваш libwebrtc его не поддерживает, то ничего не увидит быстро, даже если ваши настройки на уровне приложения верны.

Итак, поговорим о том, как проверить аппаратное ускорение видеокодера в libwebrtc.

Проверьте этот исходный код https://chromium.googlesource.com/external/webrtc/+/HEAD/sdk/android/api/org/webrtc/HardwareVideoEncoderFactory.java

Вы можете выполнить поиск по ключевому слову в HardwareVideoEncoderFactory.java:
isHardwareSupportedInCurrentSdk

Сегодня 12 января, и я сделаю снимок экрана с кодом.

введите описание изображения здесь

Из исходного кода они действительно показывают четкую информацию.

Кстати, вы также можете загрузить приложение Media Codec Info App в GooglePlay, чтобы проверить разные типы кодировщиков / декодеров для разных типов телефонов Android. Это тоже было бы полезно.

person Milo Chen    schedule 11.01.2021