我在YouTube安卓应用中启用了stats for nerds选项,并在“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。请检查,例如this和/或它甚至可以提供它自己的SW编解码器,所以我会说这种行为是依赖于平台的。
最后的事情是例如可以在后台播放/录制某些内容,例如使用YouTube应用程序时,相机已开启且屏幕录制已完成。同样,它取决于设备,但硬件编解码器对媒体编解码器实例的数量有限制,在这种极端情况下,即使设备有一些硬件编解码器,YouTube应用也可能被迫选择SW编解码器。
编辑:从Android Q开始,还有新的API,可以让您轻松区分SW和硬件编解码器。看看this。