系統:Ubuntu 14.04.4
安裝包傳送門ffmpeg+SDL+yasm安裝包傳送門
一、安裝ffmpeg(4.2.2)(好像是從3.2開始,只能適配2.X以上版本的SDL)
如果需要安裝的ffplay的話,由於ffplay依賴SDL,所以需要先安裝SDL庫。
1、解壓
tar -zxvf ffmpeg-4.2.2.tar.gz
cd ffmpeg-4.2.2
2、注意參數--enable-ffplay
需要支持ffplay的一定要帶上這個參數,否則編譯的時候會報ffplay.c下的很多函數未定義。看前輩們解決方案中有執行完configure之後修改ffmpeg-4.2.2 /ffbuild下的config.mak和common.mak。我嘗試了並沒有成功,可能有些配置不夠完整,導致SDL的庫鏈接不到。直接在配置的時候加上--enable-ffplay。執行完configure,config.mak中會自動生成SDL庫的鏈接路徑,編譯可順利進行
./configure --enable-shared --enable-ffplay --prefix=/ljm/ffmpeg
make 編譯時間會比較長
make install
3、缺少yasm編譯問題
yasm未安裝或版本較低。安裝yasm
tar -zxvf yasm-1.3.0.tar.gz
cd yasm-1.3.0/
./configure
make
make install
安裝成功
ljm@ubuntu:~$ yasm --version
yasm 1.3.0
Compiled on May 9 2020.
Copyright (c) 2001-2014 Peter Johnson and other Yasm developers.
Run yasm --license for licensing overview and summary.
4、ffmpeg安裝成功
4.1、編譯目錄下有如下文件
ljm@ubuntu:/etc/ffmpeg/ffmpeg-4.2.2$ ls -alh ffmpeg ffplay
-rwxr-xr-x 1 root root 246K May 12 10:10 ffmpeg
-rwxr-xr-x 1 root root 121K May 12 10:10 ffplay
進入 這個目錄下執行 ./ffmpeg -version
報錯
libavdevice.so.57: cannot open shared object file: No such file or directory
這是因爲SDLffmpeg的相關的庫沒有被連接到,需要修改鏈接
vim /etc/ld.so.conf.d/ffmpeg.conf
寫入剛剛的安裝路徑
/ljm/ffmpeg/lib
保存退出
執行ldconfig命令使腳本生效
正確之後
ljm@ubuntu:/etc/ffmpeg/ffmpeg-4.2.2$ ./ffmpeg -version
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.4)
configuration: --enable-shared --enable-ffplay --prefix=/ljm/ffmpeg
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
需要命令行直接使用ffplay命令,需要修改環境變量
vim /etc/profile
export PATH=/etc/ffmpeg/ffmpeg-4.2.2:$PATH
1、我的編譯目錄(非安裝目錄)是在/ect/ffmpeg
2、後面的$PATH記得加上,不然會導致進入Ubuntu的時候,循環在登錄界面,不斷的輸入密碼
二、SDL2.0 的安裝
下載好包SDL2-2.0.12.tar.gz
1、解壓
tar -zxvf SDL2-2.0.12.tar.gz
2、進入解壓目錄下的SDL2-2.0.12
./configure
make
make install
3、安裝完成
ljm@ubuntu:~$ sdl2-config --version
2.0.12
三、庫文件、頭文件處理
①SDL庫
頭文件在:/usr/local/include/SDL2
庫文件在:/usr/local/lib
②ffmpeg庫
頭文件:/usr/local/include/ffmpeg
庫文件:/usr//lib
以上兩個路徑並不是必須的,可以自由發揮,在編譯的時候記得配置好路徑
下面是我一個demo的Makefile供參考
CC = gcc
CFLAGS = -g -O2 -D_REENTRANT -I/usr/local/include/SDL2 -I/usr/local/include/ffmpeg -DHAVE_OPENGL -g
LIBS = -Wl,-rpath,/usr/local/lib -Wl,--enable-new-dtags -L/usr/local/lib -lSDL2 -lavformat -lavcodec -lavutil -lswscale
srcdir = .
play : $(srcdir)/play.c
$(CC) -o $@ $^ $(CFLAGS) $(LIBS)
play2 : $(srcdir)/play2.c
$(CC) -o $@ $^ $(CFLAGS) $(LIBS)
-I:指定頭文件路徑
-L:指定庫文件路徑
-l(小寫的L):指定庫名(lib開頭,.so結尾,-l後的就是庫名,例如libavformat.so。寫作:-lavformat)