多流媒体播放器ActiveX控件开发
可以很方便地实现播放的控制功能。
3.3 播放器的播放流程
播放器的播放流程为:打开多流播放器,加载媒体控制文件,判断窗口个数,将媒体流的url的值、同步时间赋给各个窗口,同步技术播放控制多个视频,显示视频,当用户进行控制时,反馈用户,播放完毕。图4为播放器的播放流程图。
3.4 流媒体播放器采用的同步方法、模型、解决技术
本文开发的多流媒体播放器支持4个流媒体,同步模型采用图1所示之模型,用户交互操作采用分层同步法,时间无关的媒体流之间采用分层同步法,时间有关的媒体流之间采用时间戳同步法,单个媒体流采用缓冲控制同步法。同步解决技术将前文所述3种方法相融合,借用2.3节中第3种同步技术,由播放器解码文件中的同步信息协调4个流媒体之间的同步播放,同时利用文本文件记录同步信息和跟踪跳转时间以实现多个流媒体之间同步。具体同步解决技术是:4个流媒体在打开流媒体时,同步读取时间头,在流媒体开始播放时进行同步,然后利用文本文件记录的同步信息,以流媒体1为参考时间轴,其他的流媒体通过函数每1 000 ms检测一次同步信息,如果发现多个流媒体播放时间点与文本文件中记录同步信息一致,则无需同步,反之按文本文件记录的同步信息进行调整[5-6]。
3.5 流媒体播放器核心程序
(1)读取同步点(用数组保存同步信息点)
Open sycFile For Input As #1
Line Input #1, sycQt
ReDim WMP1time(sycQt),WMP2time(sycQt),WMP3time(sycQt),
WMP4time(sycQt)
For i=1 To sycQt
Input #1,WMP1temp,WMP2temp,WMP3temp,WMP4temp
WMP1time(i)=WMP1temp
WMP2time(i)=WMP2temp
WMP3time(i)=WMP3temp
WMP4time(i)=WMP4temp
Next i
Close #1
sycponit=1
(2)通过播放时间与同步时间数组对比,决定是否同步
If WMP1time(sycpoint)=curtime Then
WindowsMediaPlayer1.Controls.pause
WindowsMediaPlayer2.Controls.stop
WindowsMediaPlayer3.Controls.stop
WindowsMediaPlayer4.Controls.stop
WindowsMediaPlayer2.Controls.currentPosition=WMP2time(sycpoint)
WindowsMediaPlayer3.Controls.currentPosition=WMP3time(sycpoint)
WindowsMediaPlayer4.Controls.currentPosition=WMP4time(sycpoint)
WindowsMediaPlayer1.Controls.play
WindowsMediaPlayer2.Controls.play
WindowsMediaPlayer3.Controls.play
WindowsMediaPlayer4.Controls.play
sycpoint = sycpoint + 1
End If
4 多流媒体播放器ActiveX控件设计概要
为了实现多流媒体播放器在网络中的应用,可将程序移植成一个ActiveX控件。本文在VB新建工程中选择建立"ActiveX用户控件"即可建立控件。其程序编写与上面所设计的多流媒体播放器没有太大的区别。但其打开方式上有所不同,程序是用户选择打开多流媒体文件,为4个WindowsMediaPlayer控件赋值。但在ActiveX控件中,为WindowsMediaPlayer赋值的是网站开发人员赋值或者在动态页面中对它进行赋值。
4.1 控件属性、方法和事件
作为一个控件,属性是其主要功能的体现。定义一个属性,除了考虑命名和功能,还要考虑该属性的数据类型、是否允许读写、是允许在设计时还是在运行时使用[4]。
属性、方法和事件统称为控件的成员。控件的接口成员有公有(public)和私有(private)之分。私有成员只能在模块内部调用,公有成员可以被ActiveX控件的用户调用。
利用菜单"工具/添加过程"可以添加控件的成员,其类型有4个:Sub(子程序)、Property(属性)、Function(函数)、Event(事件)。范围有2个:Public(共有的)、Private(私有的)[7-8]。
4.2 播放器属性设置
本播放器选择的用户过程为Property(属性)和Public(共有的),生成的代码为:
Public Property Geturl1() As String
End Property
Public Property Let url1(ByVal New_url1 As String)
End Property
其中Property Get( )读取该过程的属性值,Property Set( )为此过程赋值。可以给设定的用户属性赋值和取值。
该控件中,共设置了9个用户属性。分别为4个url赋值、4个同步起始时间和1个窗口数量。设置接口属性startTime1、startTime2、startTime3、startTime4用于文件头同步;sycFile用于文件中的同步。
图5为多窗口调试同步的测试图。程序运行时,首先读取同步文件,读到同步点数目和第一个同步点同步时间。同时运行各个媒体,在第一媒体播放窗口播放到同步点时间处,会判断其他三个媒体播放时间是否与读取到的同步时间相同,相同则不同步,不同就开始同步。
目前,流媒体播放器在网络、教学、会议和娱乐领域使用广泛。本文对多流媒体服务器架设
- 基于Mobile的手机流媒体实时图像浏览客户端的软件设计(09-25)
- 基于J2ME的手机相册系统(10-29)
- DIY小发明:打造你自己的流媒体播放器,解决方案、硬件框图(06-04)
- 嵌入式流媒体携带式系统的设计及改进(03-23)
- 基于Mobile的手机流媒体实时图像浏览客户端设计(09-26)
- 基于ARM平台的嵌入式家庭网关服务器平台(06-09)