天天看點

Linux下FFmpeg安裝配置好後,使用中的一些問題。

最近項目需要用到FFmpeg,于是按照網上的教程配置了一下,配置成功後在編譯時出現了一些問題,這裡記錄一下。

這是安裝成功後的情況

Linux下FFmpeg安裝配置好後,使用中的一些問題。

這個界面顯示安裝成功,并且環境也配置成功。在代碼中使用時出現一些問題。我的代碼中包含頭檔案

#include <libavutil/opt.h>
#include <libavcodec/avcodec.h>
#include <libavutil/imgutils.h>
           

1. 編譯時出現錯誤:

fatal error:libavutil/opt.h:沒有那個檔案或目錄
compilation terminated.
fatal error:libavcodec/avcodec.h:沒有那個檔案或目錄
compilation terminated.
fatal error:libavutil/imgutils.h:沒有那個檔案或目錄
compilation terminated.
           

解決方法:

在編譯時指明頭檔案的路徑/usr/local/ffmpeg/include。我原本的指令是:

gcc test.c -o test
           

更改指令為:

gcc test.c -o test -I /usr/local/ffmpeg/include
           

編譯成功。具體路徑按照個人安裝時設定而定。

2. 編譯時出現錯誤:

acc.c:(.text+0x1e3):對‘avcodec_register_all’未定義的引用
acc.c:(.text+0x1ed):對‘avcodec_alloc_context3’未定義的引用
acc.c:(.text+0x278):對‘av_get_channel_layout_nb_channels’未定義的引用
acc.c:(.text+0x2a0):對‘avcodec_find_encoder_by_name’未定義的引用
acc.c:(.text+0x2da):對‘avcodec_open2’未定義的引用
acc.c:(.text+0x2f7):對‘av_frame_alloc’未定義的引用
acc.c:(.text+0x350):對‘av_samples_get_buffer_size’未定義的引用
acc.c:(.text+0x366):對‘av_malloc’未定義的引用
acc.c:(.text+0x3a3):對‘avcodec_fill_audio_frame’未定義的引用
acc.c:(.text+0x3af):對‘av_init_packet’未定義的引用
acc.c:(.text+0x436):對‘avcodec_encode_audio2’未定義的引用
acc.c:(.text+0x46b):對‘av_free_packet’未定義的引用
           

解決辦法:

雖然指明了路徑,但是頭檔案之間存在依賴關系,程式編譯沒有指明頭檔案的調用順序,編譯時添加:

-L /usr/local/ffmpeg/lib -lavformat -lavcodec -lswresample -lavutil
           

3. 安裝好FFmpeg後我需要用到fdk-aac,是以得安裝fdk-aac後重新安裝一下FFmpeg,在進行FFmpeg的make步驟時出現錯誤

libavcodec/libfdk-aacenc.o libavcodec/libfdk-aacenc.c: In function ‘aac_encode_init’: libavcodec/libfdk-aacenc.c:293:34: error: ‘AACENC_InfoStruct {aka struct }’ has no member named ‘encoderDelay’ 
avctx->initial_padding = info.encoderDelay;
           

這個錯誤是因為安裝的fdk-aac版本太新了,可以安裝低一點的版本。我是安裝了fdk-aac-2.0.0後出現了錯誤,換到fdk-aac-0.1.6後成功。

fdk-aac下載下傳連結:https://sourceforge.net/projects/opencore-amr/files/fdk-aac/

繼續閱讀