ffmpeg編譯源碼
① ffmpeg源碼是c還是c++
是c語言開發的。教你一種辦法,查看庫函數等的源碼方法。
網路進入github網站,搜索ffmpeg,找到源碼。查看文件類型。
如圖
就知道是c語言開發的了
② Ubuntu 環境 編譯 ffmpeg移植android 的問題!
到FFmpeg官方網站http://www.ffmpeg.org/上去下載源代碼,這里下載的源代碼是最權威的。進入官網之後,選擇」Download」進入下載頁面,截止2014年3月28日止,最新的發布的穩定版本為FFmpeg2.2,代號」Muybridge」。選擇該下方的」Downloadgzip tarball」進行下載,下載後的文件名為ffmpeg-2.2.tar.gz,大約8.3M。
第二步:在linux環境下編譯FFmpeg
在Windows平台可以採用VMplayer虛擬機上安裝ubuntu的方式,本人也是採用這種方式。
本文以/home/dennis為根目錄進行操作和說明:
將ffmpeg-2.2.tar.gz拷貝至根目錄,然後執行如下解壓命令將其解壓:
$tar zxf ffmpeg-2.2.tar.gz
解壓後將得到/home/dennis/ffmpeg-2.2目錄。
③ 請教ffmpeg在centeOS 64位下的編譯問題
軟體安裝
(1). MinGW+Msys安裝
下載MSYS,解壓到E:/ffmpeg64/msys目錄。
下載MinGW-w64,解到E:/ffmpeg64/msys/mingw64目錄。
啟動msys.bat,打開類似於Linux的終端,並導入mingw64的環境變數。
echo 'export PATH=.:/local/bin:/mingw64/bin:/bin' > .profile
source .profile
(2). SDL安裝
下載SDL1.2.14,解壓到E:/ffmpeg64/SDL-1.2.14目錄。
進入SDL-1.2.14目錄,依次執行:
./configure --host=x86_64-w64-mingw32
make
make install
編譯過程中,出現如下錯誤:
④ 如何將FFmpeg源碼編譯一個so庫
我們從上篇文章 FFmpeg編譯 知道,正常打出來的有5個so包,當然有它的好處是按需引入。但是如果都需要,那是不是覺得很多呢?那可不可以打出一個so呢?答案是當然可以,下面以armv7-a平台為例,腳本如下。
其實在上篇 FFmpeg編譯 中腳本的基礎上添加如下即可打出一個so包:
編譯完成大概需要幾分鍾。
android/armv7-a下生成一個ffmpeg.so
libffmpeg.so及相應的同文件到工程里就好
⑤ 怎麼修改ffmpeg裡面的源碼,讓它實現流共享
while (1) {
AVPacket pkt;
// 不知道pkt是否完整
ret = av_read_frame(f->ctx, &pkt);
if (ret == AVERROR(EAGAIN)) {
av_usleep(10000);
continue;
}
if (ret < 0) {
av_thread_message_queue_set_err_recv(f->in_thread_queue, ret);
break;
}
}
FFMpeg不提供介面,那麼就只有修改FFMpeg源碼,瀏覽FFMpeg源碼一天後,對外的介面只需要在AVPacket結構體裡面增加一個判斷包完整性的標志變數,修改源碼後的介面調用如下:
while (1) {
AVPacket pkt;
ret = av_read_frame(f->ctx, &pkt);
if (pkt.nLostPackets) {
// Do something.
} else {
// Do something
}
}
⑥ FFmpeg之Linux下編譯與調試
下面的一切都是在 root 模式下進行的,可以不再 root 模式下進行
基礎環境就是編譯代碼的基礎庫,Ubuntu聯網安裝軟體很簡單,一個語句即可搞定,這里列出語句如下:
依賴庫分兩方面,參考以下網站列出的依賴庫信息,本文選擇的版本均參考於此網頁: FFmpeg依賴庫信息
首先創建 FFmpeg 代碼目錄,所有的源代碼放在這個目錄下
FFmpeg 編譯之後,即可使用。編譯生成的可執行程序在 ~/bin 目錄下
註:上面的 ./configure 配置編譯後並不能進行調試,需要如下配置.
剛才的工程可以運行,但不能debug。解決此問題,首先認定一點,生成的可執行程序中,ffmpeg 不包含調試信息,調試信息在 ffmpeg_g 中,debug 要選擇 ffmpeg_g。
另外,./config選項也是確定包含調試信息的核心,需要在config中添加:
採用以下命令重新config:
一些注意事項; 在使用 ffplay 播放生成 h264 格式的視頻時,播放速度會加快,解決方式:不要使用 FFmpeg 轉碼生成純 h264 格式的視頻,要使用一種容器包含 h264 視頻,即生成一種音視頻流格式,也就是不要生成純粹的 h264 碼流,而是生成諸如 mkv 等格式的文件。
⑦ iOS-FFmpeg實現簡單播放器(編譯fak-aac+x264+sdl)
本文介紹自己編譯sdl2,fdk-aac,x264,ffmpeg源碼集成到Xcode工程中,其中fdk-aac,x264嵌套編譯進ffmpeg中,並使用sdl播放音頻,OPenGLES渲染視頻實現簡單播放器
若報錯 fdk-aac-2.0.2/configure: No such file or directory ,則用我網盤襪吵磨中的解壓文件,裡麵包含了configure執行文件,執行 ./告斗build.sh 後,
修改build-ffmpeg.sh文件為最新的版本4.3.2,修改CONFIGURE_FLAGS值中增加禁止生成可執行文件ffmpeg,ffplay,ffprobe,fdk-aac需要增加--enable-nonfree選項,fdk-aac和x264文件絕對路徑要一致
將編譯好的sdl,fdk-aac,x264,ffmpeg頭文件和庫文件(include和lib文件夾)
導入Xcode工程中並設置Header Search Path為
導入依賴的庫AVFoudation.framework,CoreMedia.framework,VideoToolBox.framework,AudioToolBox.framework,lbz.tbd,libbz2.tbd,libiconv.tbd
使用ffmpeg庫獲取ffmpeg版本號
集成後可使用ffmpeg進行軟解碼,sdl播放音頻碰源,OpenGLES繪制視頻實現一個簡單播放器
開啟子線程讀取到MP4文件後,從MP4文件中解封裝出h264文件和aac文件分別解碼為YUV原始視頻幀和pcm原始音頻,將解封裝出來的h264文件放入_vPktList,aac文件放入_aPktList
SDL通過回調的方式開啟子線程播放音頻
配置參數可精簡和優化ffmpeg,在ffmpeg目錄中,終端執行./configure --help列出全部參數
⑧ 如何使用ndk編譯ffmpeg靜態庫
如何使用ndk為ffmpeg編譯rtmp+polarssl靜態庫?這個問題花了我整整一天時間。其中遇到很多小問題,這里記錄一下,方便自己也方便其他人。
1、編譯polarssl,查看其Readme文件即可,不需要configure,只需要make時帶上必要的參數即可,不過要記得在每一次執行make命令時都帶上CC的參數(指向你的arm gcc),因為我試過在make install時沒有帶上CC的參數,雖然能編譯出polarssl但是未能正確被rtmp引用到。
2、因為前面我用的polarssl是當前最新(1.3.7)版本,而librtmp使用的好像是polarssl1.0.0以下版本的api,所以需要修改rtmp部分源碼,讓其調用新版polarssl的api,這里的修改可以參照《Migrating from PolarSSL-1.2 to the PolarSSL 1.3 branch》和《[rtmpmp] branch master updated. a312ac7 Fix compat with PolarSSL >= 1.1.0》。
3、出現 undefined reference to `havege_random』錯誤,這里是因為polarssl默認關閉了havege模塊,需要你手動開啟,主要就是修改include/polarssl/config.h,去掉POLARSSL_HAVEGE_C前的注釋,也就是要定義POLARSSL_HAVEGE_C,如下:
#define POLARSSL_HAVEGE_C
4、在編譯出上面兩個庫之後,可以開始編譯ffmpeg(2.1.1版本)了,如果遇到下面的問題 check_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
ERROR: librtmp not found
這里有三種解決方法:
第一種,因為是網路上傳播最多的,算是比較簡便的方法,就是修改ffmpeg的configure,將以下一行:
enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
改為:
enabled librtmp && require librtmp librtmp/rtmp.h RTMP_Socket -lrtmp -lpolarssl -lz
或者直接注釋掉&& *** 部分,然後再自己加上librtmp的庫路徑也行
第二種,(比較推薦,因為解決了這個會順帶解決大部分找不到庫的錯誤!)因為這里使用了pkg-config工具查找庫,而這個工具ndk並沒有附帶提供,而出現check_pkg_config相關錯誤的話,只要稍加註意,會發現在使用configure配置ffmpeg的交叉編譯時,已經有相應的pkg-config不存在的警告了。我對這個工具不熟悉,所以我只是簡單地加上了一個軟鏈接到系統的pkg-config,如下:
ln -s /usr/bin/pkg-config /home/cidy0106/android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-pkg-config
這個時候重新configure的話可能會出現找不到polarssl庫的錯誤提示,需要修改一下librtmp安裝目錄里的librtmp.pc,把以下內容:
Libs: -L${libdir} -lrtmp -lz
改為:
Libs: -L${libdir} -lrtmp -lz -lpolarssl
至此,就可以正確編譯出ffmpeg了
轉載