Using libavformat and libavcodec(中文版)
来源:http://ffmpeg.sourceforge.net/ ffmpeg开发指南(使用 libavformat 和 libavcodec)Ffmpeg 中的Libavformat 和 libavcodec库是访问大多数视频文件格式的一个很好的方法。不幸的是,在开发您自己的程序时,这套库基本上没有提供什么实际的文档可以用来作为参考(至少我没有找到任何文档),并且它的例程也并没有太多的帮助。这种情况意味着,当我在最近某个项目中需要用到 libavformat/libavcodec 库时,需要作很多试验来搞清楚怎样使用它们。这里是我所学习的--希望我做的这些能够帮助一些人,以免他们重蹈我的覆辙,作同样的试验
shmget() -- 建立共享内存
shmget() -- 建立共享内存版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://leezen.blogbus.com/logs/19564086.html #include <sys/ipc.h> #include <sys/shm.h> int shmget(key_t key, size_t size, int shmflg);key_t key----------------------------------------------- key标识共享内存的键值: 0/IPC_PRIVATE。 当key的取值为IPC_PRIVATE,则函数shmget()将创建一块新的共享内存;如果key的取值为0,而参数shmflg中设置了IPC_PRIVATE这个标志,则同样将创建一块新的共享内存。 在
IP组播网络编程
IP组播网络编程 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://leezen.blogbus.com/logs/19625232.html5.2 组播应用程序接口与编程 RFC1112推荐了一些支持组播的应用程序接口: ●加入一个组播组; ●离开一个组播组; ●为调整范围对一个组播数据的IP TTL值进行设定; ●为组播传输和接收设定本地的接口; ●禁止输出的组播数据回送。 现在,许多TCP/IP实现都支持RFC1112所提到的要求,下面简要介绍UNIX(Berkeley Socket)和Windows(Winsock) API。 5.2.1 Berkeley Socket组播API 所有Berkeley Socket API都采
FFMPEG 编码分析流程图
FFMPEG 编码分析流程图 - [3DTV]版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://leezen.blogbus.com/logs/18974499.html读代码,自己画画图,可惜显示效果差啊图2.4 write_video_frame.jpg图2.4.1 avcodec_encode_video.jpg图2.4.1.1 encode_picture.jpg图2.4.2 av_write_frame.jpg [@more@]
FFMpeg框架代码阅读 - [3DTV]
FFMpeg框架代码阅读 - [3DTV]版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://leezen.blogbus.com/logs/15774588.html简介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等子目录。其中libav
FFMpeg SDK 开发手册(3)
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://leezen.blogbus.com/logs/16084644.html14. void av_free(void *ptr) usage: free the stream. Free memory which has been allocated with av_malloc(z)() or av_realloc(). av_free(oc); /****************************************************************** ****************************************************************** add_video_stream() AVCodecContext *c AVStream *st ******************************************************************/
FFMpeg SDK 开发手册(2)
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://leezen.blogbus.com/logs/16084488.htmlIV. AVCodecContext 此结构在Ffmpeg SDK中的注释是:main external api structure其重要性可见一斑。而且在avcodec它的定义处,对其每个成员变量,都给出了十分详细的介绍。应该说AVCodecContext的初始化是Codec使用中最重要的一环。虽然在前面的AVStream中已经有所提及,但是这里还是要在说一遍。AVCodecContext作为Avstream的一个成员结构,必须要在Avstream初始化後(30)再对其初始化(AVStream的初始化用到AVFormatConte
FFMpeg SDK 开发手册 1
FFMpeg SDK 开发手册(1)[转载] - [3DTV]版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://leezen.blogbus.com/logs/16084170.htmlFFMpeg SDK 开发手册 FFMpeg 中比较重要的函数以及数据结构如下: 1. 数据结构: (1) AVFormatContext (2) AVOutputFormat (3) AVInputFormat (4) AVCodecContext (5) AVCodec (6) AVFrame (7) AVPacket (8) AVPicture (9) AVStream 2. 初始化函数: (1) av_register_all() (2) avcodec_open() (3) avcodec_close() (4) av_open_input_file() (5) av_find_input_format() (6) av_f
ffmpeg分析系列之七(打开输入的流)
ffmpeg分析系列之七(打开输入的流)err = av_open_input_stream(ic_ptr, pb, filename, fmt, ap);int av_open_input_stream(AVFormatContext **ic_ptr, // 输出参数: 格式上下文ByteIOContext *pb, // 字节IO上下文const char *filename, // 文件名AVInputFormat *fmt, // 输入的格式AVFormatParameters *ap) // 格式参数, 调用时为NULL{int err;AVFormatContext *ic;AVFormatParameters default_ap;// 使用缺省的格式参数if(!ap){ap=&default_ap;memset(ap, 0, sizeof(default_ap));}if(!ap->prealloced_context)ic = avformat_all
视频播放的基本原理
视频播放的基本原理一、知识点ES流(Elementary Stream): 也叫基本码流,包含视频、音频或数据的连续码流.PES流(Packet Elementary Stream): 也叫打包的基本码流, 是将基本的码流ES流根据需要分成长度不等的数据包, 并加上包头就形成了打包的基本码流PES流.TS流(Transport Stream): 也叫传输流, 是由固定长度为188字节的包组成, 含有独立时基的一个或多个program, 一个program又可以包含多个视频、音频、和文字信息的ES流; 每个ES流会有不同的PID标示. 而又为了可以分析这些ES流, TS有一些固定的PID用来间隔发送program和ES流信息的表格: PA
ffmpeg分析系列之五(打开输入的文件)
ffmpeg分析系列之五(打开输入的文件)1. 打开文件:if (!fmt || !(fmt->flags & AVFMT_NOFILE)) { 因 fmt == NULL, 上面成立, 再看下面的代码: ByteIOContext *pb = NULL; // 字节IO上下文 if ((err=url_fopen(&pb, filename, URL_RDONLY)) < 0) { // 只读方式打开输入的文件 goto fail; } if (buf_size > 0) { // 因 buf_size == 0, 不成立 url_setbufsize(pb, buf_size); }进入url_fopen函数:int url_fopen(ByteIOContext **s, // 输出参数: 字节IO上下文
ffmpeg分析系列之四(探测输入的格式)
ffmpeg分析系列之四(探测输入的格式)调用av_open_input_file(&pFormatCtx, is->filename, NULL, 0, NULL)函数打开输入的文件.1. 分析一下函数原型:int av_open_input_file(AVFormatContext **ic_ptr, // 输出参数: 格式上下文 const char *filename, // 文件名 AVInputFormat *fmt, // 输入的格式, 为NULL, 即未知 int buf_size, // 缓冲的大小, 为0 AVFormatParameters *ap); // 格式的参数, 为NULL2. 初始化探测数据: AVProbeData
ffmpeg分析系列之六(再次探测输入的格式)
ffmpeg分析系列之六(再次探测输入的格式)void *logctx= ap && ap->prealloced_context ? *ic_ptr : NULL; // 因为 ap == NULL, 所以 logctx 也 == NULL. if (!fmt && (err = ff_probe_input_buffer(&pb, &fmt, filename, logctx, 0, logctx ? (*ic_ptr)->probesize : 0)) < 0) { goto fail; } // fmt == NULL 时才执行 ff_probe_input_buffer 函数, 因为 fmt 就等于NULL, 成立.ff_probe_input_buffer函数的原型:int ff_probe_input_buffer(ByteIOContext **pb, // 字节IO上下文,
ffmpeg分析系列之三(输入输出格式)
ffmpeg分析系列之三(输入输出格式)探测数据结构:/** This structure contains the data a format has to probe a file. */typedef struct AVProbeData { const char *filename; unsigned char *buf; /**< Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero. */ int buf_size; /**< Size of buf except extra allocated bytes */} AVProbeData;h264的探测函数:static int h264_probe(AVProbeData *p){ uint32_t code= -1; int sps=0, pps=0, idr=0, res=0, sli=0; int i; for(
ffmpeg分析系列之二(文件协议)
ffmpeg分析系列之二(文件协议)URL协议结构:typedef struct URLProtocol { const char *name; int (*url_open)(URLContext *h, const char *url, int flags); int (*url_read)(URLContext *h, unsigned char *buf, int size); int (*url_write)(URLContext *h, unsigned char *buf, int size); int64_t (*url_seek)(URLContext *h, int64_t pos, int whence); int (*url_close)(URLContext *h); struct URLProtocol *next; int (*url_read_pause)(URLContext *h, int pause); int64_t (*url_read_seek)(URLCont
ffmpeg分析系列之一(注册该注册的)
ffmpeg分析系列之一(注册该注册的)hello,各位好,本人是一名嵌入式软件工程师,目前正使用ffmpeg开发一款嵌入式多媒体播放器,《ffmpeg分析》系列博文是本人在阅读ffmpeg源代码时所做的笔记,希望对各位有点帮助。分析过程结合下面的例程:http://dranger.com/ffmpeg/tutorial05.c一. 调用av_register_all函数注册所有的格式和编码解码器.1.1 先调用avcodec_register_all函数注册所有的编码解码器.1. 下面列出与H264相关的注册:// 注册硬件加速器REGISTER_HWACCEL (H264_DXVA2, h264_dxva2);REGISTER_HWACCEL (H264_VAAPI, h264_vaapi);/
YUV / RGB 格式及快速转换算法
YUV / RGB 格式及快速转换算法1 前言 自然界的颜色千变万化,为了给颜色一个量化的衡量标准,就需要建立色彩空间模型来描述各种各样的颜色,由于人对色彩的感知是一个复杂的生理和心理联合作用的过程,所以在不同的应用领域中为了更好更准确的满足各自的需求,就出现了各种各样的色彩空间模型来量化的描述颜色。我们比较常接触到的就包括 RGB / CMYK / YIQ / YUV / HSI等等。 对于数字电子多媒体领域来说,我们经常接触到的色彩空间的概念,主要是RGB , YUV这两种(实际上,这两种体系包含了许多种具体的颜色表达方式和模型
读我们的学科——计算机专业学习浅谈
作者:林健一、广泛了解,从科普书籍开始 选择计算机专业的同学,也许是因为原先有一定的基础,也许是因为一时的激情,但更多的人,可能对自己的选择没有深刻的认识,或多或少对计算机专业有一些神秘的感觉。自己究竟是否喜欢这个学科?才华能够在哪个分支领域有所施展?抑或是真的不适合这个专业?诸多疑问,解决的方法首先便是了解和认识我们的学科。浓厚的兴趣是学好任何学科的源泉;而广泛的了解则是获得兴趣的途径。当今我们对于信息的获取已非难事,其中“阅读”是一个简洁而有效的方法。 也许你认为阅读专业书籍对于刚刚步入
xshell连接linux中文乱码
对于国内的Linux用户,经常烦恼的一个问题是:系统常常在需要显示中文的时候却显示成了乱码,而由于某些原因,需要英文界面的系统的时候,却苦于系统不能正常输入和显示中文.另外,由于大部分主要Linux发行版都是以英语为主体的,英文界面的系统和应用程序不管在界面的美观程度和稳定程度上都比中文的略好一些,各种奇怪的BUG也要少一些。因此,很多稍微有英语基础的Linux用户都宁愿使用英文界面的系统。但是,矛盾又突现出来:在英文系统下,如何才能正常显示和输入中文呢?有没有两全其美的方案呢?因此,笔者开始探索如何解决这个问题。我的完美
man出错解决办法
最近man出问题了,在Linux环境里不用man还真不行,随时都要查看。在工作中,不论是命令还是函数,都需要用到man,先看看出错提示把。[root@localhost xchen]# man lsfgets: No such file or directoryError reading man page /usr/share/man/man1/ls.1.gzNo manual entry for ls解决办法:首先查看gzip ,gunzip工具是否存在,因为根据上面出错提示可知,man手册都是以.gz存在的。[root@localhost xchen]# whereis gunzipgunzip: /bin/gunzip /usr/bin/gunzip /usr/share/man/man1/gunzip.1.gz这就不对了,系统gunzip工具没问题啊?详细查看