插件管理方法、 插件管理器及机顶盒 【技术领域】
本发明涉及通讯领域, 尤其涉及一种插件管理方法、 插件管理器及机顶盒。背景技术
目前, 随着数字电视技术的不断发展, 对机顶盒的各种功能需求不断提升, 而且机 顶盒在不同的地方可能具有不同的需求, 因此, 需要针对不同的需求定制不同的功能, 或者 同样的功能需要集成不同厂家的库来实现。 但是, 现有的大部分机顶盒软件在开发时, 均是 针对不同的需求直接将所需要的功能整合到整个代码内, 由此导致该部分经常变动的代码 和机顶盒的核心代码耦合性太强, 使得机顶盒软件在不同产品上的移植性不强, 开发周期 长, 并且产品功能扩展性不强。 发明内容本发明的主要目的在于提供一种插件管理方法、 插件管理器及机顶盒, 旨在减少 机顶盒软件各个功能模块之间的耦合性, 增强机顶盒软件在不同产品上的可移植性。
本发明提出的一种插件管理方法, 包括以下步骤 :
当插件模块连接于插件管理器时, 所述插件管理器对所述插件模块进行注册, 并 获取所述插件模块的描述信息 ;
接收应用模块发送的查询相应插件模块是否注册的关键字信息 ;
当所述关键字信息与所述描述信息中关键字信息部分匹配时, 返回所述相应插件 模块的句柄至所述应用模块, 以便所述应用模块根据所述句柄调用所述相应插件模块的功 能。
优选地, 所述当关键字信息与所述描述信息中关键字信息部分匹配时, 返回所述 相应插件模块的句柄至所述应用模块, 以便所述应用模块根据所述句柄调用所述相应插件 模块的功能的步骤之后还包括 :
接收所述应用模块发送的卸载所述相应插件模块的卸载信息 ;
根据所述卸载信息将所述相应插件模块卸载。
优选地, 所述当插件模块连接于插件管理器时, 所述插件管理器对所述插件模块 进行注册, 并获取所述插件模块的描述信息的步骤包括 :
当所述插件模块连接于所述插件管理器时, 所述插件管理器为所述插件模块提供 相应的系统功能, 并获取所述插件模块提供的功能 ;
获取所述插件模块的描述信息 ;
将所述描述信息注册到所述插件管理器上。
本发明还提出一种插件管理器, 包括 :
注册模块, 用于当插件模块连接于插件管理器时, 对所述插件模块进行注册, 并获 取所述插件模块的描述信息 ;
第一接收模块, 用于接收应用模块发送的查询相应插件模块是否注册的关键字信
息; 查询模块, 用于当所述关键字信息与所述描述信息中关键字信息部分匹配时, 返 回所述相应插件模块的句柄至所述应用模块, 以便所述应用模块根据所述句柄调用所述相 应插件模块的功能。
优选地, 所述插件管理器还包括 :
第二接收模块, 用于接收所述应用模块发送的卸载所述相应插件模块的卸载信 息;
卸载模块, 用于根据所述卸载信息将所述相应插件模块卸载。
优选地, 所述注册模块包括 :
功能提供获取单元, 用于当所述插件模块连接于所述插件管理器时, 为所述插件 模块提供相应的系统功能, 并获取所述插件模块提供的功能 ;
获取单元, 用于获取所述插件模块的描述信息 ;
注册单元, 用于将所述描述信息注册到所述插件管理器上。
本发明还提出一种机顶盒, 包括 : 插件管理器、 以及分别与所述插件管理器连接的 插件模块和应用模块, 其中 :
所述插件管理器, 用于当插件模块连接于该插件管理器时, 对所述插件模块进行 注册, 并获取所述插件模块的描述信息 ; 接收应用模块发送的查询相应插件模块是否注册 的关键字信息 ; 当所述关键字信息与所述描述信息中关键字信息部分匹配时, 返回所述相 应插件模块的句柄至所述应用模块, 以便所述应用模块根据所述句柄调用所述相应插件模 块的功能 ;
所述插件模块, 用于通过所述插件管理器为所述应用模块提供相应的功能 ;
所述应用模块, 用于向所述插件管理器发送所述关键字信息, 以及当所述关键字 信息与所述描述信息中关键字信息部分匹配时, 接收所述插件管理器返回的所述相应插件 模块的句柄, 并根据所述句柄调用所述相应插件模块的功能。
优选地, 所述应用模块, 还用于向所述插件管理器发送卸载所述相应插件模块的 卸载信息 ;
所述插件管理器, 还用于接收所述卸载信息 ; 根据所述卸载信息将所述相应插件 模块卸载 ;
所述插件模块, 还用于将向系统申请的各种资源释放。
优选地, 所述插件模块为 ca 插件和 / 或网络插件。
所述插件管理器为如上所述的插件管理器。
本发明的有益效果为 : 通过在机顶盒中设置插件以及插件管理器, 插件通过相应 的接口与插件管理器连接, 应用层可根据使用需要通过插件管理器调用相应的插件的功 能, 实现机顶盒软件的模块化, 减少机顶盒软件各个功能模块之间的耦合性, 增强机顶盒软 件在不同产品上的可移植性, 缩短软件开发周期, 以及通过动态加载插件, 扩展了系统的功 能, 在同类插件之间可以动态选择不同的插件, 从而增强产品的灵活性。
附图说明
图 1 是本发明插件管理方法一实施例流程示意图 ;图 2 是本发明插件管理方法一实施例中当插件模块连接于插件管理器时, 插件管 理器对插件模块进行注册, 并获取插件模块的描述信息的流程示意图 ;
图 3 是本发明插件管理方法另一实施例流程示意图 ;
图 4 是本发明插件管理器一实施例结构示意图 ;
图 5 是本发明插件管理器一实施例中注册模块的结构示意图 ;
图 6 是本发明插件管理器另一实施例结构示意图 ;
图 7 是本发明机顶盒一实施例结构示意图。
为了使本发明的技术方案更加清楚、 明了, 下面将结合附图作进一步详述。 具体实施方式
本发明实施例解决方案主要是通过在机顶盒中设置插件以及插件管理器, 应用层 可根据使用需要通过插件管理器调用相应插件的功能, 实现机顶盒软件的模块化, 减少机 顶盒软件各个功能模块之间的耦合性。
本发明以下实施例以机顶盒为例说明插件以及插件管理器的应用, 但不仅限于机 顶盒中应用上述插件以及插件管理器的情形。 如图 1 所示, 本发明一实施例提出一种插件管理方法, 包括 :
步骤 S101, 当插件模块连接于插件管理器时, 插件管理器对插件模块进行注册, 并 获取插件模块的描述信息 ;
本实施例运行环境涉及机顶盒, 在机顶盒中设置有插件模块以及插件管理器, iSTB 是机顶盒整个系统的各个核心模块总称, 插件管理器是其中一个模块, 其负责为插件 模块提供 iSTB 其它模块的功能。插件模块则通过插件管理器与应用模块进行通讯。
在本实施例中, 插件管理器与插件模块双方之间约定好一套接口, 插件管理器负 责管理插件模块, 并通过相应接口向插件模块提供系统功能, 同时为应用层 ( 本实施例中 称应用模块 ) 提供一套 API(Application Programming Interface, 应用程序编程接口 ), 以方便用户通过该应用层 API 使用插件模块的功能。插件模块还可以通过约定的接口让 插件管理器识别其类型, 并且向插件管理器注册自己的功能, 不同类型的插件模块, 其功能 不一样, 接口也不一样, 但是, 有一部分接口可以是所有插件模块均须实现的, 每一个插件 模块均具有一套固定格式的描述信息, 插件管理器根据插件模块的描述信息来识别插件模 块。
当插件模块通过相应接口连接于插件管理器上时, 插件管理器将对插件模块进行 注册, 其具体注册过程为 :
插件管理器在开机初始化时, 在某一固定的目录去寻找文件名以 “.so” 结束的动 态库, 当找到该动态库后, 插件管理器首先将动态库装载到内存里, 再通过 linux 系统的动 态库函数去执行 Plugin_NP_Init() 接口, 通知插件模块其为插件模块所提供的系统功能, 同时还获得插件模块提供的功能, 当上述过程执行成功后, 插件管理器调用 Plugin_NPP_ Get_Plugin_Info() 接口, 得到插件模块的描述信息, 通过该描述信息来识别插件模块的类 型, 然后调用 Plugin_NPP_Create_Plugin() 接口来初始化插件模块。上述三个步骤完成 后, 插件模块则被注册到插件管理器中。
步骤 S102, 接收应用模块发送的查询相应插件模块是否注册的关键字信息 ;
步骤 S103, 当关键字信息与描述信息中关键字信息部分匹配时, 返回相应插件模 块的句柄至应用模块, 以便应用模块根据句柄调用相应插件模块的功能。
上述步骤 S102 以及步骤 S103 中, 当插件管理器完成了插件模块的注册之后, 机顶 盒中应用模块即可通过插件管理器调用相应插件模块的功能, 其具体调用过程为 :
应用模块可以根据插件模块提供的关键字信息到插件管理器中查询需要使用的 插件模块是否已经注册, 即向插件管理器发送查询插件模块是否注册的关键字信息, 插件 管理器收到该关键字信息后, 经查询若发现应用模块所要查询的插件模块存在即该插件模 块已注册, 则会将该插件模块的句柄返回给应用模块, 应用模块根据该插件模块的句柄即 可以使用插件模块提供的功能。
如图 2 所示, 步骤 S101 包括 :
步骤 S1011, 当插件模块连接于插件管理器时, 插件管理器为插件模块提供相应的 系统功能, 并获取插件模块提供的功能 ;
步骤 S1012, 获取插件模块的描述信息 ;
步骤 S1013, 将描述信息注册到插件管理器上。
需要说明的是, 本实施例中插件模块根据使用需要可以设置为多个, 即对于机顶 盒整个系统 iSTB 核心模块来说, 将其中经常变动的功能模块定制成相应的插件模块, 实现 机顶盒软件的模块化, 而且本实施例中插件模块可以为设置在机顶盒上的 ca 插件, 也可以 为设置在机顶盒上的网络插件, 以实现不同的功能, 因此, 本实施例可在机顶盒上实现多 ca 插件和 / 或多网络插件的应用。 本实施例通过在机顶盒中设置插件以及插件管理器, 插件通过相应的接口与插件 管理器连接, 应用层可根据使用需要通过插件管理器调用相应的插件的功能, 实现机顶盒 软件的模块化, 减少机顶盒软件各个功能模块之间的耦合性, 增强机顶盒软件在不同产品 上的可移植性, 缩短软件开发周期, 以及通过动态加载插件, 扩展了系统的功能, 在同类插 件之间可以动态选择不同的插件, 从而增强产品的灵活性。
如图 3 所示, 本发明另一实施例提出一种插件管理方法, 在上述实施例的基础上, 其中, 在步骤 S103 之后还包括 :
步骤 S104, 接收应用模块发送的卸载相应插件模块的卸载信息 ;
步骤 S105, 根据卸载信息将相应插件模块卸载。
在本实施例中, 当应用模块不需要使用插件模块的功能而需要将插件模块卸载 时, 可以根据插件模块的句柄调用相应的卸载函数通知插件管理器, 插件管理器将调用 Plugin_NPP_Destroy_plugin() 接口以及 Plugin_NP_Shutdown() 接口, 插件模块在上述接 口将它向系统申请的各种资源释放出来, 而且插件管理器最后将相应的动态库从内存中释 放出来。
如图 4 所示, 本发明一实施例提出一种插件管理器, 包括 : 注册模块 401、 第一接收 模块 402 以及查询模块 403, 其中 :
注册模块 401, 用于当插件模块连接于插件管理器时, 对插件模块进行注册, 并获 取插件模块的描述信息 ;
第一接收模块 402, 用于接收应用模块发送的查询相应插件模块是否注册的关键 字信息 ;
查询模块 403, 用于当关键字信息与描述信息中关键字信息部分匹配时, 返回相应 插件模块的句柄至应用模块, 以便应用模块根据句柄调用相应插件模块的功能。
在本实施例中, iSTB 是机顶盒整个系统的各个核心模块总称, 插件管理器以及与 其通过接口连接的插件模块均设置机顶盒内, 插件管理器是 iSTB 中的一个模块, 其负责为 插件模块提供 iSTB 其它模块的功能, 插件模块通过插件管理器与机顶盒中的应用模块进 行通讯,
在本实施例中, 插件管理器与插件模块双方之间约定好一套接口, 插件管理器负 责管理插件模块, 并通过相应接口向插件模块提供系统功能, 同时为应用层 ( 本实施例中 称应用模块 ) 提供一套 API, 以方便用户通过该应用层 API 使用插件模块的功能。 插件模块 还可以通过约定的接口让插件管理器识别其类型, 并且向插件管理器注册自己的功能, 不 同类型的插件模块, 其功能不一样, 接口也不一样, 但是, 有一部分接口可以是所有插件模 块均须实现的, 每一个插件模块均具有一套固定格式的描述信息, 插件管理器根据插件模 块的描述信息来识别插件模块。
当插件模块通过相应接口连接于插件管理器上时, 插件管理器将对插件模块进行 注册, 其具体注册过程为 : 插件管理器在开机初始化时, 在某一固定的目录去寻找文件名以 “.so” 结束的动 态库, 当找到该动态库后, 插件管理器首先将动态库装载到内存里, 再通过 linux 系统的动 态库函数去执行 Plugin_NP_Init() 接口, 通知插件模块其为插件模块所提供的系统功能, 同时还获得插件模块提供的功能, 当上述过程执行成功后, 插件管理器调用 Plugin_NPP_ Get_Plugin_Info() 接口, 得到插件模块的描述信息, 通过该描述信息来识别插件模块的类 型, 然后调用 Plugin_NPP_Create_Plugin() 接口来初始化插件模块。上述三个步骤完成 后, 插件模块则被注册到插件管理器中。
当插件管理器完成了插件模块的注册之后, 机顶盒中应用模块即可通过插件管理 器调用相应插件模块的功能, 其具体调用过程为 :
应用模块可以根据插件模块提供的关键字信息到插件管理器中查询需要使用的 插件模块是否已经注册, 即向插件管理器发送查询插件模块是否注册的关键字信息, 插件 管理器收到该关键字信息后, 经查询若发现应用模块所要查询的插件模块存在即该插件模 块已注册, 则会将该插件模块的句柄返回给应用模块, 应用模块根据该插件模块的句柄即 可以使用插件模块提供的功能。
如图 5 所示, 注册模块 401 包括 :
功能提供获取单元 4011, 用于当插件模块连接于插件管理器时, 为插件模块提供 相应的系统功能, 并获取插件模块提供的功能 ;
获取单元 4012, 用于获取插件模块的描述信息 ;
注册单元 4013, 用于将描述信息注册到插件管理器上。
需要说明的是, 本实施例中插件模块根据使用需要可以设置为多个, 即对于机顶 盒整个系统 iSTB 核心模块来说, 将其中经常变动的功能模块定制成相应的插件模块, 实现 机顶盒软件的模块化, 而且本实施例中插件模块可以为设置在机顶盒上的 ca 插件, 也可以 为设置在机顶盒上的网络插件, 以实现不同的功能, 因此, 本实施例可在机顶盒上实现多 ca 插件和 / 或多网络插件的应用。
本实施例通过在机顶盒中设置插件以及插件管理器, 插件通过相应的接口与插件 管理器连接, 应用层可根据使用需要通过插件管理器调用相应的插件的功能, 实现机顶盒 软件的模块化, 减少机顶盒软件各个功能模块之间的耦合性, 增强机顶盒软件在不同产品 上的可移植性, 缩短软件开发周期, 以及通过动态加载插件, 扩展了系统的功能, 在同类插 件之间可以动态选择不同的插件, 从而增强产品的灵活性。
如图 6 所示, 本发明另一实施例提出一种插件管理器, 在上述实施例的基础上, 其 中, 插件管理器还包括 :
第二接收模块 404, 用于接收应用模块发送的卸载相应插件模块的卸载信息 ;
卸载模块 405, 用于根据卸载信息将相应插件模块卸载。
在本实施例中, 当应用模块不需要使用插件模块的功能而需要将插件模块卸载 时, 可以根据插件模块的句柄调用相应的卸载函数通知插件管理器, 插件管理器将调用 Plugin_NPP_Destroy_plugin() 接口以及 Plugin_NP_Shutdown() 接口, 插件模块在上述接 口将它向系统申请的各种资源释放出来, 而且插件管理器最后将相应的动态库从内存中释 放出来。
如图 7 所示, 本发明一实施例提出一种机顶盒, 包括 : 插件管理器 701、 以及分别与 插件管理器 701 连接的插件模块 702 和应用模块 703, 其中 :
插件管理器 701, 用于当插件模块连接于该插件管理器时, 对插件模块进行注册, 并获取插件模块的描述信息 ; 接收应用模块发送的查询相应插件模块是否注册的关键字信 息; 当关键字信息与所述描述信息中关键字信息部分匹配时, 返回相应插件模块的句柄至 应用模块, 以便应用模块根据句柄调用相应插件模块的功能 ;
插件模块 702, 用于通过插件管理器为应用模块提供相应的功能 ;
应用模块 703, 用于向插件管理器发送关键字信息, 以及当关键字信息与描述信息 中关键字信息部分匹配时, 接收插件管理器返回的相应插件模块的句柄, 并根据句柄调用 相应插件模块的功能。
更进一步的, 应用模块 703, 还用于向插件管理器发送卸载相应插件模块的卸载信 息;
插件管理器 701, 还用于接收卸载信息 ; 根据卸载信息将相应插件模块卸载 ;
插件模块 702, 还用于将向系统申请的各种资源释放。
本实施例中插件管理器可以为上述实施例中所述的插件管理器。
需要说明的是, 本实施例中插件模块根据使用需要可以设置为多个, 即对于机顶 盒整个系统 iSTB 核心模块来说, 将其中经常变动的功能模块定制成相应的插件模块, 实现 机顶盒软件的模块化, 而且本实施例中插件模块可以为设置在机顶盒上的 ca 插件, 也可以 为设置在机顶盒上的网络插件, 以实现不同的功能, 因此, 本实施例可在机顶盒上实现多 ca 插件和 / 或多网络插件的应用。
因此, 在实际应用中, 插件管理器的功能可以分成三个模块来实现, 即公共管理模 块、 ca 管理模块以及网络插件管理模块。公共管理模块负责插件的注册、 动态库的装载和 卸载以及公用插件功能插口 ; ca 管理模块提供 ca 插件功能接口 ; 网络插件管理模块提供网 络插件功能接口。
本发明实施例插件管理方法、 插件管理器及机顶盒通过在机顶盒中设置插件以及插件管理器, 插件通过相应的接口与插件管理器连接, 应用层可根据使用需要通过插件管 理器调用相应的插件的功能, 实现机顶盒软件的模块化, 减少机顶盒软件各个功能模块之 间的耦合性, 增强机顶盒软件在不同产品上的可移植性, 缩短软件开发周期, 以及通过动态 加载插件, 扩展了系统的功能, 在同类插件之间可以动态选择不同的插件, 从而增强产品的 灵活性。
以上所述仅为本发明的优选实施例, 并非因此限制本发明的专利范围, 凡是利用 本发明说明书及附图内容所作的等效结构或流程变换, 或直接或间接运用在其它相关的技 术领域, 均同理包括在本发明的专利保护范围内。