FFMpeg 小试

本文详细介绍了使用FFmpeg将图片合成为视频的过程。从ffmpeg_parse_options方法开始,逐步深入到libavformatutils.c中的avformat_find_stream_info方法,并最终到达转码函数static int transcode(void)。涉及的主要步骤包括解析命令、打开文件、读取帧等。
摘要由CSDN通过智能技术生成
经过网络的指导,源码编译生成安卓JNI 调试代码;

目前调试思路是:JNI导入源码,然后找到入口Main函数,使用PC 平台的命令输入,然后顺着命令来阅读代码,目前能执行  视频合成  视频分拆等常用命令,封装成一个JNI调用,下一步再阅读源码,进行一个业务的流程整合;

开始部分代码 是解释命令,后面的 ffmpeg.c 中的static int transcode(void) 方法才是真正的转码函数

参照 http://blog.csdn.net/leixiaohua1020/article/category/1360795/3




 图片合成视频
1、ffmpeg_parse_options方法;
2、open_input_file方法;
3、libavformat\utils.c avformat_find_stream_info 方法,因为是图片,而不是视频,所以走这个方法;
4、libavformat\utils.c read_frame_internal 方法;
5、libavformat\utils.c ff_read_packet;
6、在ff_read_packet 中执行了 AVFormatContext 的回调函数 s->iformat->read_packet(s, pkt);   read_packet,赋值于 img2dec.c ff_img_read_packet方法;
7、libavformat\img2dec.c ff_img_read_packet(); 中执行 io_open 的回调函数;
8、options.c avformat_get_context_defaults()中  把io_open 的回调函数io_open_default 赋值了;
9、options.c io_open_default() 调用 ffio_open_whitelist;
10、aviobuf.c ffio_open_whitelist();  调用了 ffurl_open_whitelist,再有一个 ffio_fdopen 方法,在里面 新建了 *s = avio_alloc_context(buffer, buffer_size, h->flags & AVIO_FLAG_WRITE,
                            internal, io_read_packet, io_write_packet, io_seek); 注意回调方法 io_read_packet,这个就是读取字节到AVIOContext 的地方
11、avio.c ffurl_open_whitelist();
12、avio.c ffurl_connect();  调用了 url_open 的回调函数  在 libavformat\file.c 中ff_file_protocol赋值了;
13、url.h  (*url_open); 
14、libavformat\file.c->url_open();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值