开源多媒体项目源代码分析
文章平均质量分 81
分析当前使用较多的开源多媒体工程的源代码,包括:FFmpeg,Live555,RTMPdump,ffdshow,Media Player Classic等等
雷霄骅
这个作者很懒,什么都没留下…
展开
-
x264源代码简单分析:熵编码(Entropy Encoding)部分
本文记录x264的 x264_slice_write()函数中调用的x264_macroblock_write_cavlc()的源代码。x264_macroblock_write_cavlc()对应着x264中的熵编码模块。熵编码模块主要完成了编码数据输出的功能。原创 2015-05-24 22:48:12 · 15272 阅读 · 6 评论 -
x264源代码简单分析:宏块编码(Encode)部分
本文记录x264的 x264_slice_write()函数中调用的x264_macroblock_encode()的源代码。x264_macroblock_encode()对应着x264中的宏块编码模块。宏块编码模块主要完成了DCT变换和量化两个步骤。函数调用关系图宏块编码(Encode)部分的源代码在整个x264中的位置如下图所示。单击查看更清晰的图片宏块编码(Encode)部分的函数调用关系原创 2015-05-24 13:47:40 · 16081 阅读 · 4 评论 -
x264源代码简单分析:宏块分析(Analysis)部分-帧间宏块(Inter)
本文记录x264的 x264_slice_write()函数中调用的x264_macroblock_analyse()的源代码。x264_macroblock_analyse()对应着x264中的分析模块。分析模块主要完成了下面2个方面的功能:(1)对于帧内宏块,分析帧内预测模式(2)对于帧间宏块,进行运动估计,分析帧间预测模式上一篇文章记录了帧内宏块预测模式的分析,本文继续记录帧间宏块预测模式的分析。原创 2015-05-23 19:07:49 · 18550 阅读 · 3 评论 -
x264源代码简单分析:宏块分析(Analysis)部分-帧内宏块(Intra)
本文记录x264的 x264_slice_write()函数中调用的x264_macroblock_analyse()的源代码。x264_macroblock_analyse()对应着x264中的分析模块。分析模块主要完成了下面2个方面的功能:(1)对于帧内宏块,分析帧内预测模式(2)对于帧间宏块,进行运动估计,分析帧间预测模式原创 2015-05-22 16:08:02 · 22897 阅读 · 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 · 14148 阅读 · 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 · 16746 阅读 · 5 评论 -
x264源代码简单分析:编码器主干部分-2
本文继续记录x264编码器主干部分的源代码。上一篇文章记录x264_encoder_open(),x264_encoder_headers(),和x264_encoder_close()这三个函数,本文记录x264_encoder_encode()函数。原创 2015-05-14 14:14:43 · 20216 阅读 · 4 评论 -
x264源代码简单分析:编码器主干部分-1
本文分析x264编码器主干部分的源代码。“主干部分”指的就是libx264中最核心的接口函数——x264_encoder_encode(),以及相关的几个接口函数x264_encoder_open(),x264_encoder_headers(),和x264_encoder_close()。这一部分源代码比较复杂,现在看了半天依然感觉很多地方不太清晰,暂且把已经理解的地方整理出来,以后再慢慢补充还不太清晰的地方。原创 2015-05-11 17:10:51 · 30650 阅读 · 13 评论 -
x264源代码简单分析:x264命令行工具(x264.exe)
本文简单分析x264项目中的命令行工具(x264.exe)的源代码。该命令行工具可以调用libx264将YUV格式像素数据编码为H.264码流。原创 2015-05-08 18:30:23 · 25698 阅读 · 2 评论 -
x264源代码简单分析:概述
最近正在研究H.264和HEVC的编码方式,因此分析了一下最常见的H.264编码器——x264的源代码。本文简单梳理一下它的结构。X264的源代码量比较大而且涉及到很多的算法,目前还有很多不懂的地方,因此也不能保证分析的完全正确。目前打算先把已经理解的部分整理出来以作备忘。原创 2015-05-06 15:53:49 · 65124 阅读 · 26 评论 -
SDL2源代码分析8:视频显示总结
本文简单总结一下SDL显示视频的源代码。SDL显示视频的结构体SDL显示视频涉及到下列结构体:SDL_Window:代表了窗口SDL_Renderer:代表了渲染器SDL_Texture:代表了纹理SDL_Rect:一个矩形框,用于确定纹理显示的位置。上述几个结构体之间的关系如下图所示。注:该图源自于文章《最简单的基于FFmpeg+SDL的视频播放器2》 由图可见,YUV/RGB像素数据首先加载至原创 2014-11-18 00:25:14 · 15872 阅读 · 5 评论 -
SDL2源代码分析7:显示(SDL_RenderPresent())
上一篇文章分析了SDL纹理赋值给渲染目标的函数SDL_RenderCopy()。这篇文章分析SDL显示视频最后的一个函数:SDL_RenderPresent()。原创 2014-11-09 00:59:05 · 16692 阅读 · 4 评论 -
SDL2源代码分析6:复制到渲染器(SDL_RenderCopy())
上一篇文章分析了SDL更新纹理像素数据的函数SDL_UpdateTexture()。这篇文章继续分析SDL的源代码。本文分析SDL纹理复制到渲染目标的函数SDL_RenderCopy()。原创 2014-11-08 00:54:00 · 13719 阅读 · 2 评论 -
SDL2源代码分析5:更新纹理(SDL_UpdateTexture())
上一篇文章分析了SDL的创建纹理函数SDL_CreateTexture()。这篇文章继续分析SDL的源代码。本文分析SDL更新纹理数据函数SDL_UpdateTexture()。原创 2014-11-07 01:02:07 · 22672 阅读 · 4 评论 -
SDL2源代码分析4:纹理(SDL_Texture)
上一篇文章分析了SDL中创建渲染器的函数SDL_CreateRenderer()。这篇文章继续分析SDL的源代码。本文分析SDL的纹理(SDL_Texture)。原创 2014-11-05 12:35:17 · 23038 阅读 · 5 评论 -
SDL2源代码分析3:渲染器(SDL_Renderer)
上一篇文章分析了SDL中创建窗口的函数SDL_CreateWindow()。这篇文章继续分析SDL的源代码。本文分析SDL的渲染器(SDL_Renderer)。原创 2014-11-04 00:24:32 · 34795 阅读 · 2 评论 -
SDL2源代码分析2:窗口(SDL_Window)
上一篇文章分析了SDL的初始化函数SDL_Init()。这篇文章继续分析SDL的源代码。本文分析SDL的窗口(Window)。原创 2014-11-03 00:31:11 · 43178 阅读 · 0 评论 -
SDL2源代码分析1:初始化(SDL_Init())
打算花一段时间研究一下SDL的内部代码。前面几篇文章《最简单的视音频播放示例1:总述》中记录了视频、音频播放的技术,文中提及了SDL实际上封装了Direct3D,DirectSound这类的底层API。但是SDL究竟是如何封装的呢?这次打算深入其源代码一探究竟,看看它是如何封装这些API的。SDL简介有关SDL的简介在《最简单的视音频播放示例7:SDL2播放RGB/YUV》以及《最简单的视音频播放原创 2014-11-01 15:46:06 · 40384 阅读 · 10 评论 -
小试ImageMagik——开发篇
本文介绍使用ImageMagick开发程序的方法。ImageMagick安装之后就可以支持C/C++程序的开发,提供了3种接口。在这里首先介绍一下ImageMagick的3种接口。MagickCore:底层的C语言接口。较复杂,但是可以修改很多参数,只适合高端用户使用。MagickWand:推荐的C语言接口。相比于MagickCore接口,简单很多。适合普通用户使用。Magick++:提供面向对象的C++接口。原创 2014-05-24 00:11:13 · 11688 阅读 · 1 评论 -
小试ImageMagik——使用篇
前两天帮同学调了一个小程序,是有关ImageMagik的。ImageMagik之前早有耳闻,据说处理图片的功能很强大,几乎都能把PhotoShop给替代了,但是一直没有机会尝试。于是顺便尝试了一下,记录一下它的使用方法和开发方法。 首先记录一下它的简介,是从百度百科上看到的:ImageMagick是一套功能强大、稳定而且开源的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片原创 2014-05-23 00:04:29 · 10139 阅读 · 2 评论 -
XBMC源代码分析 7:视频播放器(dvdplayer)-输入流(以libRTMP为例)
本文我们分析XBMC中视频播放器(dvdplayer)中的输入流部分。由于输入流种类很多,因此以RTMP输入流为例进行分析。XBMC中输入流部分文件目录结构如下图所示。原创 2014-01-10 01:05:43 · 10072 阅读 · 0 评论 -
XBMC源代码分析 6:视频播放器(dvdplayer)-文件头(以ffmpeg为例)
本文我们分析XBMC中视频播放器(dvdplayer)中的文件头部分。文件头部分里包含的是封装Dll用到的头文件。由于文件头种类很多,不可能一一分析,因此还是以ffmpeg文件头为例进行分析。XBMC中文件头部分文件目录结构如下图所示。原创 2014-01-09 00:28:26 · 8858 阅读 · 8 评论 -
XBMC源代码简析 5:视频播放器(dvdplayer)-解复用器(以ffmpeg为例)
本文我们分析XBMC中视频播放器(dvdplayer)中的解复用器部分。由于解复用器种类很多,不可能一一分析,因此以ffmpeg解复用器为例进行分析。XBMC解复用器部分文件目录如下图所示:原创 2014-01-08 00:03:28 · 8631 阅读 · 5 评论 -
XBMC源代码分析 4:视频播放器(dvdplayer)-解码器(以ffmpeg为例)
XBMC分析系列文章:XBMC源代码分析 1:整体结构以及编译方法XBMC源代码分析 2:Addons(皮肤Skin)XBMC源代码分析 3:核心部分(core)-综述本文我们分析XBMC中视频播放器(dvdplayer)中的解码器部分。由于解码器种类很多,不可能一一分析,因此以ffmpeg解码器为例进行分析。XBMC解码器部分文件目录如下图所示:原创 2014-01-07 00:03:53 · 12703 阅读 · 3 评论 -
XBMC源代码分析 3:核心部分(core)-综述
前文分析了XBMC的整体结构以及皮肤部分:XBMC源代码分析 1:整体结构以及编译方法XBMC 源代码分析 2:Addons(皮肤Skin)本文以及以后的文章主要分析XBMC的VC工程中的源代码。XBMC源代码体积庞大,想要完全分析所有代码是比较困难的。在这里我们选择它和音视频编解码有关的部分进行分析。在本文里,我们主要分析其核心部分(core)代码。原创 2014-01-02 13:07:29 · 8321 阅读 · 5 评论 -
XBMC源代码分析 2:Addons(皮肤Skin)
前文已经对XBMC源代码的整体架构进行了分析:XBMC源代码分析 1:整体结构以及编译方法从这篇文章开始,就要对XBMC源代码进行具体分析了。首先先不分析其C++代码,分析一下和其皮肤相关的代码。XBMC 的和皮肤相关的代码位于 "根目录/addons" 里面。可以从官方网站上下载皮肤文件的压缩包,然后解压到该目录下面即可。皮肤文件夹名称一般是“skin.XXXX”形式的,即以“skin.”开头。原创 2014-01-01 00:28:09 · 9890 阅读 · 0 评论 -
XBMC源代码分析 1:整体结构以及编译方法
XBMC(全称是XBOX Media Center)是一个开源的媒体中心软件。XBMC最初为Xbox而开发,可以运行在Linux、OSX、Windows、Android4.0系统。我自己下载了一个然后体验了一下,感觉确实不错,和Windows自带的媒体中心差不多。XBMC项目首页:http://xbmc.org/XBMC差不多是我接触到的开源多媒体项目中体积最大的了。但是它的编译方法却出乎意料的简单。我按照它的Wiki上面说的步骤去做,非常顺利的完成了编译,没有遇到任何错误,赞一个。原创 2013-12-31 00:17:37 · 23828 阅读 · 0 评论 -
ffdshow 源代码分析 9: 编解码器有关类的总结
前几篇文章已经完成了ffdshow解码器封装的大部分代码的分析:ffdshow 源代码分析 6: 对解码器的dll的封装(libavcodec)ffdshow 源代码分析 7: libavcodec视频解码器类(TvideoCodecLibavcodec)ffdshow 源代码分析 8: 视频解码器类(TvideoCodecDec)本文再做最后一点的分析原创 2013-11-13 00:33:44 · 7669 阅读 · 9 评论 -
ffdshow 源代码分析 8: 视频解码器类(TvideoCodecDec)
前面两篇文章介绍了ffdshow中libavcodec的封装类Tlibavcodec,以及libavcodec的解码器类TvideoCodecLibavcodec:ffdshow 源代码分析 6: 对解码器的dll的封装(libavcodec)ffdshow 源代码分析 7: 解码器类(TvideoCodecLibavcodec)其中libavcodec的解码器类TvideoC原创 2013-11-13 00:06:50 · 7086 阅读 · 0 评论 -
ffdshow 源代码分析 7: libavcodec视频解码器类(TvideoCodecLibavcodec)
前文已经介绍了ffdshow中对libavcodec封装的类Tlibavcodec 在这里我们进一步介绍一下其libavcodec解码器类。注意前一篇文章介绍的类Tlibavcodec仅仅是对libavcodec所在的“ffmpeg.dll”的函数进行封装的类。但Tlibavcodec并不是一个解码器类,其没有继承任何类,还不能为ffdshow所用。本文介绍的TvideoCodecLiba原创 2013-11-12 00:36:32 · 8283 阅读 · 0 评论 -
ffdshow 源代码分析 6: 对解码器的dll的封装(libavcodec)
ffdshow封装了多个视音频解码器,比如libmpeg2,libavcodec,xvid等等。其中最重要的是libavcodec,这个是ffmpeg提供的解码器,在ffdshow中起到了“挑大梁”的作用。本文分析ffdshow对解码器的封装方式,就以libavcodec为例。 在ffdshow中,libavcodec的被封装在ffmpeg.dll文件中,通过加载该dll中的函数,就可以使原创 2013-11-12 00:09:11 · 9298 阅读 · 1 评论 -
LIRe 源代码分析 7:算法类[以颜色布局为例]
前面关于LIRe的文章,介绍的都是架构方面的东西,没有细研究具体算法。本文以颜色布局为例,介绍一下算法类的实现。颜色布局描述符以一种非常紧密的形式有效地表示了图像的颜色空间分布信息。它以非常小的计算代价, 带来高的检索效率。因此, 颜色布局特征在视频镜头关键帧提取中有很重要的意义。颜色布局提取方法如下:原创 2013-11-02 22:10:31 · 5703 阅读 · 0 评论 -
LIRe 源代码分析 6:检索(ImageSearcher)[以颜色布局为例]
前几篇文章介绍了LIRe 的基本接口,以及建立索引的过程。现在来看一看它的检索部分(ImageSearcher)。不同的方法的检索功能的类各不相同,它们都位于“net.semanticmetadata.lire.impl”中,如下图所示:原创 2013-11-02 20:43:39 · 5734 阅读 · 1 评论 -
LIRe 源代码分析 5:提取特征向量[以颜色布局为例]
在上一篇文章中,讲述了建立索引的过程。这里继续上一篇文章的分析。在ColorLayoutDocumentBuilder中,使用了一个类型为ColorLayout的对象vd,并且调用了vd的extract()方法:原创 2013-11-02 17:24:48 · 6861 阅读 · 5 评论 -
LIRe 源代码分析 4:建立索引(DocumentBuilder)[以颜色布局为例]
前几篇文章介绍了LIRe 的基本接口。现在来看一看它的实现部分,本文先来看一看建立索引((DocumentBuilder))部分。不同的特征向量提取方法的建立索引的类各不相同,它们都位于“net.semanticmetadata.lire.impl”中,如下图所示:原创 2013-11-02 16:45:49 · 6161 阅读 · 5 评论 -
LIRe 源代码分析 3:基本接口(ImageSearcher)
上篇文章介绍了LIRe源代码里的DocumentBuilder的几个基本接口。本文继续研究一下源代码里的ImageSearcher的几个基本接口。下面来看看与ImageSearcher相关的类的定义:原创 2013-10-31 20:48:59 · 7001 阅读 · 2 评论 -
LIRe 源代码分析 2:基本接口(DocumentBuilder)
本文分析LIRe的基本接口。LIRe的基本接口完成的工作不外乎两项:生成索引和检索。生成索引就是根据图片提取特征向量,然后存储特征向量到索引的过程。检索就是根据输入图片的特征向量到索引中查找相似图片的过程。原创 2013-10-31 19:24:27 · 7191 阅读 · 0 评论 -
LIRe 源代码分析 1:整体结构
LIRE(Lucene Image REtrieval)提供一种的简单方式来创建基于图像特性的Lucene索引。利用该索引就能够构建一个基于内容的图像检索(content- based image retrieval,CBIR)系统,来搜索相似的图像。在这里就不多进行介绍了,已经写过相关的论文:原创 2013-10-31 18:52:38 · 9335 阅读 · 4 评论 -
Media Player Classic - HC 源代码分析 7:详细信息选项卡(CPPageFileInfoDetails)
本文分析一下mpc-hc的详细信息选项卡。在播放视频的时候,右键点击视频->选择“属性”后默认打开的就是该选项卡。一般情况下,该选项卡给出了正在播放的视频文件的一些基本参数:视频大小,分辨率,时长等。注意:详细信息选项卡和MediaInfo选项卡获得视频参数的原理是不一样的。详细信息选项卡是通过调用DirectShow函数接口而获得的视频的参数。而MediaInfo选项卡则是通过调用MediaInfo类库而获得视频的参数。原创 2013-10-31 00:33:25 · 6978 阅读 · 0 评论 -
ffdshow 源代码分析 5: 位图覆盖滤镜(总结)
在此,用一张图总结他们之间的关系:如图中所示,设置(Settings)部分是直接和系统上层关联的,它包含两个接口函数:createPages()和createFilters()。分别用于创建对话框(Dialog)和滤镜(Filter)。其中在TbitmapPage中对话框直接和注册表变量关联。而在TbitmapSettings中注册表变量和系统中的变量关联。TimgFilterBitmap最终读取TbitmapSettings中的变量完成相应的操作。目前来开TimgFilterBitmap是不会直接原创 2013-10-30 19:38:27 · 5141 阅读 · 0 评论