介紹下在Qt下直接調(diào)用官方下載的動(dòng)態(tài)庫(kù)以及自己編譯成靜態(tài)庫(kù)等秀又,另外關(guān)于ffmpeg怎么用算LGPL誰(shuí)知道的話求告知
直接使用動(dòng)態(tài)庫(kù)
官網(wǎng)下載
如果沒(méi)有特殊要求涮帘,可以直接在ffmpeg官網(wǎng)下載編譯好的庫(kù)文件直接使用拼苍,自己編譯還是相當(dāng)麻煩的QAQ。選擇自己操作系統(tǒng)相關(guān)的版本调缨,下載shared和dev兩個(gè)壓縮包:
Static包含的是靜態(tài)編譯的ffmpeg.exe疮鲫,Shared包含的是ffmpeg的動(dòng)態(tài)庫(kù)及ffmpeg.exe,Dev中包含的是加入到工程中的lib(使用的時(shí)候還是要添加動(dòng)態(tài)庫(kù)才能運(yùn)行)。
添加到工程
在pro文件中加上對(duì)應(yīng)的libs弦叶,添加lib的時(shí)候不用寫(xiě)后綴名字:
-L$$SDKs/ffmpeg/lib -L$$SDKs/ffmpeg/bin -lavutil -lavformat -lavcodec -lswscale -lavdevice -lswresample
在要使用的文件中引用ffmpeg相關(guān)的頭文件:
可能的問(wèn)題
- 最新的ffmpeg有把libfmx (使用intel的qsv硬編硬解俊犯,下面有說(shuō)明) 編譯進(jìn)去,但是好像沒(méi)有fmx的頭文件伤哺,會(huì)報(bào)錯(cuò)燕侠。可以去這里下下來(lái)立莉,放到ffmpeg的include目錄下绢彤。
- 編譯沒(méi)問(wèn)題記得要把dev中的dll拷貝到生成的exe目錄下,否則運(yùn)行不起來(lái)蜓耻。
- 相關(guān)工程可以參考gayhub的demo茫舶。
自定義編譯
官網(wǎng)下載的ffmpeg動(dòng)態(tài)庫(kù)編譯的configure里有一條是--enable gpl
,我們用的時(shí)候是直接用的動(dòng)態(tài)庫(kù)刹淌,我也不確定這算不算LGPL饶氏,實(shí)在沒(méi)轍的話只能自己編譯了讥耗。
IDE安裝
本人安裝的是Qt5.7.0的mingw32bit,下載地址戳我
msys2安裝
因?yàn)橐幾g32bit的嚷往,下載選擇msys2的32位版本葛账,下載地址戳我
安裝完成后找到msys2安裝目錄下的msys2_shell.cmd柠衅,將其中一行的注釋去掉皮仁,使 MSYS2 的環(huán)境變量繼承自系統(tǒng):
打開(kāi)Qt的命令行工具,將目錄切換到msys2的安裝目錄下菲宴,輸入:msys2_shell.cmd -mingw32
msys2就打開(kāi)了贷祈,下一步是安裝相關(guān)的軟件包。
軟件包安裝
在msys2中的包管理工具是pacman喝峦,安裝命令如下:
pacman -S make
pacman -S pkg-config
pacman -S nasm
pacman -S git
pacman -S automake autoconf perl libtool
軟編(編譯libx264势誊,這貨是GPL的哈)
先下載源碼,git clone http://git.videolan.org/git/x264.git
,切換到x264倉(cāng)庫(kù)目錄下:
./configure \
--prefix=/usr/local \
--enable-shared \
--disable-cli
(loading...)
./make -j$(nproc)
(loading...)
make install
(loading...)
硬編intel qsv準(zhǔn)備
需要libmfx庫(kù) 谣蠢,下載源碼粟耻,git clone https://github.com/lu-zero/mfx_dispatch.git
,切換到對(duì)應(yīng)目錄下:
autoreconf -i
(loading...)
./configure --prefix=/usr/local
(loading...)
make -j$(nproc)
(loading...)
make install
(loading...)
硬編Nvidia nvenc準(zhǔn)備
添加nvidia codec頭文件,git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
,切換到目錄下:
make
make install
NVidia Video Codec SDK下載眉踱,下載地址戳我, 解壓后把里面的NvCodec下的庫(kù)文件拷貝到/usr/local/lib挤忙、頭文件拷貝到/usr/local/include下
編譯ffmpeg
下載ffmpeg源碼,git clone https://git.ffmpeg.org/ffmpeg.git
,切換到對(duì)應(yīng)目錄下:
PKG_CONFIG_PATH="/usr/local/lib/pkgconfig"
./configure \
--prefix=/usr/local/ffmpeg \
--disable-static \
--enable-shared \
--enable-gpl \
--target-os=mingw32 \
--enable-libx264 \
--enable-libmfx \
--enable-encoder=h264_qsv \
--enable-decoder=h264_qsv \
--enable-nvenc \
--enable-cuda \
--enable-cuvid \
--enable-nonfree \
--extra-cflags=-I/usr/local/include \
--extra-ldflags=-L/usr/local/lib
(loading...)
make -j$(nproc)
(loading...)
make install
(loading...)
編譯好后的ffmpeg在/usr/local/ffmpeg谈喳,就是configure第一行指定的位置册烈。
最后貼下各種文件的目錄:
可能的問(wèn)題
- 測(cè)試編譯,沒(méi)有把--enable gpl去掉婿禽,不確定去掉能不能編譯哈赏僧,畢竟....x264是GPL的玩讳。
- 編譯好后的ffmpeg可以在Qt下正常使用qsv姓迅、nvenc編碼甲馋,解碼暫時(shí)沒(méi)用到不確定倦始。
- 編譯出來(lái)的ffmpeg.exe沒(méi)法雙擊運(yùn)行霹俺,提示無(wú)法定位程序輸入點(diǎn)__gxx_personality_v0于動(dòng)態(tài)鏈接庫(kù)avcodec-58.dll上稳其。
- Nvidia的cuda硬解在mingw下貌似搞不了......相關(guān)問(wèn)題