基於FFMPEG的跨平臺播放器實現(二)linux
上一節講到了在Android平臺下采用FFmpeg+surface組合打造播放器的方法,這一節講一下Windows平臺FFmpeg + D3D、Linux平臺FFmpeg+SDL的組合方法。git
1、FFmpeg + D3Dgithub
D3D(Direct3D ):是微軟爲提升3D遊戲在Windows中的顯示性能而開發的顯示程序接口,它提供了豐富的3D功能庫,是遊戲普遍採用的標準,開發者都會用到dx9sdk、dx10sdk等不一樣版本的SDK,能夠到微軟官網下載。其性能沒必要多說,把用來開發遊戲的SDK用到播放器上應該沒什麼問題吧!windows
不過D3D的用法稍微複雜,並且能夠參考的文檔不太多,只能啃SDK文檔了 ,基本流程如圖1:函數
圖1性能
2、FFmpeg+SDL開放源代碼
SDL(Simple DirectMedia Layer)是一套開放源代碼的跨平臺多媒體開發庫,使用C語言寫成。SDL提供了數種控制圖像、聲音、輸出入的函數,讓開發者只要用相同或是類似的代碼就能夠開發出跨多個平臺(Linux、Windows、Mac OS X等)的應用軟件。目前SDL多用於開發遊戲、模擬器、媒體播放器等多媒體應用領域。線程
相比於D3D,SDL的用法則簡單許多,不須要本身建立CopySurface線程,按順序調用接口就行,如圖2:3d
圖2blog
3、接口封裝
我採用編譯宏Ifdef 控制windows、linux的編譯,控制D3D、SDL的使用,達到封裝細節、跨平臺的效果,具體方法如圖3:
圖3
4、運行效果
圖4
圖5
5、說明
代碼上傳到了https://github.com/dongguadan中的playsdk目錄 。須要說明的是,時間戳的概念沒有體現的工程中,因此幀於幀之間的時間沒有控制好,致使畫面不流暢,後面會改進。另外關於SDL、D3D的一些使用細節,還須要再深刻地研究一下。