百度免费网站制作,免费做自荐书的网站,网站wap怎么做,免费有限公司FFMPEG基本概念#xff1a; ffmpeg是一个开源的编解码框架#xff0c;它提供了一个音视频录制#xff0c;解码和编码库。FFMPEG是在linux下开发的#xff0c;但也有windows下的编译版本。 ffmpeg项目由以下几部分组成: ffmpeg 视频文件转换命令行工具,也支持经过实时电视… FFMPEG基本概念 ffmpeg是一个开源的编解码框架它提供了一个音视频录制解码和编码库。FFMPEG是在linux下开发的但也有windows下的编译版本。 ffmpeg项目由以下几部分组成: ffmpeg 视频文件转换命令行工具,也支持经过实时电视卡抓取和编码成视频文件. ffserver 基于HTTP(RTSP正在开发中)用于实时广播的多媒体服务器.也支持时间平移 ffplay 用 SDL和FFmpeg库开发的一个简单的媒体播放器 libavcodec 一个包含了所有FFmpeg音视频编解码器的库.为了保证最优性能和高可复用性,大多数编解码器从头开发的. libavformat 一个包含了所有的普通音视格式的解析器和产生器的库. FFMPEG和VLC关系 在网上很多人都在问FFMPEG和VLC之间是什么关系网上有位同学的回答最为精辟“VLC VS FFmpeg 汽车 VS 发动机” FFMPEG和libav的关系 libav是FFMPEG的开发人员中独立出来一部分后创建的一个新的工程。当时是因为在ffmpeg的开发邮件列表中经常会有不同的意见并且产生争论之后独立出来。同时libav开发组将ffmpeg原有的图标变为自己的同时ffmpeg重新开发了图标 Today FFmpeg has received the first legal threat in its existence. Its from a previous root admin of FFmpeg, who now is root admin of the Libav fork of FFmpeg. He claims copyright on the zigzag part of our logo. It has to be noted that he said 4 years ago Credit to whoever came up with the zigzag idea Update May 31/June 1:We have replaced the logo with a better looking one drawn by Hervé Flores. FFMPEG编译 FFMPEG的源码可以从发下网站中获取http://www.ffmpeg.org/。 编译选项可以通过源码中的configure来配置。 如果要配置外包的包如libfaac,libx264等,可以通过--extra-cflags来指定头文件的文件夹。可以通过--extra-cflags来指定第三方的库文件的位置。如果要编译动态库则可用--enable-shared配置选项来实现。 如果想编译ffplay必须先安装SDL库。否则无法编译出ffplay。 而对于SDL库的编译则同其它linux下的安装文件一样。 而对于第三方库的安装网上到处都有说明。 http://www.cnblogs.com/MaxIE/archive/2007/02/03/638863.html 这里有一篇文章可以参考。 版权所有博水。转载请注明出处http://www.cnblogs.com/qingquan/ ffmpeg源码分析之数据流 http://www.yanfake.com
本文主要介绍ffmpeg的数据流在ffmpeg中主要分有三个主要用途用于媒体流的解码播放媒体流的转换解码之后再编码和媒体流录制。
媒体流的解码播放
在ffmpeg中媒体流的解码播放流程如下图
其主要流程为从媒体文件中读取出媒体流然后送入媒体格式解码器中去除多余的外衣媒体格式。然后送入的的中进行解码最终生成显示需要的格式的图片然后再送入类似中进行渲染。ffmpeg中媒体流的解码播放流程相对比较来说其最大的难点在于的同步在的中有很好的例子。例子中是启动了多个线程来进行同步的。
媒体流的转换
所谓媒体流的转换分以下几种情况
一种是格式转换也相当于我们平时的换衣服一样只是换个样式换一种组织样式以适应不同场合的需要。
一种是媒体编码类型的转换例如将从 相当于不同的人来买同一个衣服虽然外表格式看起来一样但穿衣服的人已经发生了变化。
一种是媒体编码类型和格式同时转换例如将格式为的转换为同时将从 相当于不同的人穿了不同的衣服。
其流程如下图
其数据流前半部分同解码流程一样后半部分则和解码的流程相反。当解析出图片之后然后编码成另外一种之后再将的数据加上一个外壳形成一个媒体文件然后通过写入目标文件。
媒体流录制
媒体流的录制过程相当于媒体流转换的后半部分流程从文件到文件。其流程为 中的的组织形式 中的数据结构如下 typedef struct AVCodec { const char *name; enum AVMediaType type; enum CodecID id; int priv_data_size; int (*init)(AVCodecContext *); int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data); int (*close)(AVCodecContext *); int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, AVPacket *avpkt); int capabilities; struct AVCodec *next; void (*flush)(AVCodecContext *); const AVRational *supported_framerates; const enum PixelFormat *pix_fmts; const char *long_name; const int *supported_samplerates; const enum SampleFormat *sample_fmts; const int64_t *channel_layouts;
} AVCodec;
这个数据结构分别用于和当被所用时函数指针为NULL而当用于时其为NULL在中通过向全局变量
static AVCodec *first_avcodec
中添加新的变量。在查找的过程也是通过遍历这个链表然后通过来匹配相应的这个过程将会在以后的文章中详细描述。在中的组织结构和类似。
版权所有博水。转载请注明出处http://www.cnblogs.com/qingquan/