YouTube android应用如何选择视频编解码器?

How does the YouTube android app select video codec?

我在YouTube android应用中启用了"书呆子统计"选项,并在" Vivo V9"和" Nexus 5"设备上播放了相同的视频。

Vivo V9:它以WebM格式播放视频,该格式基本上是" VP8或VP9"编解码器。

Nexus 5:它以MP4格式播放了视频,该视频基本上是" H264或H265"编解码器。

因此,YouTube应用会根据设备选择视频编解码器。

问题:怎么办? 我知道内部使用ExoPlayer播放视频,但默认情况下ExoPlayer不提供功能。


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

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

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

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

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