插件式架构设计演义

 

最近对几种流行的多媒体架构发生了兴趣,从Linux的gstreamer, 到Android下的opencore, 以及KreaTV的streamer,发现它们都走了同一条路,就是插件式架构。

插件式架构最大的特点就是分离了核心框架与扩展部件, 其优点不言而喻。
高扩展性:这一点无需多说。
高开放性:插件接口公开后,第3方就可以方便的参与进来,独立开发插件。
低耦合性:核心框架和扩展部件只要保持接口一致,各自可以独立变化;而扩展部件之间各自独立,大家

           各不依赖。
低复杂度:扩展部件从框架中分离后, 大大降低了核心框架的复杂度。
高灵活性:核心框架可以根据功能需要灵活配置和加载扩展部件。

 

插件式架构设计由以下4部分组成:
1. 核心框架:顾名思义,这是个核心体,其主要功能就是负责整体运作,管理和调度插件,让插件来完成具体功能。呵呵, 说穿了,它就是个领导者,组织者的角色。
2. 插件接口:是一个接口协议,插件按照这个协议来实现,核心框架就可以有效的来组织和管理这些插件。我们可以把它理解为公司或者部门的规章制度,工作规范什么的。
3. 插件:就是完成实际功能的部件,比如RTSP协议, MP4解码等。它扮演着办事员或者工程师的角色。
4. 公共模块:就是一组公共函数或者类,供核心框架和插件使用。在实际设计时,为了避免模块相互依赖和插件的独立性,插件与插件之间是独立的,插件同样也不会依赖核心框架。因此,我们把核心和插件都需要调用的功能模块独立出来成为一个公共模块。比如PES包处理功能,核心和插件都会用到该功能,它就是个公共模块。
     
KreaTV的媒体框架
核心框架: 就是Streamer Core, build后生成一个可执行文件streamer。代码位置: platform/media/streamer
插件接口: 接口头文件。代码位置:platform/media/streamer-interfaces
插件:     就是各种Steamer Elements, build后生成动态链接库文件,streamer可以动态加载这些文件。
           代码位置:extension/streamer
公共模块: 一些公共库函数, 包括动态库和静态库,比如libH222, libAsf等,供streamer和插件

           Elements调用。代码位置:common/media
  
 

你可能感兴趣的:(插件式架构设计演义)