环境介绍
win10 + wsl(ubuntu系统)
简单编译
./configure \
--prefix=/usr/local/ffmpeg \
--disable-x86asm \
--disable-stripping
make -j 8
make install
make examples
和大部分开源软件类似,ffmpeg的编译命令很简单。
--disable-x86asm是因为执行下面的命令报错
# ./configure
nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.
--disable-stripping可以保留so和exe中的符号表方便看堆栈和调试等,但同时会增加文件大小。
执行上面的命令完成后,就编译安装完成了。
doc/examples中的简单例子
make examples可以编译doc/examples中的例子程序。
输出ffmpeg的log
以doc/examples/avio_reading.c一个解析不同视频封装格式的程序为例,添加
int main(int argc, char *argv[])
{
...
av_log_set_level(AV_LOG_TRACE); // 设置详细的log级别
av_log_set_callback(&callback_log); // 设置log回调函数
...
}
// 自定义的log回调函数
static void callback_log(void*avcl, int level, const char*fmt, va_list vl)
{
char infos[2048];
vsnprintf((char *) infos, 2048, fmt, vl);
#if defined(__ANDROID__)
__android_log_print(gLevel[level],tag,"<%p,%s,%s,%d>%s",pThis,file,fun,line,infos);
#else
printf("[ffmpeg] <%p> %s\n",avcl, infos);
#endif
}
执行即可看到log输出
# ./avio_reading /worker/video/c.mp4 |head -10
ptr:0x7f24f798a000 size:89112
[ffmpeg] <(nil)> <format.c av_probe_input_format3 167> Probing mov,mp4,m4a,3gp,3g2,mj2 score:100 size:2048
[ffmpeg] <(nil)> <format.c av_probe_input_format3 167> Probing mp3 score:1 size:2048
[ffmpeg] <0x7fffe2aff040> <format.c av_probe_input_buffer2 290> Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100
[ffmpeg] <0x7fffe2aff040> <mov.c mov_read_default 6839> type:'ftyp' parent:'root' sz: 32 8 9223372036854775807
[ffmpeg] <0x7fffe2aff040> <mov.c mov_read_ftyp 1113> ISO: File Type Major Brand: isom
root@PF1YTXHH-ZTB:/worker/opensourcecode/ffmpeg-4.2.2/doc/examples# ./avio_reading /worker/video/c.mp4 |head -20
ptr:0x7f01ae6ca000 size:89112
[ffmpeg] <(nil)> <format.c av_probe_input_format3 167> Probing mov,mp4,m4a,3gp,3g2,mj2 score:100 size:2048
[ffmpeg] <(nil)> <format.c av_probe_input_format3 167> Probing mp3 score:1 size:2048
[ffmpeg] <0x7ffff1ed5040> <format.c av_probe_input_buffer2 290> Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100
[ffmpeg] <0x7ffff1ed5040> <mov.c mov_read_default 6839> type:'ftyp' parent:'root' sz: 32 8 9223372036854775807
[ffmpeg] <0x7ffff1ed5040> <mov.c mov_read_ftyp 1113> ISO: File Type Major Brand: isom
[ffmpeg] <0x7ffff1ed5040> <mov.c mov_read_default 6839> type:'free' parent:'root' sz: 8 40 9223372036854775807
[ffmpeg] <0x7ffff1ed5040> <mov.c mov_read_default 6839> type:'mdat' parent:'root' sz: 86493 48 9223372036854775807
ffmpeg默认不输出文件名、函数名、行号的,需要修改log模块,下面给出修改的文件,具体的修改方法再次不做叙述。
./libavutil/log.h
./libavutil/log.c