Почему WebRTC поддерживает только H264 в Chrome, но не в нативном приложении с некоторыми устройствами - PullRequest
0 голосов
/ 15 декабря 2018

Я использую официальный образец для создания предложения SDP в Android Chrome, мы можем найти a=rtpmap:100 H264/90000, что означает, что он может поддерживать H264.

Но если я соберу AppRTC (официальныйПример Android) и использование официальных предварительно собранных библиотек версия 1.0.25821, вызовите createOffer, затем получите SDP в SdpObserver::onCreateSuccess, SDP не содержит H264.

Моим тестовым устройством является Oppo R15 (с MTK Helio P60, Android 8.1).

Итак, почему WebRTC поддерживает только H264 в Chrome, но не в нативном приложении с некоторыми устройствами Android?

1 Ответ

0 голосов
/ 16 декабря 2018

В сборке Chrome используется openh264, который не используется обычным ** WebRTC .Под обычным я подразумевал, что есть вариант с программным обеспечением h.264 из сборки Chrome, который вы можете использовать, но я бы не рекомендовал его.

На Android WebRTC H.264 поддерживается только в том случае, если аппаратное обеспечение устройства

  1. поддерживается, а логика склеивания аппаратного кодировщика аппаратного кодера WebRTC И
  2. этот аппаратный кодировщик.В настоящее время поддерживаются только устройства QCOM и EXYNOS .Таким образом, любые другие устройства, даже если они поддерживают H.264 HW-кодировщик, не будут использоваться и не будут добавлены как часть фабрики кодеков, и вы не увидите в SDP, сгенерированном из примеров приложений WebRTC.

На уровне Java вы можете видеть это в HardwareVideoEncoderFactory.java, который проверяет устройства QCOM и EXYNOS в функции isHardwareSupportedInCurrentSdkH264.

Интересно, что если вы используете собственный код, дажеАппаратные кодировщики QCOM и EXYNOS не поддерживаются (на трекере ошибок Webrtc имеется ошибка).Это из-за тесной интеграции кода кодирования HW с кодом JNI - определенно не очень хороший модульный код.

...