常见多媒体开发框架对比分析(一)DirectShow

  DirectShow是资格最老的多媒体开发框架之一,20多年前就有了,非常经典,即便到了现在,在Windows多媒体领域仍然是不可替代的。虽然不开源,但有详细的说明文档和开发指南,微软的DirectShow SDK中附有大量的示例代码和基础类库,是很好的学习资源。如果你是多媒体开发领域的新手,不管你基于哪个平台开发,我都建议你学一学DirectShow,它可以告诉你多媒体框架究竟是个什么样子。

  DirectShow实践了经典的“管道和过滤器(Pipes and Filters)”设计模式,这是多媒体领域最重要的设计模式,有了它,就能把复杂的多媒体处理任务分解成一个个独立的小模块,解决起来就不那么复杂了。DirectShow中的很多概念、设计、处理方法都很有创新精神和参考价值,值得学习。后来的很多多媒体框架都从DirectShow中或多或少的吸取了营养。

  说了DirectShow的优点,但其实存在的问题同样很多。

  一是不开源,只能运行在Windows系统,微软的东西,这个就不多说了。

  二是组件化的开发和部署模式,这个是优点也是缺点。优点是支持跨多个应用的功能集成与复用,当然这主要是通过更底层的COM架构实现的;缺点是应用的发布和配置比较复杂,对运行环境依赖程度大。

  三是开发负担太重。其实COM这样的架构最适合的场景是操作系统DIY,如果应用程序不想扩展操作系统功能,也不想被其他应用程序调用,那COM对它来说完全就是负担。应用中的每个模块都要实现COM规定的接口(如组件注册、引用计数、接口查询等)和DirectShow规定的必须实现的功能(如格式注册、Pin的枚举和连接、内存管理等)。虽然DirectShow SDK已经提供了很多基础类库来实现这些例行功能,但仍然让人不胜其烦,难以把精力集中到应用程序自身的逻辑。

  四是线程设计太复杂,内存池、线程优先级控制,filter中有很多调用可能把当前线程阻塞,而线程是跨filter的(线程可能会在不止一个filter上被阻塞,包括没有直接调用到的filter),这进一步增加了复杂性,编写filter时有一大堆规则需要遵守,稍不注意就可能造成死锁。

 

转载于:https://www.cnblogs.com/directmedia/p/4620289.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值