How does the YouTube android app select video codec?

时间:2018-09-18 20:15:34

标签: android youtube

I have enabled stats for nerds option in YouTube android app and played the same video in "Vivo V9" and "Nexus 5" device.

Vivo V9 : It played the video in WebM format which is basically "VP8 or VP9" codec.

Nexus 5 : It played the video in MP4 format which is basically "H264 or H265" codec.

So, based on the device YouTube app selects video codec.

Question : How does it do ? I know internally it uses ExoPlayer for playing video but ExoPlayer by default doesn't give functionality.

1 个答案:

答案 0 :(得分:5)

不同的编解码器可能需要不同的许可证,这可能会花费很多。此外,编解码器可以是软件,也可以是硬件。许多SW编解码器没有问题,但正如名称所指出的,硬件编解码器需要特定的芯片,这也增加了成本并占用空间。这就是为什么设备制造商之间,甚至同一制造商的两台设备之间存在很大差异的原因。他们只是想削减成本。

一个设备只有最流行的编解码器的一个子集是很常见的,即使它具有VP8和H264,那么其中一个可以是HW编解码器,而另一个可以是SW编解码器,在这种情况下通常HW编解码器将是首选。 YouTube(此处是指youtube.com而非YouTube应用)提供了不同格式的视频,因此设备可以根据其功能选择最佳的编解码器。

现在,关于选择正确的编解码器,YouTube应用可以使用Android中的MediaCodec API。请检查例如this和/或它甚至可以提供自己的SW编解码器,因此我想说这种行为取决于平台。

最后的事情是拐角事件,例如可以在后台播放/录制的东西使用YouTube应用程序时,相机已打开并且进行了屏幕录制。同样,这取决于设备,但是硬件编解码器对媒体编解码器实例的数量有所限制,在这种极端情况下,即使设备具有某些硬件编解码器,YouTube应用也可能被迫选择SW编解码器。

编辑: 从Android Q开始,还有一个新的API,可让您轻松区分SW和HW编解码器。看看this