ffmpeg学习---8.ubuntu14.04源码编译ffmpeg-2.1
来源:互联网 发布:触摸屏餐饮软件源码 编辑:程序博客网 时间:2024/05/22 17:18
一. 编译
1. 下载
http://www.ffmpeg.org/ 下载ffmpeg的源码,我这儿下载的是ffmpeg-2.1.7.tar.bz2
2. 简单编译
解压后,进入ffmpeg的源码目录
3. 生成ffplay
之所以默认编译没有生成ffplay的原因是系统中没有安装SDL, ffplay是依赖SDL显示的
安装完SDL库之后,重新按照步骤2编译一遍就可以生成ffplay了
4.生成动态库
按照上述2编译出来的是静态库,要想生成动态库,需要在configure时加入--enable-shared
4.1 如果出现如下错误
解决方法是:4.2 编译ffmpeg自带的Demo
4.2.1 在example中加入自己的程序
在ffmpeg-3.0.1中上述Demo己转到doc目录下
a. 在doc/Makefile 中添加 DOC_EXAMPLES-yes += mytest
b. 在doc/examples/Makefile中添加 EXAMPLES += mytest
c. 在doc/examples/mytest.c中添加 mytest.c文件
d. 在ffmpeg的源码目录下编译 make examples即可
4.3 不编译ffmpeg ffprobe ffserver
二.开发
1. 在ffmpeg库中加入打印
在libavutil/avutil.h或者libavutil/log.h中加入
2. demo
fftest.c
Makefile
这样用make run 就可以运行了
fftest.rar (下载后改名为fftest.tar.gz)
三.调试
3.1 加入dump_stack函数
3.2 不strip
在libray.mak中
L32 -$(if $(ASMSTRIPFLAGS), $(STRIP) $(ASMSTRIPFLAGS) $@) 注掉
附1.git管理
然后再configure make
1. 下载
http://www.ffmpeg.org/ 下载ffmpeg的源码,我这儿下载的是ffmpeg-2.1.7.tar.bz2
2. 简单编译
解压后,进入ffmpeg的源码目录
- cong@msi:/work/ffmpeg-2.1.7$ sudo apt-get install yasm //这儿需要先安装yasm,否则configure会报错
- cong@msi:/work/ffmpeg-2.1.7$ mkdir install //创建一个Install目录,存放编译好之后的东东
- cong@msi:/work/ffmpeg-2.1.7$ ./configure --prefix=./install //安装到install目录
- Creating config.mak, config.h, and doc/config.texi... //这儿说明configure成功,可以编译了
- cong@msi:/work/ffmpeg-2.1.7$ make -j16
之所以默认编译没有生成ffplay的原因是系统中没有安装SDL, ffplay是依赖SDL显示的
- cong@msi:/work/ffmpeg-2.1.7$ sudo apt-get install libsdl1.2-dev
4.生成动态库
按照上述2编译出来的是静态库,要想生成动态库,需要在configure时加入--enable-shared
- cong@msi:/work/ffmpeg-2.1.7$ sudo apt-get install yasm //这儿需要先安装yasm,否则configure会报错
- cong@msi:/work/ffmpeg-2.1.7$ mkdir install //创建一个Install目录,存放编译好之后的东东
- cong@msi:/work/ffmpeg-2.1.7$ ./configure --enable-shared --prefix=./install //安装到install目录
- Creating config.mak, config.h, and doc/config.texi... //这儿说明configure成功,可以编译了
- cong@msi:/work/ffmpeg-2.1.7$ make -j16
- /usr/bin/ld: libavcodec/mqc.o: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
- libavcodec/mqc.o: error adding symbols: Bad value
- collect2: error: ld returned 1 exit status
config.mak L75加入 -fPIC,然后重新编译- HOSTCFLAGS=-O3 -g -std=c99 -Wall -fPIC
- a. 要想编译example下的程序
- cong@msi:/work/ffmpeg/ffmpeg-2.7.2$ make examples //编译example
- cong@msi:/work/ffmpeg/ffmpeg-2.7.2$ make examplesclean //清除example
- b. 要想编译libavutils下的程序
- cong@msi:/work/ffmpeg/ffmpeg-2.7.2$ make testprogs //不仅只有libavutils下的
- 清除的话,直接touch吧,这些文件都是和ffmpeg共用的清了中间文件还得重新编译
在ffmpeg-3.0.1中上述Demo己转到doc目录下
a. 在doc/Makefile 中添加 DOC_EXAMPLES-yes += mytest
b. 在doc/examples/Makefile中添加 EXAMPLES += mytest
c. 在doc/examples/mytest.c中添加 mytest.c文件
d. 在ffmpeg的源码目录下编译 make examples即可
4.3 不编译ffmpeg ffprobe ffserver
- configuration: --prefix=./install --disable-ffmpeg --disable-ffprobe --disable-ffserver
二.开发
1. 在ffmpeg库中加入打印
在libavutil/avutil.h或者libavutil/log.h中加入
- 在./libavutil/log.h中
- #define dbmsg(fmt, args ...) printf("cong:%s:%s[%d]: "fmt"\n",__FILE__, __FUNCTION__, __LINE__,##args)
fftest.c
- #include <stdio.h>
- #include <libavformat/avformat.h>
- #include <libswscale/swscale.h>
- #define dbmsgc(fmt, args ...) printf("cong:%s[%d]: "fmt"\n", __FUNCTION__, __LINE__,##args)
- //#define dbmsg(fmt, args ...) printf("cong:%s:%s[%d]: "fmt"\n",__FILE__, __FUNCTION__, __LINE__,##args)
- int main(int argc, char **argv)
- {
- int i=0;
- AVFormatContext *pFormatCtx = NULL;
- avcodec_register_all();
- #if CONFIG_AVDEVICE
- avdevice_register_all();
- #endif
- avfilter_register_all();
- av_register_all();
- if(avformat_open_input(&pFormatCtx, argv[1], NULL, NULL)!=0)
- return -1; // Couldn't open file
- if(avformat_find_stream_info(pFormatCtx, NULL)<0)
- return -1; // Couldn't find stream inform
- av_dump_format(pFormatCtx,0, 0, 0);
- return 0;
- }
- FFMPEG=/work/ffmpeg-2.1.7/install
- CC=gcc
- CFLAGS=-g -I$(FFMPEG)/include
- LDFLAGS = -L$(FFMPEG)/lib/ -lswscale -lswresample -lavformat -lavdevice -lavcodec -lavutil -lavfilter -lm
- TARGETS=fftest
- all: $(TARGETS)
- fftest:fftest.c
- $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
- clean:
- rm -rf $(TARGETS)
- run:
- export LD_LIBRARY_PATH=/work//ffmpeg-2.1.7/install/lib/ \
- && ./fftest ~/Downloads/testapk/nvren.dts
fftest.rar (下载后改名为fftest.tar.gz)
三.调试
3.1 加入dump_stack函数
- ./libavutil/log.h
- #include <execinfo.h>
- void dump_stack(void);
- ./libavutil/log.c
- void dump_stack()
- {
- int i;
- int size = 64;
- void * array[64];
- int stack_num = backtrace(array, size);
- char ** stacktrace = backtrace_symbols(array, stack_num);
- for (i = 0; i < stack_num; ++i)
- {
- printf("%s\n", stacktrace[i]);
- }
- free(stacktrace);
- }
- 在./configure文件中
- 将3071行 LD_LIB='-L'改为
- 3071 LD_LIB='-l% -rdynamic'
在libray.mak中
L32 -$(if $(ASMSTRIPFLAGS), $(STRIP) $(ASMSTRIPFLAGS) $@) 注掉
附1.git管理
- cong@msi:/work/ffmpeg/ffmpeg-3.0.1$ vi .gitignore
- cong@msi:/work/ffmpeg/ffmpeg-3.0.1$ cat .gitignore
- *.o
- install
- .gitignore
- *.a
- *.d
- *.html
- *.3
- *.1
- *.pod
- *.texi
- *.pc
- .config
- .version
- config.asm
- config.fate
- config.h
- config.log
- config.mak
- doc/config.texi
- libavutil/avconfig.h
- libavutil/ffversion.h
- doc/fate.txt
- doc/print_options
- ffmpeg
- ffmpeg_g
- ffplay
- ffplay_g
- ffprobe
- ffprobe_g
- ffserver
- ffserver_g
- cong@msi:/work/ffmpeg/ffmpeg-3.0.1$ git init
- cong@msi:/work/ffmpeg/ffmpeg-3.0.1$ git add ./
- cong@msi:/work/ffmpeg/ffmpeg-3.0.1$ git commit -m 'ffmpeg3.0.1 project init
0 0
- ffmpeg学习---8.ubuntu14.04源码编译ffmpeg-2.1
- Ubuntu14.04安装编译ffmpeg
- Ubuntu14.04安装编译ffmpeg
- FFmpeg Notes - 1.Ubuntu14.04下编译安装FFmpeg+FFplayer
- Ubuntu14.04编译Android FFmpeg详细教程
- ffmpeg在Ubuntu14.04源码安装
- 11、ffmpeg学习笔记—ffmpeg源码编译-Android
- ubuntu14.4下编译FFMPEG
- Ubuntu14.0下编译FFMpeg
- ubuntu14.04安装ffmpeg
- ubuntu14.04安装ffmpeg
- ubuntu14.04 配置ffmpeg
- ubuntu14.04安装ffmpeg
- ubuntu14.04安装ffmpeg
- ubuntu14.04安装ffmpeg
- ffmpeg源码编译
- ffmpeg源码编译
- ffmpeg源码编译
- iOS开发之OCR光学识别储蓄卡以及信用卡
- Java swing系列之JList类(2)
- ffmpeg学习---7.用ffmpeg-0.5学习Tutorial
- 2016年09月问题列表
- 终端的CTRL+S 解说
- ffmpeg学习---8.ubuntu14.04源码编译ffmpeg-2.1
- C# 开发Windows Service(一)——第一个windows服务开发和安装卸载
- Latex测试代码
- MFC中的DC,CDC和HDC
- 关于Fragment基类
- ffmpeg学习---9.3Playing Sound(更新版)
- 一款简单的Android计算器源代码
- 做淘宝做微信 你必须要知道的那些事儿
- MySQL与MongoDB的操作对比、区别