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

YouTube android应用程序如何选择视频编解码器?,android,youtube,Android,Youtube,我在YouTube android应用程序中启用了该选项,并在“维梧V9”和“Nexus 5”设备中播放了相同的视频 Vivo V9:它以WebM格式播放视频,基本上是“VP8或VP9”编解码器 Nexus 5:它以MP4格式播放视频,基本上是“H264或H265”编解码器 因此,YouTube应用程序根据设备选择视频编解码器 问题:它是怎么做的?我知道它在内部用于播放视频,但默认情况下ExoPlayer不提供功能。不同的编解码器可能需要不同的许可证,这可能会花费很多。此外,编解码器可以是软件和

我在YouTube android应用程序中启用了该选项,并在“维梧V9”和“Nexus 5”设备中播放了相同的视频

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

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

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


问题:它是怎么做的?我知道它在内部用于播放视频,但默认情况下ExoPlayer不提供功能。

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

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

现在要选择正确的编解码器,YouTube应用程序可以使用Android的MediaCodec API。请检查,例如,和/或它甚至可以提供自己的软件编解码器,因此我认为该行为取决于平台

最后一件事是角落案例例如,可以在后台播放/录制某些内容,例如,在使用YouTube应用程序时打开摄像头并进行屏幕录制。同样,这取决于设备,但硬件编解码器对媒体编解码器实例的数量有限制,在这种情况下,即使设备有一些硬件编解码器,YouTube应用程序也可能被迫选择软件编解码器

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

谢谢你的回答。我对不同的编解码器及其设备支持(如H264、H265和VP9)有一点了解。。MediaCodec API提供了可用的编解码器列表,但没有说明其硬件或软件。选择硬件加速非常重要,因为CPU使用得到优化,视频帧不会丢失。有人试图探索或了解YouTube如何在内部进行编解码器选择吗?您是否尝试过使用此API:?如果我没记错,名称应该包含sw/hw前缀。您也可以尝试检查/etc/media_codecs.xml。它通常指其他xml文件,但它们应该包含受支持的编解码器,我猜hw编解码器也应该包含hw前缀。没有名称没有任何sw/hw前缀。那么它必须取决于制造商使用的命名约定,因为我记得我在那些xml文件的某处看到了这些硬件/软件前缀。无论如何,请检查,例如:软件和硬件编解码器之间有区别,但不明显,可以从xml文件中的注释推断出来。