基於FFMPEG的跨平臺播放器實現(二)

基於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的一些使用細節,還須要再深刻地研究一下。

相關文章
相關標籤/搜索