音频视频播放在现在的应用里面很常见,传统应用发展到一定阶段多少会引入音视频资源,特别是现在短视频被看作下一个增长爆发点,和之相关的创业层出不穷,作为开发者如何进行音视频技术选型非常关键 MediaPlayer 和 VideoView 给我们提供了非常方便的播放音视频的能力,几乎不需要要写几行代码就可以完成。我们也可以使用 MediaPlayer 结合 SurfaceView 或者 TextureView 来实现视频播放,本质和 VideoView 是一样的,不过有更多的灵活性。 正因为封装性太强,意味着定制化变弱。MediaPlayer 提供的 setDataSource 方法支持 http,file,content 等协议,但仍然无法应对复杂的需求。所以更灵活的 AudioTrack 的出现,可以让我们直接传送解码后的 byte[] 给他,带来的问题就是自己要做解码。解码不是件简单的事情,往往我们利用 MediaCodec(Android4.1 增加)或者外部解码库(比如 ffmpeg)来实现。自己来实现解码要特别注意不要丢失了硬件加速,音频软解码还好,视频解码软解码对 CPU 压力会大很多。