我在YouTube安卓应用程序中启用了YouTube选项,并在"Vivo V9“和"Nexus 5”设备中播放了相同的视频。
Vivo V9:它播放了WebM格式的视频,基本上是"VP8或VP9“编解码器。
Nexus 5:它播放MP4格式的视频,基本上是"H264或H265“编解码器。
因此,基于设备,YouTube应用程序选择视频编解码器。
问题:是怎么做的?我知道,在内部,它使用ExoPlayer播放视频,但默认情况下,ExoPlayer不提供功能。
发布于 2018-09-27 08:32:01
不同的编解码器可能需要不同的许可证,这可能会花费很多。此外,编解码器可以是软件和硬件。许多SW编解码器都没有问题,但由于HW编解码器的名称,需要特定的芯片,这也增加了成本,占用了空间。这就是为什么设备制造商之间,甚至来自同一制造商的两个设备之间存在巨大差异的原因。他们只是想削减成本。
非常常见的情况是,一个设备只有最流行的编解码器的一个子集,即使它有VP8和H264,那么其中一个可以是HW编解码器,另一个可以是SW编解码器,在这种情况下,通常采用HW编解码器。YouTube (这里我指的是youtube.com而不是YouTube应用程序)提供不同格式的视频,因此设备可以根据其功能选择最优的编解码器。
现在,关于选择合适的编解码器,YouTube应用程序可以使用安卓的MediaCodec API。请检查例如这和/或它甚至可以提供它自己的SW编解码器,所以我想说行为是平台依赖的。
最后是角的情况,,例如,一些东西可以在背景中播放/记录,例如,当使用YouTube应用程序时,相机被打开,屏幕记录发生。同样,它依赖于设备,但是HW编解码器对媒体编解码实例的数量有限制,在这种情况下,即使设备有一些HW编解码器,YouTube应用程序也可能被迫选择SW编解码器。
编辑:从Android开始,还有一个新的API,它可以让你很容易地区分SW和HW编解码器。看看这。
https://stackoverflow.com/questions/52394008
复制相似问题