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")   问题解决。

你可能感兴趣的:(webrtc,C++)