古有魏蜀吳三分天下,今有 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 下來便可。下一篇正式進入代碼。接口