1 前言
流媒体的定义很广泛,一般是指把连续的影像和声音信息经过压缩处理后放上网站服务器,用户可一边下载一边观看、收听,而不需要先等整个压缩文件下载到自己机器的视频/音频传输、压缩技术。流媒体也指由这种技术支持的某种特定文件格式:压缩流式文件,它通过网络传输,并通过个人电脑软件进行解码。面对流媒体技术的迅猛发展,作为软件开发技术人员,关心的是将如何应对的问题。流媒体的处理,以其复杂性和技术性,一向受到工业界和技术界的关注。特别是随着互联网的普及,流媒体通过网络广泛应用于工业控制?
数字化监视监控系统是目前比较有市诚成型的技术,为了满足实时监视、实时采集压缩、随时回放、压缩数据流的传播等具体要求,在系统中使用网络视频/音频多点传输(视频广播)的视频数据采集卡,提供AVI(MPEG I Frame压缩编码)采集、MPEG采集,使用相关软件进行MPEG数据流的播放。
2 流媒体播放技术
目前流媒体技术还处于不断发展的阶段,竞争也异常激烈。这种情况直接导致的后果就是目前的流媒体格式极不统一,不同格式的流媒体文件需要用不同的播放软件来播放。不过,百家争鸣的局面对于流媒体技术的发展也是起到了极大的推动作用,下面介绍最常见的3款流媒体播放软件。
(1)RealPlayer。RealNetworks公司出品的RealPlayer软件仍然是目前流媒体市场的佼佼者。相对于微软倡导的ASF,WMV格式而言,RM视频的压缩比表现更加出色,而且对画质损失也可以很好地控制,并提供了灵活的选择方式。2002年3月5日,RealNetworks公司还发布了RealOne的最终版(Gold版)。RealOne不仅仅能够支持音频视频文件,还能让你浏览各种图片,包括PNG,BMP,GIF,TIF等常见的格式。令人高兴的是,RealOne终于支持多文件连续播放了。此外,RealOne中包含了可以立即播放RealVideo及RealAudio信息内容的TurboPlay功能,TurboPlay能够判断在宽带接入中可以利用的带宽,信息内容提供者无须为了利用TurboPlay而对信息内容重新编码,也无须升级服务器。
RealPlayer支持几乎所有的媒体文件格式:除了RealNetworks自己推出的流媒体格式(如*.ram,*.rmm,*.ra,*.rm,*.rp,*.rt)外,还支持SMIL,SWF,MP3,WMA,AVI,MPEG,JPEG,GIF及PNG等格式,但不支持QuickTime的文件格式。
(2)Windows Media Player。在流媒体这一广阔的市场上,微软的起步并不是最早的,但是它占据的市场份额却越来越大,俨然成为流媒体市场的霸主。当然,微软的这一切与其在Windows操作系统中整合Media Player(媒体播放器)是分不开的。Windows Media Player支持的视频流媒体格式主要是微软自己开发的ASF与WMV,这两者的编码技术还是相当先进的,特别是ASF,尽管其画质表现并非十全十美,但是它对网络带宽的要求比较低,同时对主机性能也没有很高的要求。至于WMV,它与ASF的区别不是很大,只不过两种文件采用的CODEC(多媒体数字信号编解码器)不同。WMV一般是采用Windows Media Video 7编码,而ASF一般采用的是Microsoft MPEG4,音频部分是Windows Media Audio 2。然而,现在有些ASF与WMV采用的CODEC有些混乱了,所以两种文件的界限也有些模糊了。
Windows Media Player的外观比较华丽,内核性能出色,由于其挂接在微软自己的系统平台上,稳定性和兼容性不容置疑,在操作上也更容易被用户所接受。但是由于微软在这款软件中集成了大量的附加功能,如广播电台、播放复制CD、寻找Internet视频等,整体速度给人感觉很慢。
Windows Media Player支持Windows下几乎所有的媒体文件格式,包括CD音频曲目文件,ASF,MPEG-1,MPEG-2,WAV,AVI,MIDI,VOD,AU,MP3等,同时可以播放QuickTime文件。
(3)QuickTime。QuickTime是最早的视频工业标准,在1999年发布的QuickTime 4.0版本后开始支持真正的实时播放,其格式为MOV。MOV的视频压缩部分采用Sorenson Video技术,该技术支持VBR(Variable Bit Rate),也就是我们常说的动态码率,它可以动态地分配带宽以尽可能小的文件获得最好的播放效果,并能够在解压缩时获得平滑流畅的画面。
QuickTime的界面非常精美,操作简单,上手容易。它一般以工具条形式出现,当用户选择要播放的文件后,工具条便会出现一个影像观赏窗口显示影像,效果平衡、高音、低音等全都可以在主窗口中调节。QuickTime Player还可以按幻灯片的形式打开多个图像。
QuickTime 5.0主要包括浏览器插件和独立的应用程序QuickTime Player两个部分,前者用来下载和播放媒体文件,后者用来编辑或回放媒体文件。它支持MPEG,AVI,MOV,WAV,MP3,AIFF等视频、音频格式,并且提供了对视频、音频文件进行简单编辑和压缩的功能,可输入多种格式的音频、视频和图像文件,并支持格式转换,能很好地支持基于HTTP,RTP,RTSP,FTP的流格式在线音频和视频。
3 音/视频压缩技术MPEG标准
3.1 数据压缩过程简介
压缩基本上是这样一个过程:通过消除存在于视频信号里的冗余成分,来减少图像或图像组的内容信息,这可以通过分析视频信号的统计预知性来实现,信号的主要部分是有一定的可预知性的。一个极端的例子是正弦波信号,它有高度的可预知性,因为每个周期都是相同的,且只有一个频率,这样就不需占用带宽。另一个极端的例子是噪声信号完全不可预测。当然,实际上所有的信号都界于这两者之间。压缩技术总的来说就是要识别并去除这些冗余,从而减少存储量和所需传输带宽。
3.2 MPEG标准的基本内容与发展简介
多媒体信息主要包括图像、声音和文本3大类。其中视频、音频等信号的信息量是非常大的,而且这些信息的表达方式、输入、输出的要求也各不相同。对这些数据进行有效的表达和适当处理是很重要的,它使多媒体信息压缩技术成为多媒体通信领域中的关键技术之一。为了推动社会由文本信息时代向多媒体信息时代过渡,ISO继MPEG-1,MPEG-2和MPEG-4后又推出了MPEG-7。
MPEG-1制定于1993年(ISO/IEC 11172),是针对1.5 Mb/s以下数据传输率的数字存储媒质运动图像及其伴音编码的国际标准。MPEG-1即一般所说的VCD,视频压缩率为26∶1。MPEG-2制定于1995年(ISO/IEC 13818),是3~10 Mb/s的运动图像及其伴音编码的国际标准。MPEG-2利用了新一代的存储方式,无论画质和音质均比前者优胜,即一般的DVD。
1998年11月公布的国际标准MPEG-4更加注重多媒体系统的交互性和灵活性,它引入AV对象(Audio/Visual Objects),使得更多的交互操作成为可能。同时ISO又推出了MPEG-7的构想,其正式名称为“多媒体内容描述接口”(Multimedia Content Description Interface)。这项新技术已非一种压缩编码方法,它提出了一种适用于现实生活中的各种多媒体内容的标准化描述方案,以提取待描述对象的各方面特征为基础,方便人们对所需的多媒体材料进行快速、有效的检索,对于将来要面对的日渐庞大的图像和声音的管理有重大帮助。
3.3 几种MPEG标准的比较
MPEG-1将视频数据压缩成1~2 Mb/s的标准数据流,它对动作不激烈的视频信号可获得较好的图像质量,但当动作激烈时,图像就会产生马赛克现象。它主要用于家用VCD,它需要的存储空间比较大。
MPEG-2是为了力争获得更高的分辨率(720×486),提供广播级视频和CD级的音频,它是高质量视频音频编码标准,可广泛应用于各种速率和各种分辨率的场合。但是MPEG-2标准数据量依然很大,不便存放和传输。
与前两者不同,MPEG-4标准主要应用于视像电话(Video Phone),视像电子邮件(Video E-mail)和电子新闻(Electronic News)等,其传输速率要求较低。MPEG-4的一个特点是使你由被动变为主动,另一个特点是其综合性。主要原因在于,MPEG-4采用ACE(高级译码效率)技术,它是一套首次使用于MPEG-4的编码运算规则,与ACE有关的目标定向可以启用很低的数据率,它与MPEG-2相比,可节省90%的存储空间。MPEG-4还可以在音频与视频流中广泛的升级,对视频信号范围在5 kb/s~10 Mb/s之间和音频信号在2~24 kb/s之间进行处理。特别要强调的是,MPEG-4标准是面向对象的压缩方式,不是像MPEG-1和MPEG-2简单地将图像分为一些像块,而是根据图像内容,将其中的对象(物体、人物、背景)分离出来分别进行帧内、窒低的码率下获得较好的图像质量。更加突出的是,MPEG-4的设计目标还有更广的适应性和可扩展性,更适于交互AV服务及远程监控。
总之,MPEG-4是一种崭新的低码率、高压缩比的视频编码标准,传输速率为4.8~64 kb/s,使用时占用的存储空间比较小,务求以最少数据获得最佳的画质,并将其作为网络上传送之用。
4 基于VB的流媒体播放系统
4.1 主要实现思路
MCI是微软最初为Windows提出的多媒体编程接口,它管理媒体控制接口(MCI)设备上的多媒体文件的记录与回放,它被用来向诸如声卡、MIDI序列发生器、CD-ROM驱动器、视频CD播放器和视频磁带记录器及播放器等设备发出MCI命令,还支持Windows(*.avi)视频文件的回放。采用Multimedia MCI控件播放采集的MPEG数据流,播放速度比实时监控显示要快,当MPEG文件长度缩短到500~600 k时,就无法看到播出的图像了。改用VB中的MediaPlayer控件,上述缺点仍然存在,原因是MPEG文件长度太短了,播放设备刚打开就已经关闭了,这是编程无法控制的。对于用户要求获取的某些有关压缩数据流的信息和希望实现的某些功能,比如图线尺寸、Copmression Rate、图形的缩放显示等,上述控制件所提供的为方便程序开发人员使用的高层接口已不适用,最明显的是它不支持可变比特率的压缩算法。
为此,微软适时推出了建立在DirectX(包含DirectDraw,DirectSound,Direct3D)之上的DirectShow技术,它是在DirectX之上的媒体层,支持来自本地或网络的各种视频、音频压缩格式的媒体文件的解码和回放,可以从设备上捕捉多媒体流,可以回放各种压缩算法处理的流媒体。这些格式包括:MPEG的音频和视频标准、音频和视频交互标准(AVI)、WAVE、MIDI和高级流格式ASF。
DirectShow在应用中采用流媒体方式对媒体数据处理可以大大减少编程的复杂程度,同时可以自动协商从数据源到应用的转换,流接口提供了统一的、可以预测的数据存取的控制方法,这样应用程序在播放媒体数据时不需要考虑它最初的来源和格式。
其实在Windows\System下有一个Windows中自带的用于控制运动图像播放的动态链接库Quatrz.dll,它实现了对DirectShow的简单封装,它是当今流行的DirectShow技术的前身,在该库中定义了IBasicAudio,IbasicVideo,IBasicVideo2,IMediaEvent,IMediaEventEx,ImediaPosition,ImediaControl和IVideoWindow等类,程序开发人员可以利用它们方便地控制和操作各种格式的流媒体。例如,直接调用ImediaControl类的无参函数Run,Pause,Stop等就可以控制流媒体的播放进程;利用IMediaPosition类对具体播放细节进行定位操作等。流媒体的数据输出显示并不需要特别的控件,在VB编程中可以简单选择一个窗体作为容器或选择一个PictureBox控件作为容器。为了使用该动态链接库,你需要做的仅仅是在生成一个项目后点击VB开发环境的工程/引用菜单,在弹出的对话框中选择ActiveMovie Control type library即可。
4.2 基于VB的MPEG数据流播放系统
以下是利用VB的强大功能开发的电视监控领域的MPEG数据流播放系统。
(1)提供对MPEG流方便的底层操作和高层接口的动态链接库Quatrz.dll
在Windows\System下可找到一个动态链接库Quatrz.dll,在VB的“引用”菜单中将它添加进来即可使用。对于压缩的MPEG数据流的输出显示并不需要特别的控件,在VB中可以选择一个窗体作为容器或窗体上的PictureBox控件作为容器。为使界面美观和便于用户查取相关信息,可采用PictureBox控件作为容器显示播放的MPEG数据流。
VB中PictureBox控件可以显示来自位图、图标或者源文件,以及来自增强的源文件、JPEG或GIF文件的图形,亦可在代码中操作图形属性和方法,以创建动画或进行仿真。在窗体上放置了一个PictureBox控件picTV,在调用了动态链接库Quatrz.dll的基础上,定义一个全局的对象pMC,令pMC指向FilgraphManager的一个新实例,打开被播放的MPEG文件;再定义一个局部对象pVW为IVideoWindow的新实例,打开一个播放Video的窗口;令pVW=pMC,给对象引用pVW赋值,将picTV属性值hWnd赋给pVW的Owner,这样picTV就能显示接收的MPEG数据流了。具体相关程序如下:
Set pMC=New FilgraphManager
pMC.RenderFile "C:\Bank\Montior\Example.MPG"
Set pVW=pMC
pVW.WindowStyle=CLng(&H6000000)
pVW.Left=0
pVW.Top=0
OldWidth=pVW.width
OldHeight=pVW.Height
picTV.width=pVW.width * 15
picTV.Height=pVW.Height * 15
pVW.Owner=picTV.hWnd
可以单独定义一个函数包括这些代码,也可将其放到CommandButton控件的Click事件中。
(3)MPEG数据流的缩放显示
放大或缩小MPEG图像是各种多媒体播放软件中常用的图像显示处理手段。VB中可以使用Image控件对静态图片进行缩放处理,将控件的Stretch属性设为True,则装入的图片会改变比例适应Image控件的范围,因此对图片的缩放处理变成对Image控件的Height、Width属性值的大小变化。只有Image控件才能对图片进行缩放,如果PictureBox控件不足以显示整幅图像,则裁剪图像以适应控件的大小,要想用PictureBox控件实现对输出MPEG图像的缩放,必须改变MPEG数据流的输出比例,调节PictureBox控件的尺寸去适应输出的MPEG图像。在放大或缩小MPEG图像的尺寸时要注意保持Width、Height的比例一致,以免输出的图像变形。
(4)鼠标拖动播放MPEG数据流
VB中的Slider控件是包含滑块和可选择性刻度标记的窗口,在窗体上放置一个Slider控件Slider 1,设置光标移动的最大步长LargeChange=5,最小步长SmallChange=1,最大移动范围Max=50,相关实现程序如下:
Private Sub Slider1_Scroll()
Dim pMP As IMediaPosition
Dim v As Double
If Not bOpen Then Exit Sub
bSeeking=True
pMC.Pause
Set pMP=pMC
v=Slider1.Value-Slider1.Min
v=v / Slider1.Max * pMP.Duration
pMP.CurrentPosition=v
Set pMP=Nothing
pMC.Run
End Sub
(5)MPEG数据流采集时间的获取
VB中提供了一个函数FileDateTime用来获取文件建立或更新的日期与时间。定义一个局部对象pMP为IMediaPosition的新实例,令pMP=pMC,给对象引用pMP赋值;再定义两个Double型的变量curpos,length,将pMP.CurrentPosition赋给curpos,取得MPEG数据流的当前相对位置时间,将pMP.Duration赋给length,取得MPEG数据流的时间长度值,就能获取MPEG数据流相对的采集时间。根据MPEG采集文件建立的特性将两个日期时间相减就可以得到MPEG数据流的采集时间。
若在整个MPEG的播放过程中都要求实时显示MPEG数据流的采集时间,可定义一个获取采集时间的函数,采用Timer控件的Timer事件来驱动。通过引发Timer事件,Timer控件可以有规律地隔一段时间执行一次函数,便获取了MPEG数据流的采集时间。
5 结束语
虽然不同格式的流媒体文件可以采用不同的播放软件来播放,但是对于一些特殊的使用要求,照搬照套地使用现有播放软件仍然感觉不太方便。如电视监视监控领域,在该系统中不仅要求监视画面清晰,采集的数据冗余度低,而且MPEG数据流的播放技术同样很重要。在Windows环境下,充分利用VB的现有控件,开发出特定环境的MPEG媒体播放系统(如只记录了单帧的Audio/Video数据流也能按要求播放)同样具有一定的现实意义。
原文链接:https://www.f2er.com/vb/263322.html