简介一、介绍 FFmpeg是一个集录制、转换、音/视频编码解码功能为一体的完整的开源解决方案。FFmpeg 的开发是基于Linux操作系统,但是可以在大多数操作系统中编译和使用。 FFmpeg支持MPEG、DivX、MPEG4、AC3、DV、FLV 等 40 多种编码,AVI、MPEG、OGG、Matroska、ASF 等 90 多种解码.TCPMP, VLC, MPlayer等开源播放器都用到了 FFmpeg。二、工作目录 FFmpeg主目录下主要有 libavcodec、libavformat 和libavutil 等子目录。 1.libavcodec 用于存放各个 encode/decode 模块 2.libavformat 用于存放 muxer/demuxer 模块 3.libavutil 用于存放内存操作等常用模块。三、实例(flash movie的 flv文件格式) muxer/demuxer的 flvenc.c和 flvdec.c 文件在libavformat 目录下。 encode/decode的 mpegvideo.c 和 h263de.c 在libavcodec 目录下。muxer/demuxer 与 encoder/decoder 定义与初始化 muxer/demuxer和 encoder/decoder 在 FFmpeg 中的实现代码里,有许多相同的地方,而二者最大的差别是muxer 和 demuxer 分别是不同的结构 AVOutputFormat 与AVInputFormat,而 encoder 和 decoder 都是用的AVCodec 结构。1.muxer/demuxer 和 encoder/decoder 在 FFmp eg 中相同的地方有: 二者都是在main()开始的 av_register_all()函数内初始化的。 二者都是以链表的形式保存在全局变量中的。muxer/demuxer 是分别保存在全局变量AVOutputFormat *first_oformat与 AVInputFormat *first_iformat 中的。encoder/decoder 都是保存在全局变量 AVCodec *first_avcodec 中的。 二者都用函数指针的方式作为开放的公共接口。1.demuxer 开放的接口有: int (*read_probe)(AVProbeData *); int(*read_header)(struct AVFormatContext *, AVFormatParameters *ap);int (*read_packet)(struct AVFormatContext *, AVPacket *pkt);int (*read_close)(struct AVFormatContext *);int (*read_seek)(struct AVFormatContext *, int stream_index, int64_t timestamp, int flags);2.muxer 开放的接口有: int (*write_header)(struct AVFormatContext *); int (*write_packet)(struct AVFormatContext *, AVPacket *pkt); int (*write_trailer)(struct AVFormatContext *);3.encoder/decoder 的接口: 接口都是一样的,只不过二者分别只实现 encoder和...