- 博客(25)
- 资源 (141)
- 收藏
- 关注
原创 FFmpeg源代码简单分析:libavdevice的gdigrab
本文记录FFmpeg的libavdevice中GDIGrab组件的源代码。GDIGrab用于在Windows下屏幕录像(抓屏)。它的源代码位于libavdevice\gdigrab.c。关键函数的调用关系图如下图所示。图中绿色背景的函数代表源代码中自己声明的函数,紫色背景的函数代表Win32的API函数。ff_gdigrab_demuxer在FFmpeg中Device也被当做是一种Format,因
2015-03-25 12:33:42 21146 18
原创 FFmpeg源代码简单分析:libavdevice的avdevice_register_all()
本文记录一下FFmpeg中libavdevice注册设备的函数avdevice_register_all()。avdevice_register_all()的注册方式和av_register_all()、avcodec_register_all()这几个函数是类似的,具体的代码如下。
2015-03-24 21:49:57 18591 1
原创 FFmpeg源代码简单分析:configure
本文记录FFmpeg的Configure脚本的源代码。Configure一方面用于检测FFmpeg的编译环境,另一方面根据用户配置的选项生成config.mak,config.h文件(可能还有config.asm),提供给Makefile使用。由于FFmpeg的configure脚本很复杂(一个4000-5000行的Shell脚本),难以逐行细致的分析,因此本文简单梳理一下它的结构。PS1:Con
2015-03-24 10:22:53 95908 12
原创 FFmpeg源代码简单分析:makefile
本文记录FFmpeg的Makefile的源代码。Makefile用于编译FFmpeg的源代码。通过分析Makefile文件,可以了解FFmpeg的源代码生成的流程。有关Makefile这部分我本身基础不算很牢,很多地方还在慢慢摸索,所以分析的内容不能保证完全准确。以后有时间和其他朋友多交流再慢慢完善这篇文章。注:make有一个很有用的命令:“make -n”。该选项会显示命令,但不会执行命令,十分
2015-03-23 11:22:29 39354 6
原创 FFmpeg源代码简单分析:libswscale的sws_scale()
本文继续上一篇文章《FFmpeg源代码分析:sws_getContext()》的内容,简单分析FFmpeg的图像处理(缩放,YUV/RGB格式转换)类库libswsscale中的sws_scale()函数。libswscale是一个主要用于处理图片像素数据的类库。可以完成图片像素格式的转换,图片的拉伸等工作。有关libswscale的使用可以参考文章:《最简单的基于FFmpeg的libswscal
2015-03-17 20:02:33 43068 8
原创 FFmpeg源代码简单分析:libswscale的sws_getContext()
打算写两篇文章记录FFmpeg中的图像处理(缩放,YUV/RGB格式转换)类库libswsscale的源代码。libswscale是一个主要用于处理图片像素数据的类库。可以完成图片像素格式的转换,图片的拉伸等工作。
2015-03-17 12:16:43 42977 8
原创 FFmpeg源代码简单分析:结构体成员管理系统-AVOption
本文继续上篇文章《FFmpeg源代码分析:结构体成员管理系统-AVClass》中的内容,记录FFmpeg中和AVOption相关的源代码。AVOption用于在FFmpeg中描述结构体中的成员变量。一个AVOption可以包含名称,简短的帮助信息,取值等等。上篇文章简单回顾上篇文章中概括了AVClass,AVOption和目标结构体之间的关系。以AVFormatContext为例,可以表示为下图。
2015-03-16 09:41:56 23051 3
原创 FFmpeg源代码简单分析:结构体成员管理系统-AVClass
打算写两篇文章记录FFmpeg中和AVOption有关的源代码。AVOption用于在FFmpeg中描述结构体中的成员变量。它最主要的作用可以概括为两个字:“赋值”。一个AVOption结构体包含了变量名称,简短的帮助,取值等等信息。所有和AVOption有关的数据都存储在AVClass结构体中。如果一个结构体(例如AVFormatContext或者AVCodecContext)想要支持AVOpt
2015-03-15 19:21:03 20549 3
原创 FFmpeg源代码简单分析:日志输出系统(av_log()等)
本文分析一下FFmpeg的日志(Log)输出系统的源代码。日志输出部分的核心函数只有一个:av_log()。使用av_log()在控制台输出日志的效果如下图所示。av_log()av_log()是FFmpeg中输出日志的函数。随便打开一个FFmpeg的源代码文件,就会发现其中遍布着av_log()函数。一般情况下FFmpeg类库的源代码中是不允许使用printf()这种的函数的,所有的输出一律使
2015-03-14 12:19:53 47384 8
原创 FFmpeg源代码结构图 - 编码
上一篇文章深入分析了FFmpeg解码过程中核心API的内部源代码,本文继续分析FFmpeg编码过程中核心API的内部源代码。本文的编码流程可以参考程序《最简单的基于FFmpeg的视频编码器》。函数调用关系图首先呈现分析的结果,如图所示。
2015-03-13 14:42:15 55552 25
原创 FFmpeg源代码结构图 - 解码
近期研究了一下FFmpeg的内部的源代码。之前对于FFmpeg的研究主要在它的应用层面上,因此制作的很多示例程序都是调用的FFmpeg的API。但是一直感觉这样对FFmpeg的理解还是比较浅,所以打算剖析一下它的源代码,理一下它内部结构的“脉络”。但是有一个很难办的问题:FFmpeg自带的三个工程:ffplay, ffmpeg, ffprobe的代码量非常的大,其中包含了成百上千的API;而这些API背后又包含了大量的FFmpeg内部函数。如此一来,几乎是不可能理清他们之间的关系的。
2015-03-12 14:03:16 134452 38
原创 FFmpeg源代码简单分析:avcodec_close()
本文简单分析FFmpeg的avcodec_close()函数。该函数用于关闭编码器。
2015-03-12 00:06:14 20127 2
原创 FFmpeg源代码简单分析:avcodec_encode_video()
本文简单分析FFmpeg的avcodec_encode_video2()函数。该函数用于编码一帧视频数据。
2015-03-11 22:26:14 33916 4
原创 FFmpeg源代码简单分析:av_write_trailer()
打算写两篇文章简单分析FFmpeg的写文件用到的3个函数avformat_write_header(),av_write_frame()以及av_write_trailer()。这篇文章继续分析av_write_trailer()。av_write_trailer()用于输出文件尾,它的声明位于libavformat\avformat.h
2015-03-11 17:29:06 24870 7
原创 FFmpeg源代码简单分析:av_write_frame()
打算写两篇文章简单分析FFmpeg的写文件用到的3个函数avformat_write_header(),av_write_frame()以及av_write_trailer()。上篇文章已经分析了avformat_write_header(),这篇文章继续分析av_write_frame()。
2015-03-11 16:03:35 48667 8
原创 FFmpeg源代码简单分析:avformat_write_header()
打算写两篇文章简单分析FFmpeg的写文件用到的3个函数:avformat_write_header(),av_write_frame()以及av_write_trailer()。其中av_write_frame()用于写视频数据,avformat_write_header()用于写视频文件头,而av_write_trailer()用于写视频文件尾。本文首先分析avformat_write_hea
2015-03-08 18:45:57 53581 11
原创 FFmpeg源代码简单分析:avcodec_open2()
本文简单分析FFmpeg的avcodec_open2()函数。该函数用于初始化一个视音频编解码器的AVCodecContext。
2015-03-08 00:14:29 70287 16
原创 FFmpeg源代码简单分析:avformat_close_input()
本文简单分析FFmpeg的avformat_close_input()函数。该函数用于关闭一个AVFormatContext,一般情况下是和avformat_open_input()成对使用的。
2015-03-07 10:58:52 28590 3
原创 FFmpeg源代码简单分析:av_find_decoder()和av_find_encoder()
本文记录FFmpeg的两个API函数:avcodec_find_encoder()和avcodec_find_decoder()。avcodec_find_encoder()用于查找FFmpeg的编码器,avcodec_find_decoder()用于查找FFmpeg的解码器。
2015-03-06 12:40:06 32101 3
原创 FFmpeg源代码简单分析:avformat_find_stream_info()
本文简单分析FFmpeg中一个常用的函数:avformat_find_stream_info()。该函数可以读取一部分视音频数据并且获得一些相关的信息。
2015-03-06 11:15:37 69747 10
原创 FFmpeg源代码简单分析:avformat_open_input()
本文简单分析FFmpeg中一个常用的函数:avformat_open_input()。该函数用于打开多媒体数据并且获得一些相关的信息。
2015-03-05 00:13:10 76247 10
原创 FFmpeg源代码简单分析:avio_open2()
本文简单分析FFmpeg中一个常用的函数avio_open2()。该函数用于打开FFmpeg的输入输出文件。
2015-03-04 14:16:41 65020 32
原创 FFmpeg源代码简单分析:avformat_alloc_output_context2()
本文简单分析FFmpeg中常用的一个函数:avformat_alloc_output_context2()。在基于FFmpeg的视音频编码器程序中,该函数通常是第一个调用的函数(除了组件注册函数av_register_all())。avformat_alloc_output_context2()函数可以初始化一个用于输出的AVFormatContext结构体。它的声明位于libavformat\a
2015-03-03 22:13:57 52182 13
原创 FFmpeg源代码简单分析:常见结构体的初始化和销毁(AVFormatContext,AVFrame等)
本文简单分析FFmpeg常见结构体的初始化和销毁函数的源代码。常见的结构体在文章:《FFMPEG中最关键的结构体之间的关系》中已经有过叙述,包括:AVFormatContext:统领全局的基本结构体。主要用于处理封装格式(FLV/MKV/RMVB等)。AVIOContext:输入输出对应的结构体,用于输入输出(读写文件,RTMP协议等)。AVStream,AVCodecContext:视音频流对应
2015-03-03 16:25:13 76876 18
原创 FFmpeg源代码简单分析:内存的分配和释放(av_malloc()、av_free()等)
本文简单记录一下FFmpeg中内存操作的函数。内存操作的常见函数位于libavutil\mem.c中。
2015-03-03 15:24:48 55259 9
最简单的基于FFmpeg的内存读写的例子 1.1
2015-02-13
最简单的基于FFMPEG的AVDevice的例子 1.2
2015-02-13
最简单的基于FFmpeg的libswscale的教程 1.1
2015-02-13
最简单的基于FFmpeg的AVFilter例子(叠加水印) 1.1
2015-02-13
最简单的基于FFmpeg的推流器(以推送RTMP为例) 1.1
2015-02-13
最简单的基于FFmpeg的封装格式处理 1.2
2015-02-13
最简单的基于FFMPEG的音频编码器 1.1
2015-02-13
最简单的基于FFmpeg的编码器 1.2
2015-02-13
最简单的基于FFmpeg的图像编码器 1.1
2015-02-13
最简单的基于FFMPEG+SDL的音频播放器 2.1
2015-02-13
最简单的基于DirectShow的示例
2015-01-10
最简单的基于FFMPEG的AVDevice的例子 1.1
2015-01-09
最简单的基于libVLC的例子
2015-01-08
最简单的基于FFMPEG+SDL的视频播放器 2.3
2015-01-03
最简单的基于FFmpeg的编码器 1.1
2015-01-03
最简单的基于FFmpeg的libswscale的教程
2014-12-23
最简单的基于libRTMP的示例
2014-12-23
最简单的基于FFmpeg的封装格式处理的例子 1.1
2014-12-21
最简单的视音频播放示例 1.1
2014-12-21
最简单的视频编码器示例
2014-12-21
最简单的视音频播放示例
2014-10-18
最简单的基于FFmpeg的封装格式处理的例子
2014-10-06
最简单的基于FFmpeg的内存读写的例子
2014-10-05
最简单的基于FFMPEG+SDL的视频播放器 2.2
2014-10-04
最简单的基于FFmpeg的AVFilter例子 1.2
2016-02-01
视音频数据处理入门
2016-01-29
传媒大学广播电视工程系小学期课程 - 基于FFmpeg+SDL的视频播放器的制作
2015-07-26
最简单的基于FFmpeg的移动端例子
2015-07-22
最简单的基于FFmpeg的推流器 1.2
2015-07-22
最简单的基于FFMPEG+SDL的音频播放器 2.2
2015-07-22
最简单的基于FFMPEG+SDL的视频播放器 2.5
2015-07-22
最简单的基于FFmpeg的AVUtil例子 (AVLog, AVOption等)
2015-07-22
TIandSI 3.0 windows
2015-05-30
TIandSI 3.0
2015-05-30
最简单的Flash流媒体例子
2015-02-25
QAM调制与解调仿真程序
2015-02-21
最简单的基于FFMPEG+SDL的视频播放器 2.4
2015-02-13
最简单的基于FFMPEG+SDL的视频播放器-最终版
2015-02-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人