古有魏蜀吴三分天下,今有 Mplayer、MPC、VLC 三分天下。这个世界观太庞大,忍不住先讲一点多媒体播放器的历史。实际上目前市面上的开源播放器主要基于三种技术栈:git
发家于 Linux 平台的播放器,基于 FFmpeg 进行解码。咱们的研究对象 Mpv 其实是 Mplayer 的一个衍生分支。基于 OpenGL pipeline 的渲染方案使得自定义配置很是灵活,例如 upscale 算法就有近十种可选,在我看来仅次于 madVR。Mpv 内部实现了支持各类平台的 video output 模块,好比在 Linux 上使用 GPU/OpenGL 或者 X11,在 Windows 上使用 GPU/OpenGL 或者 GPU/D3D11。github
VideoLAN 组织开发的视频播放器,具体什么技术栈我没研究过,不过因为 libVLC 调用十分方便,一众套壳播放器和 UWP 下的播放器底层都是调用的 VLC。VLC 倾向于成为一个开箱即用的简便播放器,诸如 upscale 之类的特性没有很好的扩展性。算法
Windows 系统下的播放器鼻祖。MPC 使用 FFmpeg 进行解码,同时支持 DXVA 等技术,使用 Windows DirectShow 进行渲染。DirectShow 这个接口已经很是古早了,早在 Windows 7 的时候微软就已经钦定了他的替代者——Media Foundation。只是微软宅心仁厚,直到如今还一直支持着对古老技术方案的前向兼容。windows
固然 DirectShow 方案存活了这么久,在这上面作的文章也是最多的。著名的渲染器 madVR 也是基于这套方案。基于 MPC,后来衍生出了 MPC-HC 和 MPC-BE 两个播放器。若是你想用 madVR,搭配 MPC-HC 多是兼容性最好的组合了。ide
总结一下,MPC 技术栈真的很是老了,VLC 不够 Geek,MPV 战将来。视频
为了可以顺利的阅读源码,以及编译咱们本身的 Mpv,一些环境是必不可少的。阅读源码我使用的是 Visual Studio,固然 VSCode 也行,只要能自动把声明定义索引到就行。对象
Mpv 的编译须要在 Linux 下进行,使用交叉编译环境编译到 Windows 下来使用。编译能够参考这篇文章,两种方法我都试过,mxe 环境比较适合静态连接;不须要静态连接的话,在 Windows 下使用 MSYS2 就足够了。动态连接的 mpv 编译出来之后会依赖数十个动态连接库,我的以为仅适合尝鲜使用。索引
不想编译也不要紧,用 Git 把官方仓库 clone 下来便可。下一篇正式进入代码。接口