背景及準備作業
一點歷史
古有魏蜀吳三分天下,今有 Mplayer、MPC、VLC 三分天下,這個世界觀太龐大,忍不住先講一點多媒體播放器的歷史,實際上目前市面上的開源播放器主要基于三種技術堆疊:
Mplayer/MPV
發家于 Linux 平臺的播放器,基于 FFmpeg 進行解碼,我們的研究物件 Mpv 實際上是 Mplayer 的一個衍生分支,基于 OpenGL pipeline 的渲染方案使得自定義配置非常靈活,例如 upscale 演算法就有近十種可選,在我看來僅次于 madVR,Mpv 內部實作了支持各種平臺的 video output 模塊,比如在 Linux 上使用 GPU/OpenGL 或者 X11,在 Windows 上使用 GPU/OpenGL 或者 GPU/D3D11,
VLC
VideoLAN 組織開發的視頻播放器,具體什么技術堆疊我沒研究過,不過由于 libVLC 呼叫十分方便,一眾套殼播放器和 UWP 下的播放器底層都是呼叫的 VLC,VLC 傾向于成為一個開箱即用的簡便播放器,諸如 upscale 之類的特性沒有很好的擴展性,
MPC
Windows 系統下的播放器鼻祖,MPC 使用 FFmpeg 進行解碼,同時支持 DXVA 等技術,使用 Windows DirectShow 進行渲染,DirectShow 這個介面已經非常古早了,早在 Windows 7 的時候微軟就已經欽定了他的替代者——Media Foundation,只是微軟宅心仁厚,直到現在還一直支持著對古老技術方案的前向兼容,
當然 DirectShow 方案存活了這么久,在這上面做的文章也是最多的,著名的渲染器 madVR 也是基于這套方案,基于 MPC,后來衍生出了 MPC-HC 和 MPC-BE 兩個播放器,如果你想用 madVR,搭配 MPC-HC 可能是兼容性最好的組合了,
總結一下,MPC 技術堆疊真的非常老了,VLC 不夠 Geek,MPV 戰未來,
準備作業
為了能夠順利的閱讀原始碼,以及編譯我們自己的 Mpv,一些環境是必不可少的,閱讀原始碼我使用的是 Visual Studio,當然 VSCode 也行,只要能自動把宣告定義索引到就行,
Mpv 的編譯需要在 Linux 下進行,使用交叉編譯環境編譯到 Windows 下來使用,編譯可以參考這篇文章,兩種方法我都試過,mxe 環境比較適合靜態鏈接;不需要靜態鏈接的話,在 Windows 下使用 MSYS2 就足夠了,動態鏈接的 mpv 編譯出來以后會依賴數十個元件,個人覺得僅適合嘗鮮使用,
不想編譯也沒關系,用 Git 把官方倉庫 clone 下來即可,下一篇正式進入代碼,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/17743.html
標籤:其他
