之前寫過一篇關(guān)于編譯ffmpeg的文章,地址: linux安裝ffmpeg
本文在那篇基礎(chǔ)上,講怎么編譯ffmpeg的播放器ffplay。
本次實(shí)驗(yàn)環(huán)境:
- macOS Catalina 10.15.1
- FFmpeg 3.4
在ffmpeg目錄下執(zhí)行./configure(攜帶好需要的參數(shù)),輸出的信息包含了會(huì)編譯哪些可執(zhí)行程序:
Programs:
ffmpeg ffprobe ffserver
可以看到,并不包含ffplay。這是由于ffplay依賴sdl庫(kù),我本地環(huán)境沒有,所以需要先安裝sdl庫(kù)。
在ffmpeg目錄下執(zhí)行./configure -h,輸出的信息可以看到這么一行:
--disable-sdl2 disable sdl2 [autodetect]
說明使用的是sdl2,并且如果當(dāng)前環(huán)境有sdl2的話,會(huì)自動(dòng)檢測(cè)并使用。
這里我們選擇源碼安裝sdl2:
$wget https://www.libsdl.org/release/SDL2-2.0.12.tar.gz
$cd SDL2-2.0.12/
$./configure
$make && make install
再次回到ffmpeg目錄下執(zhí)行./configure(攜帶好需要的參數(shù)),顯示如下信息:
Programs:
ffmpeg ffplay ffprobe ffserver
說明會(huì)包含ffplay了,執(zhí)行make編譯:
$make -j8
編譯完就可以看到生成好的ffplay等可執(zhí)行文件了。嘗試使用ffplay播放一個(gè)文件,一切正常。
最后,再貼一個(gè)macOS編譯SDL1.2的方法,盡管我本次編譯ffplay使用的SDL2,不需要SDL1.2,但是我在編譯SDL1.2時(shí)也遇到了一些問題,把相關(guān)內(nèi)容貼在這,留給需要的人。
實(shí)驗(yàn)環(huán)境: macOS Catalina 10.15.1
在 https://www.libsdl.org/download-1.2.php 這個(gè)網(wǎng)站找到源碼下載地址。
下載SDL1.2.15,編譯,安裝:
$wget https://www.libsdl.org/release/SDL-1.2.15.tar.gz
$cd SDL-1.2.15/
$./configure
$make && make install
編譯報(bào)錯(cuò):
./include/SDL_syswm.h:58:10: fatal error: 'X11/Xlib.h' file not found
#include <X11/Xlib.h>
^~~~~~~~~~~~
1 error generated.
缺少X11,直接下載dmg安裝包文件,安裝XQuertz,下載地址: https://dl.bintray.com/xquartz/downloads/XQuartz-2.7.11.dmg
再次嘗試編譯SDL,輸出如下信息:
./src/video/quartz/SDL_QuartzVideo.h:94:5: error: unknown type name 'CGDirectPaletteRef'
CGDirectPaletteRef palette; /* palette of an 8-bit display */
解決方法是把報(bào)錯(cuò)的那行代碼注釋掉。
再次嘗試編譯SDL,輸出如下信息:
./src/video/x11/SDL_x11sym.h:168:17: error: conflicting types for '_XData32'
SDL_X11_SYM(int,_XData32,(Display *dpy,register long *data,unsigned len),(dpy,data,len),return)
我們修改報(bào)錯(cuò)的代碼,在register后面增加_Xconst,修改后如下:
SDL_X11_SYM(int,_XData32,(Display *dpy,register _Xconst long *data,unsigned len),(dpy,data,len),return)
再次嘗試編譯SDL,編譯通過。
本文完,作者yoko,尊重勞動(dòng)人民成果,轉(zhuǎn)載請(qǐng)注明原文出處: https://pengrl.com/p/20043/
本篇文章由一文多發(fā)平臺(tái)ArtiPub自動(dòng)發(fā)布