c#中用DirectShow实现媒体播放器
原文地址:https://www.cnblogs.com/aiqingqing/p/4338448.html
用.net做多媒体开发的似乎不多,所以网上资源也少,看的人更少。不过我的博客上居然还有几位在等新文章的人,有点出乎我的意料了。目前我已不再从事多媒体相关的工作,加入新公司至今都忙到吐血,再加上害怕水平不够误人子弟,所以一直都没有更新这个系列。但是之前有承诺过得着空就一定要更新,现在总算稍微空了那么一点点,继续烂着这个坑的理由就没有了。
DirectShow是微软平台上处理多媒体相关事务的一个平台,本身是基于COM技术上的框架,所以可以和.net配合的非常好。在这套框架里,多媒体相关事务被分成一个一个的子任务,每个任务都放在一些名为Filter的COM组件里。如果你只是做一些简单的工作,那么微软自带的那些filter估计已经够用了;但是如果你还有更高级的任务要完成,那么写filter估计就不可避免了。在陷入到细节的泥潭之前,我们先给DirectShow拍个快照以便有一个整体的印象。
一开始
火星人用竹竿捅下地球人的探测器后,在里面发现了一张光盘,火星人的计算机水平都巨高无比,他们在硬盘上用小刀刻一个操作系统只需要三分钟(相信我,还是破解版的),他们很想看看光盘里的内容,因为火星人是如此的土,以至于饭岛爱去世的新闻都不知道,还都在等她的无码片。
现在他们有操作系统了,他们也有光驱,他们什么都有,可是他们没有播放器。火星人上有个广电不急,时刻准备把那一小撮不明真相的不看电视的群众消灭干净。火星人只看电视。
可是在饭岛爱面前,广电不急一败涂地,火星人打算用他们的智慧开发出一款播放器,来观看精彩的饭岛爱无码片,他们不怕死。很快他们就画出了草图:
后来
火星人发现把所有的功能都放到一个盒子里不好。虽然没有老板检测他们的代码,逼他们加班重写,扣他们工资,但他们都是计算机水平巨高无比的生物,他们甚至知道27种设计模式,他们忍受不了如此丑陋的代码。火星人中最顶尖的精英们在火星人领袖的“带三个表”理论中悟出真理,他们认为,把盒子分成三部分一定是完美无缺的,于是他们又画出了这样的草图:
![]()
富有远见的火星人料想到播放的源一定会变,必须在源上抽象出一个名叫Capture Filter的东西来。他们还专门给声卡显卡等硬件抽象出一个Render Filter,因为火星上的雕刻家三分钟就能雕刻出一款新的声卡或者显卡,他们还向全火星人民保证,坚决不跟低版本的硬件相兼容。剩下所有的逻辑都塞在名为Transfer Filter的小黑盒子里。
再后来
火星人在眼睛更重要还是耳朵更重要的原则问题上一直有分歧,后来这种分歧越来越大,以至于到了不可调和的程度。他们终于分裂成了眼睛派和耳朵派。十分不幸的是,最初开发播放器的那两个核心火星人分属于不同的派别,他们互相看不起对方,认为自己的Transfer Filter居然有异教徒参与,根本就是对自己的侮辱,所以在一个月黑风高的夜晚,他们把Transfer Filter也分裂了:
![]()
在名为Demux的小屋里,多媒体流被分成了视频流和音频流两路,从此分道扬镳老死不相往来,但是每天新闻不联播之后整点报时那会儿,他们俩却会不约而同的掏出手表校对时间,仿佛冥冥中有人安排了他们的命运一样(Demux在后面哈哈狞笑)。
最后
源于想看饭岛爱的这款播放器越来越流行,以至于所有的火星人都拥有一款。火星上的五毛党为了让更多的火星人能用播放器倾听老大哥的教诲,开发出了接收地面电视信号的Capture filter。火星人不久之后还发明了网络,见网游吐过三次血的一猥琐男在第一时间开发了接收网络信号的Capture Filter。如此等等。随着时间的流失,最初只有一条的多媒体流分支越来越多,挂在线上的Filter也越来越多。地球探测器登录火星一百周年庆上,火星人给播放器最后拍了一张照片,看起来像这个样子:
![]()
他们管这套框架叫DirectShow
c#中用DirectShow实现媒体播放器的更多相关文章
- c#中用DirectShow实现媒体播放器的核心(1) DirectShow简介
用.net做多媒体开发的似乎不多,所以网上资源也少,看的人更少.不过我的博客上居然还有几位在等新文章的人,有点出乎我的意料了.目前我已不再从事多媒体相关的工作,加入新公司至今都忙到吐血,再加上害怕水平 ...
- C#编写媒体播放器--Microsoft的Directx提供的DirectShow组件,该组件的程序集QuartzTypeLib.dll.
使用C#编写媒体播放器时,需要用到Microsoft的Directx提供的DirectShow组件.用该组件前需要先注册程序集QuartzTypeLib.dll. 1.用QuartzTypeLib.d ...
- JavaScript自定义媒体播放器
使用<audio>和<video>元素的play()和pause()方法,可以手工控制媒体文件的播放.组合使用属性.事件和这两个方法,很容易创建一个自定义的媒体播放器,如下面的 ...
- (原创)jQuery Media Plugin-jQuery的网页媒体播放器插件的使用心得
jQuery Media Plugin是一款基于jQuery的网页媒体播放器插件,它支持大部分的网络多媒体播放器和多媒体格式,比如:Flash, Windows Media Player, Real ...
- Plyr – 简单,灵活的 HTML5 媒体播放器
Plyr 是一个简单的 HTML5 媒体播放器,包含自定义的控制选项和 WebVTT 字幕.它是只支持现代浏览器,轻量,方便和可定制的媒体播放器.还有的标题和屏幕阅读器的全面支持. 在线演示 ...
- 【C语言入门教程】4.10 综合实例 - 媒体播放器
4.10.1 建立播放列表 数据字典 名称 数据类型 说明 MAX_LENGTH 符号常量 用于定义数组长度,表示列表最大长度 MAX_FILE_LENGTH 符号常量 用于定义数组长度,表示文件名最 ...
- 快速构建Windows 8风格应用21-构建简单媒体播放器
原文:快速构建Windows 8风格应用21-构建简单媒体播放器 本篇博文主要介绍如何构建一个简单的媒体播放器. <快速构建Windows 8风格应用20-MediaElement>博文中 ...
- WinForm媒体播放器
媒体播放控件(Windows Media Player )的常用属性和方法,并且利用它设计一个简单的媒体应用程序——媒体播放器.该媒体播放器可以播放 wav.avi.mid 和 mp3 等格式的文件. ...
- Movist for Mac(高清媒体播放器)v2.0.7中文特别版
Movist for Mac中文破解版是目前Mac平台上最好用的视频播放器,功能强大简单好用.movist mac版拥有美观简洁的用户界面,提供多种功能,支持视频解码加速高品质的字幕,全屏幕浏览,是与 ...
随机推荐
- svn服务器搭建及使用 二
上一篇介绍了VisualSVN Server和TortoiseSVN的下载,安装,汉化.这篇介绍一下如何使用VisualSVN Server建立版本库,以及TortoiseSVN的使用. 首先打开Vi ...
- Ubuntu14.04和Tiny6410挂载NFS服务!
我是以root身份登录Ubuntu的: 在Ubuntu上执行 #apt-get install nfs-kernel-server //安装NFS服务 在Ubuntu上执行 #mkdir ...
- Mysql报错 Cannot load from mysql.proc
Auth: Jin Date: 20140716 mysql --default-character-set utf8 -h127.0.0.1 -uroot -p < account-20140 ...
- CMOS DACs act as digitally controlled voltage dividers
Digital potentiometers, such as Analog Devices’ AD5160, make excellent digitally controlled voltage ...
- g++ 链接*.a静态库 方法
g++在链接*.a静态库时,直接作为object使用,不需要使用-l ,但是需要注意调整顺序,被依赖的文件放在后面. 如: g++ -g -o0 -Wno-deprecated -I$(INCL ...
- Unity 面试题
一:什么是协同程序? 在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满足. 二:Unity3d中 ...
- 对于矩阵的理解-- by 孟岩老师
“如果不熟悉线性代数的概念,要去学习自然科学,现在看来就和文盲差不多.” --瑞典数学家Lars Garding名著<Encounter with Mathematics>. 1. 矩阵的 ...
- 第一章 Actionscript学习基本知识笔记及flashdevelop软件的安装问题
OOP:封装.继承.多态. Pubilc :完全公开. Internal:包内类成员可以互相访问. Private:仅当前类可以访问. Protected:当前类和当前类的子类可以访问. 被关键词fi ...
- Python学习(四)数据结构 —— set frozenset
集合类型 set frozenset 赋值及去重 set 是一个无序不重复元素集,还有个frozenset 类型(顾明思议,就是不可改变元素的集合): 基本功能包括关系测试和消除重复元素:set支持 ...
- #include <NOIP2010 Junior> 三国游戏 ——using namespace wxl;
题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏中共有 N 位武将(N为偶数且不小于 4),任意两个武将之 ...