FFmpeg
文章平均质量分 81
和FFmpeg开发和使用有关的文章的汇总
雷霄骅
这个作者很懒,什么都没留下…
展开
-
最简单的基于FFmpeg的移动端例子:Windows Phone HelloWorld
本文记录Windows Phone平台下基于FFmpeg的HelloWorld程序。该示例C语言的源代码来自于《最简单的基于FFMPEG的Helloworld程序》。相关的概念就不再重复记录了。 由于在FFmpeg移动端开发方面只有Android和IOS的实战经验,所以我一开始的时候只做了Android和IOS的示例程序。前两天参加了微软在水立方的Windows 10发布会,会前浏览信息的时候发现原创 2015-08-01 22:25:48 · 23188 阅读 · 16 评论 -
最简单的基于FFmpeg的移动端例子附件:IOS自带播放器
前几篇文章记录的都是IOS下基于FFmpeg的多媒体程序。本文记录一个IOS下自带的视频播放器。相比于移植FFmpeg来说,IOS自带的多媒体框架播放视频要简单很多——只需要调用几个接口就可以了。源代码项目的源代码位于ViewController.m文件中,内容如下所示。原创 2015-08-01 17:03:47 · 23519 阅读 · 6 评论 -
最简单的基于FFmpeg的移动端例子:IOS 视频转码器
本文记录IOS平台下基于FFmpeg的视频转码器。该转码器实际上移植自ffmpeg工程中的ffmpeg.c源代码。有关ffmpeg.c的源代码可以参考文章《ffmpeg.c函数结构简单分析(画图)》,在这里就不重复记录了。源代码项目的目录结构如图所示。下列C语言文件拷贝自FFmpeg源代码:cmdutils.ccmdutils.hcmdutils_common_opts.hconfig.hffmp原创 2015-08-01 16:34:20 · 27312 阅读 · 16 评论 -
最简单的基于FFmpeg的移动端例子:IOS 推流器
本文记录IOS平台下基于FFmpeg的推流器。该示例C语言的源代码来自于《最简单的基于FFMPEG的推流器》。相关的概念就不再重复记录了。源代码项目的目录结构如图所示。C代码位于ViewController.m文件中,内容如下所示。原创 2015-07-29 12:57:35 · 38380 阅读 · 21 评论 -
最简单的基于FFmpeg的移动端例子:IOS 视频解码器
本文记录IOS平台下基于FFmpeg的视频解码器。该示例C语言的源代码来自于《最简单的基于FFMPEG+SDL的视频播放器》。相关的概念就不再重复记录了。源代码项目的目录结构如图所示。C代码位于ViewController.m文件中,内容如下所示。原创 2015-07-28 19:02:45 · 34795 阅读 · 25 评论 -
最简单的基于FFmpeg的移动端例子:IOS HelloWorld
本文记录IOS平台下基于FFmpeg的HelloWorld程序。该示例C语言的源代码来自于《最简单的基于FFMPEG的Helloworld程序》。相关的概念就不再重复记录了。IOS程序使用FFmpeg类库的说明IOS应用程序使用FFmpeg类库的流程如下所示。1. 编译FFmpeg类库编译IOS的FFmpeg类库需要支持5种架构:armv7、armv7s、arm64、i386、x86_64。其中前原创 2015-07-27 20:18:17 · 39862 阅读 · 22 评论 -
《基于 FFmpeg + SDL 的视频播放器的制作》课程的视频
这两天开始带广播电视工程大二的暑假小学期的课程设计了。本次小学期课程内容为《基于 FFmpeg + SDL 的视频播放器的制作》,其中主要讲述了视音频开发的入门知识。由于感觉本课程的内容不但适合本科生,而且也比较适合无视音频基础的开发者入门使用,所以在讲课的同时也录制了一部分内容并上传到了网上,方便新手学习FFmpeg的开发。原创 2015-07-26 15:00:56 · 100364 阅读 · 192 评论 -
最简单的基于FFmpeg的移动端例子附件:SDL Android HelloWorld
本文记录一个安卓平台下SDL的例子。该例子读取并显示了一张BMP图片,通过该例子可以了解SDL在安卓平台下的使用。本文中使用的SDL版本为2.0。Android程序SDL2类库使用说明简单记录一下Android程序使用SDL2类库的方法。这部分的信息可以参考SDL2源代码目录中的README-android.txt文件。SDL2使用的步骤可以分为以下步骤:(1)配置Android工程a) 新建工程原创 2015-07-25 23:02:55 · 24267 阅读 · 27 评论 -
最简单的基于FFmpeg的移动端例子附件:Android 自带播放器
前几篇文章记录的都是安卓平台下基于FFmpeg的多媒体程序。作为对比,本文记录一个基于安卓自带多媒体框架OpenCore的视频播放器。安卓自带的多媒体框架的使用方法相对移植FFmpeg来说简单太多了,只需要调用几个接口函数就能控制视频的播放。不再过多记录它的使用方法。源代码项目的目录结构如图所示。Java源代码位于src目录。Android程序Java端代码位于src\com\leixiaohua原创 2015-07-25 20:00:30 · 31309 阅读 · 18 评论 -
最简单的基于FFmpeg的移动端例子:Android 视频转码器
本文记录一个安卓平台下基于FFmpeg的视频转码器。该转码器实际上移植自ffmpeg工程中的ffmpeg.c源代码。有关ffmpeg.c的源代码可以参考文章《ffmpeg.c函数结构简单分析(画图)》,在这里就不重复记录了。源代码项目的目录结构如图所示。Java源代码位于src目录,而C代码位于jni目录。Android程序Java端代码位于src\com\leixiaohua1020\sffmp原创 2015-07-25 17:10:54 · 79338 阅读 · 75 评论 -
最简单的基于FFmpeg的移动端例子:Android 推流器
本文记录一个安卓平台下基于FFmpeg的视频推流器。该推流器C语言的源代码来自于《最简单的基于FFMPEG的推流器》。相关的概念就不再重复记录了。源代码项目的目录结构如图所示。Java源代码位于src目录,而C代码位于jni目录。 Android程序Java端代码位于src\com\leixiaohua1020\sffmpegandroidstreamer\MainActivity.java,如下原创 2015-07-25 14:10:50 · 54943 阅读 · 74 评论 -
最简单的基于FFmpeg的移动端例子:Android 视频解码器-单个库版
本文记录另一个安卓平台下基于FFmpeg的视频解码器。与前一篇文章记录的解码器不同,本文记录的解码器不再使用libavcodec.so、libavformat.so等类库,而只使用了一个类库——libffmpeg.so。该视频解码器C语言的源代码来自于《最简单的基于FFMPEG+SDL的视频播放器》。相关的概念就不再重复记录了。FFmpeg类库的打包记录一下FFmpeg类库打包的方原创 2015-07-25 11:42:31 · 27587 阅读 · 26 评论 -
最简单的基于FFmpeg的移动端例子:Android 视频解码器
本文记录一个安卓平台下基于FFmpeg的视频解码器。该视频解码器C语言的源代码来自于《100行代码实现最简单的基于FFMPEG+SDL的视频播放器》。相关的概念就不再重复记录了。源代码项目的目录结构如图所示。Java源代码位于src目录,而C代码位于jni目录。Android程序Java端代码位于src\com\leixiaohua1020\sffmpegandroiddecoder\MainAc原创 2015-07-24 19:02:29 · 54845 阅读 · 42 评论 -
最简单的基于FFmpeg的移动端例子:Android HelloWorld
从本文开始打算记录一系列FFmpeg在Android/IOS开发的示例程序。前面几篇文章记录FFmpeg安卓端开发的例子,后面几篇文章记录FFmpeg IOS端开发的例子。这些例子中FFmpeg相关的代码源自于《FFmpeg示例合集》中的程序。本文记录第一个程序:安卓平台下基于FFmpeg的HelloWorld程序。Android程序FFmpeg类库使用说明Android应用程序使用FFmpeg类原创 2015-07-23 20:09:22 · 116476 阅读 · 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 · 19350 阅读 · 2 评论 -
最简单的基于FFMPEG的推流器附件:收流器
出于对《最简单的基于FFmpeg的推流器》的补充,本文记录一个最简单的基于FFmpeg的收流器。收流器和推流器的作用正好相反:推流器用于将本地文件以流媒体的形式发送出去,而收流器用于将流媒体内容保存为本地文件。 本文记录的推流器可以将RTMP流媒体保存成为一个本地的FLV文件。由于FFmpeg本身支持很多的流媒体协议和封装格式,所以也支持其它的封装格式和流媒体协议。源代码/** * 最简单的基于原创 2015-07-18 08:47:14 · 34573 阅读 · 21 评论 -
最简单的基于FFMPEG的Helloworld程序
本文记录一个基于FFmpeg的HelloWorld程序。该程序可以打印出FFmpeg类库的基本信息。使用该程序通常可以验证FFmpeg是否正确的安装配置。原创 2015-07-17 10:43:41 · 36581 阅读 · 16 评论 -
最简单的基于FFMPEG+SDL的音频播放器:拆分-解码器和播放器
本文补充记录《最简单的基于FFMPEG+SDL的音频播放器》中的两个例子:FFmpeg音频解码器和SDL音频采样数据播放器。这两个部分是从音频播放器中拆分出来的两个例子。FFmpeg音频解码器实现了视频数据到PCM采样数据的解码,而SDL音频采样数据播放器实现了PCM数据到音频设备的播放。简而言之,原先的FFmpeg+SDL音频播放器实现了:音频数据->PCM->音频设备FFmpeg音频解码器实现原创 2015-07-17 09:31:10 · 23369 阅读 · 14 评论 -
最简单的基于FFMPEG+SDL的视频播放器:拆分-解码器和播放器
本文补充记录《最简单的基于FFMPEG+SDL的视频播放器》中的两个例子:FFmpeg视频解码器和SDL像素数据播放器。这两个部分是从视频播放器中拆分出来的两个例子。FFmpeg视频解码器实现了视频数据到YUV数据的解码,而SDL像素数据播放器实现了YUV数据的显示。简而言之,原先的FFmpeg+SDL视频播放器实现了:视频数据->YUV->显示器FFmpeg视频解码器实现了:视频数据->YUVS原创 2015-07-16 21:57:56 · 29865 阅读 · 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 · 13587 阅读 · 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 · 11937 阅读 · 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 · 9609 阅读 · 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 · 22568 阅读 · 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 · 30074 阅读 · 2 评论 -
FFmpeg的HEVC解码器源代码简单分析:概述
从这篇文章开始,简单分析记录FFmpeg中libavcodec的HEVC(H.265)解码器(HEVC Decoder)的源代码。本文综述整个解码器的框架,后续几篇文章再对解码器的内部模块进行分析。原创 2015-06-08 14:24:57 · 20506 阅读 · 6 评论 -
FFmpeg与libx264接口源代码简单分析
本文简单记录一下FFmpeg的libavcodec中与libx264接口部分的源代码。该部分源代码位于“libavcodec/libx264.c”中。正是有了这部分代码,使得FFmpeg可以调用libx264编码H.264视频。原创 2015-05-25 01:48:07 · 28745 阅读 · 4 评论 -
FFmpeg的H.264解码器源代码简单分析:环路滤波(Loop Filter)部分
本文分析FFmpeg的H.264解码器的环路滤波(Loop Filter)部分。FFmpeg的H.264解码器调用decode_slice()函数完成了解码工作。这些解码工作可以大体上分为3个步骤:熵解码,宏块解码以及环路滤波。本文分析这3个步骤中的第3个步骤。原创 2015-04-23 18:16:26 · 20454 阅读 · 5 评论 -
FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧间宏块(Inter)
本文继续分析FFmpeg的H.264解码器的宏块解码(Decode)部分。上一篇文章已经记录了帧内预测宏块(Intra)的宏块解码,本文继续上一篇文章的内容,记录帧间预测宏块(Inter)的宏块解码。原创 2015-04-22 16:00:31 · 17511 阅读 · 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 · 33619 阅读 · 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 · 23946 阅读 · 4 评论 -
FFmpeg的H.264解码器源代码简单分析:解码器主干部分
本文分析FFmpeg的H.264解码器的主干部分。“主干部分”是相对于“熵解码”、“宏块解码”、“环路滤波”这些细节部分而言的。它包含了H.264解码器直到decode_slice()前面的函数调用关系(decode_slice()后面就是H.264解码器的细节部分,主要包含了“熵解码”、“宏块解码”、“环路滤波”3个部分)。原创 2015-04-14 16:04:50 · 23658 阅读 · 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 · 70233 阅读 · 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 · 50328 阅读 · 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 · 21117 阅读 · 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 · 18559 阅读 · 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 · 95833 阅读 · 12 评论 -
FFmpeg源代码简单分析:makefile
本文记录FFmpeg的Makefile的源代码。Makefile用于编译FFmpeg的源代码。通过分析Makefile文件,可以了解FFmpeg的源代码生成的流程。有关Makefile这部分我本身基础不算很牢,很多地方还在慢慢摸索,所以分析的内容不能保证完全准确。以后有时间和其他朋友多交流再慢慢完善这篇文章。注:make有一个很有用的命令:“make -n”。该选项会显示命令,但不会执行命令,十分原创 2015-03-23 11:22:29 · 39226 阅读 · 6 评论 -
FFmpeg源代码简单分析:libswscale的sws_scale()
本文继续上一篇文章《FFmpeg源代码分析:sws_getContext()》的内容,简单分析FFmpeg的图像处理(缩放,YUV/RGB格式转换)类库libswsscale中的sws_scale()函数。libswscale是一个主要用于处理图片像素数据的类库。可以完成图片像素格式的转换,图片的拉伸等工作。有关libswscale的使用可以参考文章:《最简单的基于FFmpeg的libswscal原创 2015-03-17 20:02:33 · 43033 阅读 · 8 评论 -
FFmpeg源代码简单分析:libswscale的sws_getContext()
打算写两篇文章记录FFmpeg中的图像处理(缩放,YUV/RGB格式转换)类库libswsscale的源代码。libswscale是一个主要用于处理图片像素数据的类库。可以完成图片像素格式的转换,图片的拉伸等工作。原创 2015-03-17 12:16:43 · 42932 阅读 · 8 评论 -
FFmpeg源代码简单分析:结构体成员管理系统-AVOption
本文继续上篇文章《FFmpeg源代码分析:结构体成员管理系统-AVClass》中的内容,记录FFmpeg中和AVOption相关的源代码。AVOption用于在FFmpeg中描述结构体中的成员变量。一个AVOption可以包含名称,简短的帮助信息,取值等等。上篇文章简单回顾上篇文章中概括了AVClass,AVOption和目标结构体之间的关系。以AVFormatContext为例,可以表示为下图。原创 2015-03-16 09:41:56 · 23016 阅读 · 3 评论