基于ActiveX控件的流媒体播放系统开发和实现
作者:纪浩哲 邱红丽
来源:《信息安全与技术》2012年第04期
【 摘 要 】 对于流媒体数据,采用在HTML页面汇总内嵌ActiveX控件直接对应用服务器进行访问,可提高访问的实时性。文章提出了一种使用ActiveX控件,采用Visual Studio开发的流媒体客户端播放系统的设计方法,对系统的原理和关键技术进行了介绍,重点讨论了系统中主要功能模块的具体实现。
【 关键词 】 ActiveX;SDK;流媒体
Development and Implementation of an ActiveX Control-based Streaming Media Playback System
Ji Hao-zhe Qiu Hong-li
(Henan Quality Polytechnic HenanPingdingshan 467000)
【 Abstract 】 Summarized in an HTML page embedded ActiveX controls directly access the application server can access real-time streaming data. This paper presents a way to use ActiveX controls, Visual Studio development, streaming media client player system design methodology, system theory and key technologies were introduced, focused on the concrete realization of the main functional modules in the system.
【 Keywords 】 activeX; SDK; streamMedia 0 前言
流媒体是一种在网络上在线播放多媒体的技术。由于其边下载边播放的特性,缩短了用户初始等待的延迟,但其数据也需要采用流式传输,具有较高的实时需求,因此比起一般的本地播放处理更为复杂。客户端是流媒体系统中一个基本的组成部分,一般是一个具有网络通信功能的播放器,而对于流媒体数据,采用在HTML页面汇总内嵌ActiveX控件直接对应用服务器进行访问,可以提高访问的实时性。 1 系统实现原理 1.1 ActiveX控件 1.1.1 ActiveX控件简介
龙源期刊网 http://www.qikan.com.cn
ActiveX是一种技术集合。主要包括服务器端技术和客户端技术,可以使用户能够在浏览器之中看非HTML文档(如Word文档);能够被插入网页或任何称作控件容器库的应用程序之中的对象(如按钮);可以在整个客户区域以框架形式显示文档;能够定制来源于数据库或是一个在服务器上运行的程序的网页内容;可以将处理过程从服务器方移至客户端。 1.1.2 ActiveX控件原理
ActiveX控件通常是以动态连接口的形式存在,设计思想是将一个程序嵌入到另一个程序(通常把这个程序叫做容器,例如Web页面)中。通过这种技术可以将一个程序的信息集成到其他的程序之中,方便程序开发,可以是它应用到需要的各种场合之中。
ActiveX控件的数据输入和函数功能执行都是必须通过容器的,所以在ActiveX控件和其容器之间必须有一定特定的接口协议,ActiveX控件一般具备几种性能机制。
属性:ActiveX控件必须提供属性的名称,通过这项机制,容器可以存取、改变ActiveX控件的属性参数。
方法:ActiveX控件需要提供方法的名称和参数,容器通过不同的参数开始改变ActiveX控件的属性等参数。
事件:这项机制可以通知容器在ActiveX控件发生的事件,比如鼠标的点击等,然后进行操作来改变属性或是其他。
ActiveX的目的主要是用来共享程序模块之间的计算功能,生成的一些可以嵌入在其他程序中的一些小程序,通过指定的一些接口来实现程序之间的通信。ActiveX控件是一个模块化的灵活对象,如果需要在某个应用程序或是Web页面中增加一项功能,无需重写改写程序,编写一个满足需求的ActiveX控件,然后嵌入到容器中即可实现。 1.2 流媒体介绍
流媒体系统包括音/视频源的编码/解码、存储、流媒体服务器、媒体流传输网络、用户端播放器5个部分(如图1所示),原始音/视频流经过编码和压缩后,形成媒体文件存储,媒体服务器根据用户的请求把媒体文件传递到客户端的媒体播放器。
流媒体服务器在首次运行时,必须配置视频路径,设置文件点播的路径之后,会显示出所包含的视频文件,单纯的视频文件并不能通过流媒体客户端访问,必须生成视频索引文件之后才能访问。运用流媒体服务器生成视频索引文件,然后重启服务器之后即完成了流媒体服务器的设置。
龙源期刊网 http://www.qikan.com.cn
流媒体客户端用来访问存储在服务器上的视频数据,通过设置服务器的IP和物理路径即可对视频数据进行访问。流媒体客户端为MFC程序,不能以Web方式访问,通过流媒体客户端的SDK开发出内嵌在Web中的ActiveX控件,即可解决这个问题。 2 流媒体播放系统ActiveX控件开发
根据所需的功能,我们所设计的流媒体客户端ActiveX控件需要满足设定播放Url、播放类型、播放、拖动播放、暂停和停止的功能。对应的我们需要调用提供的SDK的一些接口。 2.1 流媒体客户端SDK接口
流媒体SDK对和建立流媒体会话相关的底层命令数据和流媒体的传输过程进行了封装,对上层应用屏蔽了具体的传输流程。
Client.dll动态链接库导出的API函数在头文件Client.h的中定义,具体如下。 (1)CLIENT_API int __stdcall InitStreamClientLib(void) 作用:初始化。该函数需要在窗口程序初始化时调用。 返回值:成功返回0,失败返回-1。
(2)CLIENT_API int __stdcall FiniStreamClientLib(void) 作用:反初始化。该函数需要在窗口程序关闭时时调用。 返回值:成功返回0,失败返回-1。
(3)CLIENT_API int __stdcall HIKS_OpenURL(HSESSION hSession,const char* pszURL,int iusrdata)
作用:根据URL,连接服务器。hSession 是Player 的标示,应该设置为
HIKS_CreatePlayer 成功返回的新建Player 的标示, pszURL 即为服务器的地址,iusrdata 为用户数据。
返回值:成功返回1,失败返回-1。
(4)CLIENT_API int __stdcall HIKS_Play(HSESSION hSession) 作用:播放。hSession 是Player 的标示。 返回值:成功返回1,失败返回-1。
龙源期刊网 http://www.qikan.com.cn
(5)CLIENT_API int __stdcall HIKS_RandomPlay(HSESSION hSession,unsigned long timepos)
作用:随机位置播放,用于视频的前后拖动。hSession 是Player 的标示。 返回值:成功返回1,失败返回-1。
(6)CLIENT_API int __stdcall HIKS_Pause(HSESSION hSession) 作用:暂停播放。hSession 是Player 的标示。 返回值:成功返回1,失败返回-1。
(7)CLIENT_API int __stdcall HIKS_Resume(HSESSION hSession) 作用:恢复播放。hSession 是Player 的标示。 返回值:成功返回1,失败返回-1。
(8)CLIENT_API int __stdcall HIKS_Stop(HSESSION hSession)
作用:停止播放,销毁Player。hSession 是Player 的标示。在播放失败或正在播放需要停止的请况下调用,调用了该函数后就不需要再调用HIKS_Destroy 函数了。 返回值:成功返回0,失败返回-1。 2.2 ActiveX控件开发步骤
在Visual Stdio 2010编程环境中,新建一个“MFC ActiveX控件”的项目,项目名为“StreamMediaActiveX”,在项目的创建过程中会显示出控件类型ID为
“STREAMMEDIAACTIV.StreamMediaActivCtrl.1”。项目创建完成之后会创建三个类。 (1)CStreamMediaActiveXApp
这个类继承于COleControlModule。它是用于派生OLE控件模块对象的基类。该类提供成员函数初始化控件模块。每个使用Microsoft基础类的OLE控件只能包含一个从
COleControlModule派生的对象。当其它C++全局对象创建的同时创建该对象。将COleControl Module对象声明为全局级。 (2)CStreamMediaActiveXCtrl
龙源期刊网 http://www.qikan.com.cn
这个类继承于COleControl,它由CWnd类派生,继承了Windows窗口对象的所有功能,并加上了OLE独有的功能,例如事件触发、支持方法和特性等。 (3)CStreamMediaActiveXPropPage
这个类继承于COlePropertyPage类,它是以类似于对话框的图形化界面来显示定制控件的属性。
在项目工程中引用client.dll这个动态链接库,并在头文件中加入client.h这个头文件。在StreamMediaActiveXCtrl.cpp文件的调度映射的代码段中,添加我们可以用于外部调用的属性和方法,生成代码段如下:
BEGIN_DISPATCH_MAP(CStreamMediaActiveXCtrl, COleControl)
DISP_FUNCTION_ID(CStreamMediaActiveXCtrl, \"SetParam\VT_I4, VTS_BSTR VTS_I4)
DISP_FUNCTION_ID(CStreamMediaActiveXCtrl, \"Play\VTS_NONE)
DISP_FUNCTION_ID(CStreamMediaActiveXCtrl, \"Pause\VTS_NONE)
DISP_FUNCTION_ID(CStreamMediaActiveXCtrl, \"Stop\VTS_NONE)
END_DISPATCH_MAP()
对应的在CStreamMediaActiveXCtrl中这个类添加相应的方法,添加一个Dialog之后,调用海康的SDK给定的一些接口,方法如下:
(1)LONG SetParam(LPCTSTR transurl, LONG transtype); 调用接口:InitStreamClientLib 、HIKS_OpenURL。 (2)VARIANT_BOOL Play(void);
调用接口:HIKS_Play 、HIKS_RandomPlay、HIKS_Resume。 (3)VARIANT_BOOL Pause(void); 调用接口:HIKS_Pause。
龙源期刊网 http://www.qikan.com.cn
(4)VARIANT_BOOL Stop(void);
调用接口:HIKS_Stop、FiniStreamClientLib。 3 结论
ActiveX控件的可复用性强,而且在嵌入容器之后,客户端将ActiveX控件下载到本地之后,进行注册,这样在网页中就可以调用所需要的ActiveX控件。既方便用户在不同开发环境下的调用,又减少了直接在Web应用程序中直接编写流媒体客户端的代码量。在系统的架构方面,基于BS架构的这种Web应用程序中运用编写ActiveX流媒体客户端比传统的CS架构中客户端用户的友好性方面又有了较大的提高,提高了流媒体数据访问的实时性。 参考文献
[1] 邹羚.多流媒体播放器ActiveX控件开发,《微型机与应用》,2010年14期. [2] 廖非凡.基于ActiveX的流媒体播放系统设计与实现,《中国科技信息》,2005年第10期.
作者简介:
纪浩哲(1976-),女,河南平顶山人,河南质量工程职业学院讲师,工程师,本科;主要研究方向:软件工程。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- pqdy.cn 版权所有 赣ICP备2024042791号-6
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务