ffmpegmac編譯
❶ 如何讓FFmpeg在iOS上完美編譯
編譯mac上基於ffmepg的軟體需要先下載兩個程序:iFrameExractor和ffmpeg編譯步驟:1、在終端下:cd/iFrameExtractor/ffmpeg建議開始就執行sudo-s(獲取許可權命令)2、在終端下輸入./configure--prefix=/iFrameExtractor/ffmpeg--libdir=iFrameExtractor/ffmpeg/lib--enable-gpl--enable-static--disable-shared--enable-swscale--enable-zlib--enable-bzlib--disable-ffmpeg--disable-ffplay--disable-ffserver--enable-pthreads3、執行make這里會有一堆的編譯情況。註:最好先升級CommandLineTools,避免編譯錯誤4、執行makeinstall。(執行完後到iFrameExtractor/ffmpeg/lib文件上去看看)出現個.a文件5、用xcode打開iFrameExractor工程,確認HeaderSearchPaths里有:"$(SRCROOT)/ffmpeg"路徑。$(SRCROOT)表示工程路徑。同時可以看到iFrameExractor工程下ffmpeg文件下的.a文件都不是紅色的了。6、真機上編譯(模擬器上i386,真機上是arm的,真機還分arm6和arm7以下是針對arm7的/configure--disable-doc--disable-ffmpeg--disable-ffplay--disable-ffserver--enable-cross-compile--arch=arm--target-os=darwin--cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc--as='gas-preprocessor/gas-preprocessor.pl/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc'--sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk--cpu=cortex-a8--extra-cflags='-archarmv7'--extra-ldflags='-archarmv7-isysroot/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk'--enable-pic7、執行make和makeinstall就有上面的幾個.a文件,至此編譯結束。
❷ ios 怎麼配置編譯ffmpeg
一、系統環境
MAC OS X Mountain Lion 10.8.3、 XCode 5.1
二、編譯FFMpeg
1、下載ffmpeg2.2.5版本代碼,並解壓。
2、下載並解壓gas-preprocessor.pl (附件中有,zip格式,因網易博客不能上傳zip後綴的文件,故加了個.rar)
在終端中使用cp命令將它復制到 /usr/sbin/目錄,並賦予可執行許可權。
sudo cp -f gas-preprocessor/gas-preprocessor.pl /usr/sbin/chmod +x /usr/sbin/gas-preprocessor.pl
3、在ffmpeg目錄下創建一個config.sh腳本
#!/bin/bash
SDKVERSION="7.1"
ARCHS="armv7 armv7s i386"
DEVELOPER=`xcode-select -print-path`
cd "`dirname "$0"`"
REPOROOT=$(pwd)
# where we will store intermediary builds
INTERDIR="${REPOROOT}/built"
mkdir -p $INTERDIR
########################################
# Exit the script if an error happens
for ARCH in ${ARCHS}
do
if [ "${ARCH}" == "i386" ];
then
PLATFORM="iPhoneSimulator"
EXTRA_CONFIG="--arch=i386 --disable-asm --enable-cross-compile --target-os=darwin --cpu=i386"
EXTRA_CFLAGS="-arch i386"
EXTRA_LDFLAGS="-I${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDKVERSION}.sdk/usr/lib"
else
PLATFORM="iPhoneOS"
EXTRA_CONFIG="--arch=arm --target-os=darwin --enable-cross-compile --cpu=cortex-a9 --disable-armv5te"
EXTRA_CFLAGS="-w -arch ${ARCH}"
fi
mkdir -p "${INTERDIR}/${ARCH}"
./configure --prefix="${INTERDIR}/${ARCH}"
--disable-neon
--disable-armv6
--disable-armv6t2
--disable-ffmpeg
--disable-ffplay
--disable-ffprobe
--disable-ffserver
--disable-iconv
--disable-bzlib
--enable-avresample
--sysroot="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDKVERSION}.sdk"
--cc="${DEVELOPER}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang"
--as='/usr/local/bin/gas-preprocessor.pl'
--extra-cflags="${EXTRA_CFLAGS} -miphoneos-version-min=${SDKVERSION}"
--extra-ldflags="-arch ${ARCH} ${EXTRA_LDFLAGS} -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDKVERSION}.sdk -miphoneos-version-min=${SDKVERSION}" ${EXTRA_CONFIG}
--enable-pic
--extra-cxxflags="$CPPFLAGS -isysroot ${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDKVERSION}.sdk"
make && make install && make clean
done
mkdir -p "${INTERDIR}/universal/lib"
cd "${INTERDIR}/armv7/lib"
for file in *.a
do
cd ${INTERDIR}
xcrun -sdk iphoneos lipo -output universal/lib/$file -create -arch armv7 armv7/lib/$file -arch armv7s armv7s/lib/$file -arch i386 i386/lib/$file
echo "Universal $file created."
done
cp -r ${INTERDIR}/armv7/include ${INTERDIR}/universal/
echo "Done."
SDKVERSION 是XCode的版本,通過`xcode-select -print-path`來獲取XCode的安裝路徑,ARCHS是編譯的三種模式,接下來在終端中cd到ffmpeg目錄,./config.sh執行就可以編譯了。等到編譯完成後,在ffmpeg目錄下會多出一個built目錄,裡面分別是armv7 armv7s i386及三個合並的universal版本了。
❸ ffmpeg 編譯好的 怎麼用
FFmpeg在Windows系統下的編譯過程,分四步:
如下:
1. 配置編譯環境
2. 下載FFMPEG的代碼
3. 編譯,獲取FFMPEG庫(頭文件,lib,和DLL)
4. 在VC下配置,測試
1. 配置編譯環境
1)安裝MSys
下載文件:
bash-3.1-MSYS-1.0.11-snapshot.tar.bz2
msysCORE-1.0.11-20080826.tar.gz
解壓msysCORE-1.0.11-20080826.tar.gz,比如解壓到X:\msys(以下內容都使用該路徑描述,X為你安裝的盤符)。
解壓bash-3.1-MSYS-1.0.11-snapshot.tar.bz2,產生一個名為bash-3.1的目錄,在該目錄下有一個子目錄名為bin,其他的目錄不需要關心。復制bin目錄中的所有文件到D:\msys\bin,提示是否要覆蓋sh.exe的時候,選擇是。
到「D:\msys\postinstall」目錄下執行pi.bat,在出現的提示中輸入n回車後(這個不搞錯了),按任意鍵退出即可。
2)安裝MinGW
❹ 如何在MAC下編譯出32位的ffmpeg庫
你的系統應該是64位的,但是如果你的XCode也是64位的就有可能出錯,XCode3.2以後的版本都是64位的,想編譯成32位的,試試用XCode3.0
❺ 為什麼ffmpeg只有windows和macox下的庫沒有linux的庫
那隻有那個和下側庫沒有那個的酷,我覺得這個沒有可能,還是因為廠家的問題吧,廠家沒有給你完就都放就沒有唄,你可以全的用不了那隻有那個和下側庫沒有那個的酷,我覺得這個沒有可能,還是因為廠家的問題吧,廠家沒有給你完就都放就沒有唄,你可以全的用
❻ ios 怎麼配置編譯ffmpeg
IOS上編譯ffmpeg需要先下載兩個程序:iFrameExractor和ffmpeg
編譯步驟:
1、在終端下: cd /iFrameExtractor/ffmpeg 建議開始就執行 sudo -s (獲取許可權命令)
2、在終端下輸入 ./configure --prefix=/iFrameExtractor/ffmpeg --libdir=iFrameExtractor/ffmpeg/lib --enable-gpl --enable-static --disable-shared --enable-swscale --enable-zlib --enable-bzlib --disable-ffmpeg --disable-ffplay --disable-ffserver --enable-pthreads
3、執行make 這里會有一堆的編譯情況。
註:最好先升級Command Line Tools,避免編譯錯誤
4、執行make install。 (執行完後 到iFrameExtractor/ffmpeg/lib文件上去看看)
出現 libavcodec libavdevice libavformat libavutil libswscale5個.a文件
5、用xcode 打開iFrameExractor工程,確認Header Search Paths里有:"$(SRCROOT)/ffmpeg"路徑。 $(SRCROOT)表示工程路徑。同時可以看到iFrameExractor工程下ffmpeg文件下的.a文件都不是紅色的了。
6、真機上編譯(模擬器上i386,真機上是arm的,真機還分arm6 和arm7 )
以下是針對arm7的
/configure --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffserver --enable-cross-compile --arch=arm --target-os=darwin --cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc --as='gas-preprocessor/gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc' -- sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk --cpu=cortex-a8 --extra-cflags='-arch armv7' --extra-ldflags='-arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk' --enable-pic
7、執行 make 和make install 就有上面的幾個.a文件,至此編譯結束。
❼ Mac OS X 64位 編譯本地庫失敗,不知是否有兄弟有成功編譯好的
首先在FFmpeg官網下載一個版本,在「FFmpeg Releases」一欄下選擇一個版本:
http://ffmpeg.org/download.html
然後,直接進行解壓。打開OS X的Terminal,使用cd命令進入該項目目錄。
如果你的OS X使用了最新的XCode 4.3.x或更新版本,那麼所有編譯工具均以沙盒狀態呈現,即沒有注冊到系統環境,因此不能直接通過命令行進行編譯。此時需要進入
https://developer.apple.com/devcenter/mac/index.action
即Mac開發者主頁。使用開發者帳號登陸(即便沒有支付過99$成為iDP或mDP都沒有關系),然後找到「Additional Downloads」一覽,點擊「View all downloads」。最後選擇最新版本的「Command Line Tools for XCode」進行下載。
下載完後直接安裝即可。
然後可以使用命令行進行編譯。由於Apple現在已經棄用老陳的GCC而使用更為先進的LLVM CLang,因此我們可以直接使用CLang進行編譯。我們可以先用命令——clang --version
來查看clang編譯器的版本信息,並確定其有效性。
隨後,我們輸入命令——./configure --cc=clang --disable-asm
這里使用--cc選項來選擇編譯器使用clang;而--disable-asm用來禁止所有牽涉到匯編文件的匯編,因為Apple的LLVM自帶的匯編器可能與GCC的默認風格有些不同。
成功後,我們再輸入命令——make
最後再輸入命令——sudo make install
輸入登機密碼即可。
最後會生成一個ffmpeg可執行文件在當前工程目錄中。
❽ 如何在MAC上編譯FFMpeg-CSDN論壇
你的系統應該是64位的,但是如果你的XCode也是64位的就有可能出錯,XCode3.2以後的版本都是64位的,想編譯成32位的,試試用XCode3.0
❾ 為什麼ffmpeg只有windows和macox下的庫沒有linux的庫
linux下可以使用包管理工具或者編譯安裝
比如apt yum等
編譯安裝使用源碼
❿ MAC/iOS利用FFmpeg解析音視頻數據流
利用FFmpeg解析音視頻流,音視頻流可以來自一個標準的RTMP的URL或者是一個文件. 通過解析得到音視頻流,進一步就可以解碼, 然後視頻渲染在屏幕上,音頻通過揚聲器輸出.
利用FFmpeg框架中libavformat模塊可以通過函數 av_read_frame 解析出音視頻流的音視頻數據,如果直接使用FFmpeg硬解,僅需要解析到AVPacket即可傳給解碼模塊使用,如果使用VideoToolbox中的硬解, 對於視頻數據,還需要獲取其NALU Header中的(vps)sps, pps以便後續使用.
使用流程
FFmpeg parse流程
下面的鏈接中包含搭建iOS需要的FFmpeg環境的詳細步驟,需要的可以提前閱讀.
iOS手動編譯並搭建FFmpeg
導入FFmpeg框架後,首先需要將用到FFmpeg的文件改名為.mm, 因為涉及C,C++混編,所以需要更改文件名
然後在頭文件中導入FFmpeg頭文件.
注意: FFmpeg是一個廣為流傳的框架,其結構復雜,一般導入都按照如上格式,以文件夾名為根目錄進行導入,具體設置,請參考上文鏈接.
2.1. 注冊FFmpeg
一般在程序中的main函數或是主程序啟動的代理方法 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 中初始化FFmpeg,執行一次即可.
2.2. 利用視頻文件生成格式上下文對象
C++音視頻開發學習資料 :點擊領取 音視頻開發(資料文檔+視頻教程+面試題)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)
2.3. 獲取Audio / Video流的索引值.
通過遍歷format context對象可以從 nb_streams 數組中找到音頻或視頻流索引,以便後續使用
2.4. 是否支持音視頻流
目前視頻僅支持H264, H265編碼的格式.實際過程中,解碼得到視頻的旋轉角度可能是不同的,以及不同機型可以支持的解碼文件格式也是不同的,所以可以用這個方法手動過濾一些不支持的情況.具體請下載代碼觀看,這里僅列出實戰中測試出支持的列表.
音頻本例中僅支持AAC格式.其他格式可根據需求自行更改.
使用AVPacket這個結構體來存儲壓縮數據.對於視頻而言, 它通常包含一個壓縮幀,對音頻而言,可能包含多個壓縮幀,該結構體類型通過 av_malloc() 函數分配內存,通過 av_packet_ref() 函數拷貝,通過 av_packet_unref(). 函數釋放內存.
解析數據
int av_read_frame(AVFormatContext *s, AVPacket *pkt); : 此函數返回存儲在文件中的內容,並且不驗證解碼器的有效幀是什麼。它會將存儲在文件中的內容分成幀,並為每次調用返回一個。它不會在有效幀之間省略無效數據,以便為解碼器提供解碼時可能的最大信息。
獲取sps, pps等NALU Header信息
通過調用av_bitstream_filter_filter可以從碼流中過濾得到sps, pps等NALU Header信息.
av_bitstream_filter_init: 通過給定的比特流過濾器名詞創建並初始化一個比特流過濾器上下文.
av_bitstream_filter_filter: 此函數通過過濾buf參數中的數據,將過濾後的數據放在poutbuf參數中.輸出的buffer必須被調用者釋放.
此函數使用buf_size大小過濾緩沖區buf,並將過濾後的緩沖區放在poutbuf指向的緩沖區中。
注意: 下面使用new_packet是為了解決av_bitstream_filter_filter會產生內存泄漏的問題.每次使用完後將用new_packet釋放即可.
可以根據自己的需求自定義時間戳生成規則.這里使用當前系統時間戳加上數據包中的自帶的pts/dts生成了時間戳.
本例將獲取到的數據放在自定義的結構體中,然後通過block回調傳給方法的調用者,調用者可以在回調函數中處理parse到的視頻數據.
獲取parse到的音頻數據
因為我們已經將packet中的關鍵數據拷貝到自定義的結構體中,所以使用完後需要釋放packet.
parse完成後釋放相關資源
C++音視頻開發學習資料 :點擊領取 音視頻開發(資料文檔+視頻教程+面試題)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)
注意: 如果使用FFmpeg硬解,則僅僅需要獲取到AVPacket數據結構即可.不需要再將數據封裝到自定義的結構體中