![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DirectShow
文章平均质量分 80
雷霄骅
这个作者很懒,什么都没留下…
展开
-
一个简单的基于 DirectShow 的播放器 1(封装类)
DirectShow最主要的功能就是播放视频,在这里介绍一个简单的基于DirectShow的播放器的例子,是用MFC做的,今后有机会可以基于该播放器开发更复杂的播放器软件。注:该例子取自于《DirectShow开发指南》首先看一眼最终结果,如图所示,播放器包含了:打开,播放,暂停,停止等功能。该图显示正在播放周杰伦的《听妈妈的话》。迅速进入主题,看一看工程是由哪些文件组成的,如原创 2013-10-26 00:20:29 · 8969 阅读 · 9 评论 -
LAV Filter 源代码分析 1: 总体结构
LAV Filter 是一款视频分离和解码软件,他的分离器封装了FFMPEG中的libavformat,解码器则封装了FFMPEG中的libavcodec。它支持十分广泛的视音频格式。源代码位于GitHub或Google Code:https://github.com/Nevcairiel/LAVFiltershttp://code.google.com/p/lavfilters/本文分...2013-10-14 17:12:00 · 348 阅读 · 0 评论 -
LAV Filter 源代码分析 2: LAV Splitter
LAV Filter 中最著名的就是LAV Splitter,支持Matroska /WebM,MPEG-TS/PS,MP4/MOV,FLV,OGM / OGG,AVI等其他格式,广泛存在于各种视频播放器(暴风影音这类的)之中。本文分析一下它的源代码。在分析之前,先看看它是什么样的。使用GraphEdit随便打开一个视频文件,就可以看见LAV Filter:可以右键点击这个Fil...2013-10-14 21:06:00 · 492 阅读 · 0 评论 -
引用计数和AddRef、Release
AddRef和Release实现的是一种名为引用计数的内存管理技术,这种技术是使组件能够自己将自己删除的最简单同时也是效率最高的方法。COM组件将维护一个称作是引用计数的数值。当客户虫组件取得一个接口时,此数值增1,当客户使用完某个接口后,此数值将减1。当此数值为0时,组件即可将自己从内存中删除。为正确的使用引用计数,需要了解一下三条规则:(1)在返回之前调用AddRef。对于哪些返回接...2013-10-14 23:22:00 · 286 阅读 · 0 评论 -
DirectShow 在 VS2010 中开发环境的设置
心血来潮想玩玩DirectShow,在网上查了很多资料都是讲VC6的,所以照着资料慢慢配置。大致过程和VC6下的是一样的,但差别还是有的。 具体过程可以参照这篇文章:在vs2005中配置directshow开发环境 由于现在directShow没有和direcxtx一起发布,而是和windows sdk 打包发布了,可以到官网下载最新的windows sdk 开发包。wi...2013-10-16 15:40:00 · 274 阅读 · 0 评论 -
一个简单的基于 DirectShow 的播放器 1(封装类)
DirectShow最主要的功能就是播放视频,在这里介绍一个简单的基于DirectShow的播放器的例子,是用MFC做的,今后有机会可以基于该播放器开发更复杂的播放器软件。注:该例子取自于《DirectShow开发指南》首先看一眼最终结果,如图所示,播放器包含了:打开,播放,暂停,停止等功能。该图显示正在播放周杰伦的《听妈妈的话》。迅速进入主题,看一看工程是由哪些文件组成的,如下...2013-10-26 00:20:00 · 421 阅读 · 0 评论 -
一个简单的基于 DirectShow 的播放器 2(对话框类)
上篇文章分析了一个封装DirectShow各种接口的封装类(CDXGraph):一个简单的基于 DirectShow 的播放器 1(封装类)本文继续上篇文章,分析一下调用这个封装类(CDXGraph)的对话框类(CSimplePlayerDlg),看看在MFC中如何使用这个类(CDXGraph)。首先来看看CSimplePlayerDlg这个类的定义,瞧瞧SimplePlayerDlg....2013-10-26 00:44:00 · 297 阅读 · 0 评论 -
50行代码实现的一个最简单的基于 DirectShow 的视频播放器
本文介绍一个最简单的基于 DirectShow 的视频播放器。该播放器对于初学者来说是十分有用的,它包含了使用DirectShow 播放视频所有必备的函数。直接贴上代码,具体代码的含义都写在注释中了: /* 雷霄骅 * 中国传媒大学/数字电视技术 * leixiaohua1020@126.com * */// aviplayer.cpp : 定义控制台应用程序的入...2013-10-26 12:10:00 · 468 阅读 · 0 评论 -
LAV Filter 源代码分析 3: LAV Video (1)
LAV Video 是使用很广泛的DirectShow Filter。它封装了FFMPEG中的libavcodec,支持十分广泛的视频格式的解码。在这里对其源代码进行详细的分析。LAV Video 工程代码的结构如下图所示直接看LAV Video最主要的类CLAVVideo吧,它的定义位于LAVVideo.h中。LAVVideo.h /* 雷霄骅 * 中国传媒大学/数...2013-10-27 20:58:00 · 369 阅读 · 0 评论 -
DirectShow Filter 开发典型例子分析 ——字幕叠加 (FilterTitleOverlay)1
本文分析一下《DirectShow开发指南》中的一个典型的Transform Filter的例子:字幕叠加(FilterTitleOverlay)。通过分析该例子,我们可以学习到DirectShowTransform Filter 开发的方式。直接打开项目工程(我这里是VC2010),看到项目的结构如下图所示: 先看一下运行的结果:注意,DirectShow的Filter是不...2013-10-09 12:47:00 · 484 阅读 · 0 评论 -
开源DirectShow分析器和解码器: LAV Filter
LAV Filter是一款开源的DirectShow视频分离和解码软件,他的分离器LAVSplitter封装了FFMPEG中的libavformat,解码器LAVAudio和LAVVideo则封装了FFMPEG中的libavcodec。它支持十分广泛的视音频格式。支持状况: 封装格式: MKV/WebM, AVI, MP4/MOV, MPEG-TS/PS (including basic E...2013-09-21 10:43:00 · 470 阅读 · 0 评论 -
最简单的基于DirectShow的示例:获取Filter信息
本文记录一个获取DirectShow的Filter信息的程序。该程序可以遍历当前系统中的DirectShow Filter并且将它们的信息打印到控制台中。通过本程序可以搞清楚DirectShow中Filter,Pin,MediaType等几个关键结构之间的关系,以及它们的信息的获取方法。原创 2015-01-12 21:03:08 · 21539 阅读 · 5 评论 -
一个简单的基于 DirectShow 的播放器 2(对话框类)
上篇文章分析了一个封装DirectShow各种接口的封装类(CDXGraph):一个简单的基于 DirectShow 的播放器 1(封装类)本文继续上篇文章,分析一下调用这个封装类(CDXGraph)的对话框类(CSimplePlayerDlg),看看在MFC中如何使用这个类(CDXGraph)。首先来看看CSimplePlayerDlg这个类的定义,瞧瞧SimplePlayerDlg.原创 2013-10-26 00:44:19 · 4190 阅读 · 4 评论 -
50行代码实现的一个最简单的基于 DirectShow 的视频播放器
本文介绍一个最简单的基于 DirectShow 的视频播放器。该播放器对于初学者来说是十分有用的,它包含了使用 DirectShow 播放视频所有必备的函数。直接贴上代码,具体代码的含义都写在注释中了:/* 雷霄骅 * 中国传媒大学/数字电视技术 * leixiaohua1020@126.com * */// aviplayer.cpp : 定义控制台应用程序的入口点。#原创 2013-10-26 12:10:13 · 4996 阅读 · 6 评论 -
DirectShow Filter 开发典型例子分析 ——字幕叠加 (FilterTitleOverlay)1
本文分析一下《DirectShow开发指南》中的一个典型的Transform Filter的例子:字幕叠加(FilterTitleOverlay)。通过分析该例子,我们可以学习到DirectShow Transform Filter 开发的方式。直接打开项目工程(我这里是VC2010),看到项目的结构如下图所示:先看一下运行的结果:注意,DirectShow的Filte原创 2013-10-09 12:47:36 · 12622 阅读 · 6 评论 -
DirectShow 在 VS2010 中开发环境的设置
心血来潮想玩玩DirectShow,在网上查了很多资料都是讲VC6的,所以照着资料慢慢配置。大致过程和VC6下的是一样的,但差别还是有的。具体过程可以参照这篇文章:在vs2005中配置directshow开发环境 由于现在directShow没有和direcxtx一起发布,而是和windows sdk 打包发布了,可以到官网下载最新的windows sdk转载 2013-10-16 15:40:51 · 4373 阅读 · 4 评论 -
FFMPEG列出DirectShow支持的设备
FFMPEG列出dshow支持的设备: ffmpeg -list_devices true -f dshow -idummy举例:采集摄像头和麦克风ffmpeg -f dshow -i video="Camera":audio="Microphone"(摄像头名称是Camera,麦克风名称是Microphone) 比如说,在我的笔记本上采集10秒的视频,并且使用x264转载 2013-11-22 13:13:38 · 14875 阅读 · 2 评论 -
最简单的基于DirectShow的示例:视频播放器自定义版
本文记录一个简单的基于DirectShow的自定义的视频播放器。这里所说的“自定义播放器”,实际上指的是自己在Filter Graph中手动逐个添加Filter,并且连接这些Filter的后运行的播放器。这么做相对于使用RenderFile()这种“智能”创建Filter Graph的方法来说要复杂不少,但是可以让我们更加了解DirectShow的体系。流程图最简单的基于DirectShow的自定原创 2015-01-11 18:05:19 · 13530 阅读 · 2 评论 -
最简单的基于DirectShow的示例:视频播放器
本文记录一个最简单的基于DirectShow的视频播放器。DirectShow是一个庞大的框架,可以在Windows下实现多种多样的视频处理需求。但是它的“庞大”也使得新手不太容易学习它的使用。本文的例子正是为解决这一问题而做的,它只包含了使用DirectShow播放一个视频文件所需要的最重要的函数。流程图最简单的使用DirectShow播放视频文件的流程如下图所示。流程图中涉及到几个接口如下所示原创 2015-01-10 18:29:47 · 23578 阅读 · 18 评论 -
最简单的基于DirectShow的示例:视频播放器图形界面版
本文记录一个最简单的基于DirectShow的图形界面的视频播放器。基于DirectShow的图形界面的播放器的例子还是比较多的,但是大部分都是“层层封装”的例子。“层层封装”的例子相对来说更加稳定,但是却不是很容易理解。因为DirectShow本身的接口函数的数量就比较多,如果再加上封装DirectShow的函数,合起来的函数数量是非常大的,很容易让人搞不清哪些才是真正的DirectShow接口原创 2015-01-11 11:22:30 · 10454 阅读 · 1 评论 -
LAV Filter 源代码分析 4: LAV Video (2)
上一篇文章分析了LAV Filter 中的LAV Video的两个主要的类:CLAVVideo和CDecodeThread。文章:LAV Filter 源代码分析 3: LAV Video (1)在这里继续上篇文章的内容。文章中提到LAVVideo主要通过CDecodeThread这个类进行解码线程的管理,其中有一个关键的管理函数:ThreadProc(),包含了对解码线程的各种操作。函数如...2013-10-27 21:47:00 · 562 阅读 · 1 评论