Как приложение YouTube android выбирает видеокодек?

Я включил статистику для nerds в приложении YouTube android и воспроизвел то же видео в устройствах "Vivo V9" и "Nexus 5".

Vivo V9: он воспроизводил видео в формате WebM, который в основном является кодеком VP8 или VP9.

Nexus 5: Он воспроизводил видео в формате MP4, который в основном представляет собой кодек "H264 или H265".

Итак, на основе устройства приложение YouTube выбирает видеокодек.

Вопрос: Как это делается? Я знаю, что он использует ExoPlayer для воспроизведения видео, но ExoPlayer по умолчанию не дает функциональности.

Ответ 1

Для разных кодеков могут потребоваться разные лицензии, которые могут стоить дорого. Более того, кодеки могут быть как программным, так и аппаратным. Нет проблем со многими кодеками SW, но, поскольку состояния имен HW-кодеки требуют определенного чипа, который также увеличивает стоимость и занимает пространство. Именно поэтому существует большое разнообразие между устройствами производства и даже между двумя устройствами от того же производителя. Они просто хотят сократить расходы.

Очень распространено, что одно устройство имеет только подмножество самых популярных кодеков, и даже если оно позволяет говорить как VP8, так и H264, то одним из них может быть HW-кодек, в то время как другой может быть SW-кодеком, в этом случае обычно предпочитается HW-кодек. YouTube (здесь я имею в виду youtube.com, а не приложение YouTube) предлагает видео в разных форматах, поэтому устройство может выбрать оптимальный кодек для своих возможностей.

Теперь, чтобы выбрать правильный кодек, приложение YouTube может использовать API MediaCodec от Android. Пожалуйста, проверьте, например, это и/или он даже может предоставить свои собственные SW-кодеки, поэтому я бы сказал, что поведение зависит от платформы.

Последними являются угловые случаи, например, что-то может быть воспроизведено/записано в фоновом режиме, например, камера включена, а экранная запись происходит при использовании приложения YouTube. Опять же, это зависит от устройства, но кодеки HW имеют ограничения на количество экземпляров медиакодека, и в таком случае, возможно, даже если у устройства есть какой-то HW-кодек, приложение YouTube может быть вынуждено выбрать SW-кодек.