webrtc添加對h264的支持-------------h264、ffmpeg mingw編譯

    之前使用動態編譯的方式編譯x264和ffmpeg,再將x264、ffmpe添加進入webrtc,x264作爲H264編碼器,ffmpeg作爲H264解碼器,都能成功使用,但是唯一讓我不爽的是,PC端外部應用使用這些動態庫的時候,居然要在運行目錄中添加很多之前編譯時所用到的外部動態庫,搞笑的是還需要mingw的一個動態依賴庫,所以嘗試使用靜態的方式編譯x264和ffmpeg。

    使用mingw編譯靜態x264庫,使用CC=cl ./configure --enable-static --prefix=C:\\MinGW\\msys\\1.0\\local   --extra-cflags="-DNO_PREFIX",成功編譯出靜態的x264庫文件和頭文件,如果命令行沒有CC=cl,那麼編譯出的x264庫文件是.a後綴的,就算是將.a文件改爲.lib文件,必然會報庫文件和編譯器衝突的問題,類似這種webrtc_h264.lib(base.o) : error LNK2019: 無法解析的外部符號 ___umoddi3,該符號在函數 _x264_reduce_fraction64 中被引用。

    靜態編譯ffmpeg, 靜態編譯CC=cl ./configure  --enable-static --disable-shared  --disable-debug --disable-network --disable-muxers  --disable-ff
play --disable-filters --disable-devices --disable-protocols --disable-demuxers --disable-muxers --disable-encoders --d
isable-decoders --disable-parsers --disable-bsfs --enable-decoder=h264 --disable-avfilter --disable-swresample --disabl
e-zlib --disable-bzlib --disable-ffmpeg --disable-hwaccels --disable-avdevice --disable-armv5te --disable-armv6 --disab
le-armv6t2 --disable-mipsfpu --disable-mipsdsp --disable-audiotoolbox --disable-securetransport  --disable-xlib --disab
le-mipsdspr2 --disable-gpl --disable-ffprobe  --prefix=C:\\MinGW\\msys\\1.0\\local\\win32\\install

然後再make & make install

這編譯成功後,將會編譯出.a後綴的庫文件,vs2013是能夠識別這些.a文件的,其實.a文件和.lib文件是不同平臺下的靜態庫文件的不同格式。

---------------------------------------------------------------------------------

增加一個mingw編譯ffmpeg出現的錯誤,  CC=cl ./configure   --disable-static --enable-shared --disable-debug --disable-network --disable-muxers  --disable-ffplay --disable-filters --disable-devices --disable-protocols --disable-demuxers --disable-muxers --disable-encoders --disable-decoders --disable-parsers --disable-bsfs --enable-decoder=h264 --disable-avfilter --disable-swresample --disable-zlib --disable-bzlib --disable-ffmpeg --disable-hwaccels --disable-avdevice --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-mipsfpu --disable-mipsdsp --disable-audiotoolbox --disable-securetransport  --disable-xlib --disable-mipsdspr2 --disable-gpl --disable-ffprobe —-prefix=C:\\MinGW\\msys\\1.0\\home\\Administrator\\ffmpeg-4.0\\ffmpegOutput  —-toolchain=msvc --extra-ldflags=-LIBPATH:C:\\MinGW\\msys\\1.0\\home\\Administrator\\ffmpeg-4.0\\x264\\x264Output\\lib —-extra-cflags=-IC:\\MinGW\\msys\\1.0\\home\\Administrator\\ffmpeg-4.0\\x264\\x264Output\\include

上述運行後,make後提示錯誤,dxva2.o : error LNK2019: 無法解析的外部符號 __imp__CoTaskMemFree@4,該符號在函數 _dxva2_create_decoder。通過錯誤查找到dxva2.c文件中CoTaskMemFree不被識別,查看了下發現頭文件都包含了,這種情況只能是依賴庫沒有包含進來,於是在dxva2.c文件前面引入相關的依賴庫,#pragma comment(lib,"ole32.lib") #pragma comment(lib,"User32.lib")   問題解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章