- 博客(965)
- 资源 (135)
- 收藏
- 关注
原创 最简单的基于FFmpeg的移动端例子:Android HelloWorld
从本文开始打算记录一系列FFmpeg在Android/IOS开发的示例程序。前面几篇文章记录FFmpeg安卓端开发的例子,后面几篇文章记录FFmpeg IOS端开发的例子。这些例子中FFmpeg相关的代码源自于《FFmpeg示例合集》中的程序。本文记录第一个程序:安卓平台下基于FFmpeg的HelloWorld程序。Android程序FFmpeg类库使用说明Android应用程序使用FFmpeg类
2015-07-23 20:09:22 116488 85
原创 最简单的基于FFmpeg的AVUtil例子 (AVLog, AVOption等)
本文的示例程序记录了FFmpeg的libavutil中几种工具函数的使用方法:AVLog:日志输出AVOption (AVClass):选项设置AVDictionary:键值对存储ParseUtil:字符串解析几个libavutil的工具AVLogAVLog是FFmpeg的日志输出工具。在FFmpeg中所有的日志输出不是通过printf()函数而是通过av_log()函数。av_log()会最终调
2015-07-18 15:53:43 19357 2
原创 最简单的基于FFMPEG的推流器附件:收流器
出于对《最简单的基于FFmpeg的推流器》的补充,本文记录一个最简单的基于FFmpeg的收流器。收流器和推流器的作用正好相反:推流器用于将本地文件以流媒体的形式发送出去,而收流器用于将流媒体内容保存为本地文件。 本文记录的推流器可以将RTMP流媒体保存成为一个本地的FLV文件。由于FFmpeg本身支持很多的流媒体协议和封装格式,所以也支持其它的封装格式和流媒体协议。源代码/** * 最简单的基于
2015-07-18 08:47:14 34583 21
原创 最简单的基于FFMPEG的Helloworld程序
本文记录一个基于FFmpeg的HelloWorld程序。该程序可以打印出FFmpeg类库的基本信息。使用该程序通常可以验证FFmpeg是否正确的安装配置。
2015-07-17 10:43:41 36591 16
原创 最简单的基于FFMPEG+SDL的音频播放器:拆分-解码器和播放器
本文补充记录《最简单的基于FFMPEG+SDL的音频播放器》中的两个例子:FFmpeg音频解码器和SDL音频采样数据播放器。这两个部分是从音频播放器中拆分出来的两个例子。FFmpeg音频解码器实现了视频数据到PCM采样数据的解码,而SDL音频采样数据播放器实现了PCM数据到音频设备的播放。简而言之,原先的FFmpeg+SDL音频播放器实现了:音频数据->PCM->音频设备FFmpeg音频解码器实现
2015-07-17 09:31:10 23376 14
原创 最简单的基于FFMPEG+SDL的视频播放器:拆分-解码器和播放器
本文补充记录《最简单的基于FFMPEG+SDL的视频播放器》中的两个例子:FFmpeg视频解码器和SDL像素数据播放器。这两个部分是从视频播放器中拆分出来的两个例子。FFmpeg视频解码器实现了视频数据到YUV数据的解码,而SDL像素数据播放器实现了YUV数据的显示。简而言之,原先的FFmpeg+SDL视频播放器实现了:视频数据->YUV->显示器FFmpeg视频解码器实现了:视频数据->YUVS
2015-07-16 21:57:56 29872 22
原创 FFmpeg的HEVC解码器源代码简单分析:环路滤波(Loop Filter)
本文分析FFmpeg的libavcodec中的HEVC解码器的环路滤波(Loop Filter)部分的源代码。FFmpeg的HEVC解码器调用hls_decode_entry()函数完成了Slice解码工作。hls_decode_entry()则调用了ff_hevc_hls_filters()完成了滤波工作。本文记录该函数实现的功能。函数调用关系图FFmpeg HEVC解码器的环路滤波(Loop
2015-06-21 00:07:03 13596 7
原创 FFmpeg的HEVC解码器源代码简单分析:CTU解码(CTU Decode)部分-TU
本文分析FFmpeg的libavcodec中的HEVC解码器的CTU解码(CTU Decode)部分的源代码。FFmpeg的HEVC解码器调用hls_decode_entry()函数完成了Slice解码工作。hls_decode_entry()则调用了hls_coding_quadtree()完成了CTU解码工作。由于CTU解码部分的内容比较多,因此将这一部分内容拆分成两篇文章:一篇文章记录PU的解码,另一篇文章记录TU解码。本文记录TU的解码过程。
2015-06-16 17:14:42 11940 4
原创 FFmpeg的HEVC解码器源代码简单分析:CTU解码(CTU Decode)部分-PU
本文分析FFmpeg的libavcodec中的HEVC解码器的CTU解码(CTU Decode)部分的源代码。FFmpeg的HEVC解码器调用hls_decode_entry()函数完成了Slice解码工作。hls_decode_entry()则调用了hls_coding_quadtree()完成了CTU解码工作。由于CTU解码部分的内容比较多,因此将这一部分内容拆分成两篇文章:一篇文章记录PU的解码,另一篇文章记录TU
2015-06-15 17:32:50 9617 3
原创 FFmpeg的HEVC解码器源代码简单分析:解码器主干部分
本文分析FFmpeg的HEVC解码器的主干部分。“主干部分”是相对于“CTU解码”、 “环路滤波”这些细节部分而言的。它包含了HEVC解码器直到hls_decode_entry()前面的函数调用关系(hls_decode_entry()后面就是HEVC解码器的细节部分,主要包含了“CTU解码”、 “环路滤波”2个部分)。函数调用关系图FFmpeg HEVC解码器主干部分在整个HEVC解码器中的位置
2015-06-10 16:23:08 22571 3
原创 FFmpeg的HEVC解码器源代码简单分析:解析器(Parser)部分
上篇文章概述了FFmpeg中HEVC(H.265)解码器的结构;从这篇文章开始,具体研究HEVC解码器的源代码。本文分析HEVC解码器中解析器(Parser)部分的源代码。这部分的代码用于分割HEVC的NALU,并且解析SPS、PPS、SEI等信息。解析HEVC码流(对应AVCodecParser结构体中的函数)和解码HEVC码流(对应AVCodec结构体中的函数)的时候都会调用该部分的代码完成相
2015-06-09 23:19:48 30087 2
原创 FFmpeg的HEVC解码器源代码简单分析:概述
从这篇文章开始,简单分析记录FFmpeg中libavcodec的HEVC(H.265)解码器(HEVC Decoder)的源代码。本文综述整个解码器的框架,后续几篇文章再对解码器的内部模块进行分析。
2015-06-08 14:24:57 20523 6
原创 视频特性TI(时间信息)和SI(空间信息)的计算工具:TIandSI-压缩码流版
此前在文章《视频特性TI(时间信息)和SI(空间信息)的计算工具:TIandSI》中记录过两个基于YUV视频数据的TI和SI计算工具:一个图形界面工具和一个命令行工具。由于近期正在研究视频内容复杂度方面的东西,所以顺手将原来的TIandSI工具进行了升级,添加了另外两个支持压缩码流的TI和SI的工具,并将版本改为3.0。 目前的TIandSI项目中一共包含4个项目:TIandSI : 计算YUV数
2015-05-30 18:55:24 7599
原创 FFmpeg与libx264接口源代码简单分析
本文简单记录一下FFmpeg的libavcodec中与libx264接口部分的源代码。该部分源代码位于“libavcodec/libx264.c”中。正是有了这部分代码,使得FFmpeg可以调用libx264编码H.264视频。
2015-05-25 01:48:07 28747 4
原创 x264源代码简单分析:熵编码(Entropy Encoding)部分
本文记录x264的 x264_slice_write()函数中调用的x264_macroblock_write_cavlc()的源代码。x264_macroblock_write_cavlc()对应着x264中的熵编码模块。熵编码模块主要完成了编码数据输出的功能。
2015-05-24 22:48:12 15397 6
原创 x264源代码简单分析:宏块编码(Encode)部分
本文记录x264的 x264_slice_write()函数中调用的x264_macroblock_encode()的源代码。x264_macroblock_encode()对应着x264中的宏块编码模块。宏块编码模块主要完成了DCT变换和量化两个步骤。函数调用关系图宏块编码(Encode)部分的源代码在整个x264中的位置如下图所示。单击查看更清晰的图片宏块编码(Encode)部分的函数调用关系
2015-05-24 13:47:40 16203 4
原创 x264源代码简单分析:宏块分析(Analysis)部分-帧间宏块(Inter)
本文记录x264的 x264_slice_write()函数中调用的x264_macroblock_analyse()的源代码。x264_macroblock_analyse()对应着x264中的分析模块。分析模块主要完成了下面2个方面的功能:(1)对于帧内宏块,分析帧内预测模式(2)对于帧间宏块,进行运动估计,分析帧间预测模式上一篇文章记录了帧内宏块预测模式的分析,本文继续记录帧间宏块预测模式的分析。
2015-05-23 19:07:49 18773 3
原创 x264源代码简单分析:宏块分析(Analysis)部分-帧内宏块(Intra)
本文记录x264的 x264_slice_write()函数中调用的x264_macroblock_analyse()的源代码。x264_macroblock_analyse()对应着x264中的分析模块。分析模块主要完成了下面2个方面的功能:(1)对于帧内宏块,分析帧内预测模式(2)对于帧间宏块,进行运动估计,分析帧间预测模式
2015-05-22 16:08:02 23410 14
原创 x264源代码简单分析:滤波(Filter)部分
本文记录x264的x264_slice_write()函数中调用的x264_fdec_filter_row()的源代码。x264_fdec_filter_row()对应着x264中的滤波模块。滤波模块主要完成了下面3个方面的功能:(1)环路滤波(去块效应滤波)(2)半像素内插(3)视频质量指标PSNR和SSIM的计算本文分别记录上述3个方面的源代码。
2015-05-20 22:55:15 14280 7
原创 x264源代码简单分析:x264_slice_write()
本文简单分析x264的x264_slice_write()的源代码。x264_slice_write()是x264项目的核心,它完成了编码了一个Slice的工作。根据功能的不同,该函数可以分为滤波(Filter),分析(Analysis),宏块编码(Encode)和熵编码(Entropy Encoding)几个子模块。本文首先对x264_slice_write()进行总体的概括,在后续文章中将会对上述几个子模块展开进行分析。
2015-05-17 18:36:39 16912 5
原创 x264源代码简单分析:编码器主干部分-2
本文继续记录x264编码器主干部分的源代码。上一篇文章记录x264_encoder_open(),x264_encoder_headers(),和x264_encoder_close()这三个函数,本文记录x264_encoder_encode()函数。
2015-05-14 14:14:43 20393 4
原创 x264源代码简单分析:编码器主干部分-1
本文分析x264编码器主干部分的源代码。“主干部分”指的就是libx264中最核心的接口函数——x264_encoder_encode(),以及相关的几个接口函数x264_encoder_open(),x264_encoder_headers(),和x264_encoder_close()。这一部分源代码比较复杂,现在看了半天依然感觉很多地方不太清晰,暂且把已经理解的地方整理出来,以后再慢慢补充还不太清晰的地方。
2015-05-11 17:10:51 31050 13
原创 x264源代码简单分析:x264命令行工具(x264.exe)
本文简单分析x264项目中的命令行工具(x264.exe)的源代码。该命令行工具可以调用libx264将YUV格式像素数据编码为H.264码流。
2015-05-08 18:30:23 25920 2
原创 x264源代码简单分析:概述
最近正在研究H.264和HEVC的编码方式,因此分析了一下最常见的H.264编码器——x264的源代码。本文简单梳理一下它的结构。X264的源代码量比较大而且涉及到很多的算法,目前还有很多不懂的地方,因此也不能保证分析的完全正确。目前打算先把已经理解的部分整理出来以作备忘。
2015-05-06 15:53:49 65596 26
原创 FFmpeg的H.264解码器源代码简单分析:环路滤波(Loop Filter)部分
本文分析FFmpeg的H.264解码器的环路滤波(Loop Filter)部分。FFmpeg的H.264解码器调用decode_slice()函数完成了解码工作。这些解码工作可以大体上分为3个步骤:熵解码,宏块解码以及环路滤波。本文分析这3个步骤中的第3个步骤。
2015-04-23 18:16:26 20462 5
原创 FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧间宏块(Inter)
本文继续分析FFmpeg的H.264解码器的宏块解码(Decode)部分。上一篇文章已经记录了帧内预测宏块(Intra)的宏块解码,本文继续上一篇文章的内容,记录帧间预测宏块(Inter)的宏块解码。
2015-04-22 16:00:31 17517 7
原创 FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧内宏块(Intra)
本文分析FFmpeg的H.264解码器的宏块解码(Decode)部分的源代码。FFmpeg的H.264解码器调用decode_slice()函数完成了解码工作。这些解码工作可以大体上分为3个步骤:熵解码,宏块解码以及环路滤波。本文分析这3个步骤中的第2个步骤。由于宏块解码部分的内容比较多,因此将本部分内容拆分成两篇文章:一篇文章记录帧内预测宏块(Intra)的宏块解码,另一篇文章记录帧间预测宏块(
2015-04-20 14:55:51 33649 6
原创 FFmpeg的H.264解码器源代码简单分析:熵解码(Entropy Decoding)部分
本文分析FFmpeg的H.264解码器的熵解码(Entropy Decoding)部分的源代码。FFmpeg的H.264解码器调用decode_slice()函数完成了解码工作。这些解码工作可以大体上分为3个步骤:熵解码,宏块解码以及环路滤波。本文分析这3个步骤中的第1个步骤。
2015-04-18 17:19:15 23956 4
原创 FFmpeg的H.264解码器源代码简单分析:解码器主干部分
本文分析FFmpeg的H.264解码器的主干部分。“主干部分”是相对于“熵解码”、“宏块解码”、“环路滤波”这些细节部分而言的。它包含了H.264解码器直到decode_slice()前面的函数调用关系(decode_slice()后面就是H.264解码器的细节部分,主要包含了“熵解码”、“宏块解码”、“环路滤波”3个部分)。
2015-04-14 16:04:50 23667 5
原创 FFmpeg的H.264解码器源代码简单分析:解析器(Parser)部分
本文继续分析FFmpeg中libavcodec的H.264解码器(H.264 Decoder)。上篇文章概述了FFmpeg中H.264解码器的结构;从这篇文章开始,具体研究H.264解码器的源代码。本文分析H.264解码器中解析器(Parser)部分的源代码。这部分的代码用于分割H.264的NALU,并且解析SPS、PPS、SEI等信息。解析H.264码流(对应AVCodecParser结构体中的函数)和解码H.264码流(对应AVCodec结构体中的函数)的时候都会调用该部分的代码完成相应的功能。
2015-04-12 00:37:12 70268 6
原创 FFmpeg的H.264解码器源代码简单分析:概述
本文简单记录FFmpeg中libavcodec的H.264解码器(H.264 Decoder)的源代码。这个H.264解码器十分重要,可以说FFmpeg项目今天可以几乎“垄断”视音频编解码技术,很大一部分贡献就来自于这个H.264解码器。这个H.264解码器一方面功能强大,性能稳定;另一方面源代码也比较复杂,难以深入研究。本文打算梳理一下这个H.264解码器的源代码结构,以方便以后深入学习H.264使用。
2015-04-04 01:09:18 50347 16
原创 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 21124 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 18574 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 95847 12
原创 FFmpeg源代码简单分析:makefile
本文记录FFmpeg的Makefile的源代码。Makefile用于编译FFmpeg的源代码。通过分析Makefile文件,可以了解FFmpeg的源代码生成的流程。有关Makefile这部分我本身基础不算很牢,很多地方还在慢慢摸索,所以分析的内容不能保证完全准确。以后有时间和其他朋友多交流再慢慢完善这篇文章。注:make有一个很有用的命令:“make -n”。该选项会显示命令,但不会执行命令,十分
2015-03-23 11:22:29 39280 6
原创 FFmpeg源代码简单分析:libswscale的sws_scale()
本文继续上一篇文章《FFmpeg源代码分析:sws_getContext()》的内容,简单分析FFmpeg的图像处理(缩放,YUV/RGB格式转换)类库libswsscale中的sws_scale()函数。libswscale是一个主要用于处理图片像素数据的类库。可以完成图片像素格式的转换,图片的拉伸等工作。有关libswscale的使用可以参考文章:《最简单的基于FFmpeg的libswscal
2015-03-17 20:02:33 43046 8
原创 FFmpeg源代码简单分析:libswscale的sws_getContext()
打算写两篇文章记录FFmpeg中的图像处理(缩放,YUV/RGB格式转换)类库libswsscale的源代码。libswscale是一个主要用于处理图片像素数据的类库。可以完成图片像素格式的转换,图片的拉伸等工作。
2015-03-17 12:16:43 42946 8
原创 FFmpeg源代码简单分析:结构体成员管理系统-AVOption
本文继续上篇文章《FFmpeg源代码分析:结构体成员管理系统-AVClass》中的内容,记录FFmpeg中和AVOption相关的源代码。AVOption用于在FFmpeg中描述结构体中的成员变量。一个AVOption可以包含名称,简短的帮助信息,取值等等。上篇文章简单回顾上篇文章中概括了AVClass,AVOption和目标结构体之间的关系。以AVFormatContext为例,可以表示为下图。
2015-03-16 09:41:56 23028 3
原创 FFmpeg源代码简单分析:结构体成员管理系统-AVClass
打算写两篇文章记录FFmpeg中和AVOption有关的源代码。AVOption用于在FFmpeg中描述结构体中的成员变量。它最主要的作用可以概括为两个字:“赋值”。一个AVOption结构体包含了变量名称,简短的帮助,取值等等信息。所有和AVOption有关的数据都存储在AVClass结构体中。如果一个结构体(例如AVFormatContext或者AVCodecContext)想要支持AVOpt
2015-03-15 19:21:03 20517 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 47331 8
最简单的基于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关注的人