说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Visual Basic环境下Video/ Audio压缩数据流播放技术

HTML文档下载 WORD文档下载 PDF文档下载
Visual Basic环境下Video/ Audio压缩数据流播放技术
国防科技大学
张汉华 计科峰
---- 1. 引言

---- 银行的数字化监视监控系统是目前比较有市场及应用前景的开发项目,基于不同的MPEG采集卡与硬件外围设备开发的监视监控系统在国内外都有比较成型的技术。为了满足实时监视、实时采集压缩、随时回放、压缩数据流的传播等具体要求,在该系统中使用了一种用于网络视频/音频多点传输(视频广播)的视频数据采集卡,提供AVI(MPEG I Frame压缩编码)采集、MPG采集。发送端广播MPEG流,接受端接受MPEG流并显示,网络传输采用WinSock 2 IP-Multicast。如果本机为发送端,网络上另外任何一台PC可以作为接收端。只要指定不同端口号,同时可以有多台PC机作为发送端,多台PC机作为接收端接收不同发送端的视频数据,也可在传送数据的同时在本机将数据存为MPEG文件。本文主要介绍在VB的环境下开发MPEG卡采集的Audio/Video数据播放的一些编程技巧。

---- 2. MPEG的内容与发展简介

---- 多媒体信息主要包括图像、声音和文本三大类。其中视频、音频等信号的信息量是非常大的,而且这些信息的表达方式、输入、输出的要求也各不同。对这些数据进行有效的表达和适当处理是很重要的,它使多媒体信息压缩技术成为多媒体通信领域中的关键技术之一。ISO与IEC于1988年联合成立的MPEG(Moving Picture Expert Group),致力于运动图像及其伴音编码的全球标准化工作。它包括MPEG系统:MPEG视频、MPEG音频。为了推动社会由文本信息时代向多媒体信息时代过渡,ISO继MPEG-1、2和4后又推出了MPEG-7。

---- MPEG-1制定于1993年(ISO/IEC 11172),是针对1.5Mbit/s以下数据传输率的数字存储媒质运动图像及其伴音编码的国际标准。视频压缩率为26:1。MPEG-2制定于1995年(ISO/IEC 13818),是CCIR601建议的图像质量DVB、HDTV和DVD制定的3-10Mbit/s的运动图像及其伴音编码的国际标准。与前面基于信息论的波形编码理论,针对一定比特率的视频、音频编码的MPEG标准不同的是,于1998年11月公布的国际标准MPEG-4更加注重多媒体系统的交互性和灵活性。它引入AV对象(Audio/Visual Objects),使得更多的交互操作成为可能。1998年10月国际标准化组织又推出了MPEG-7的构想,预计于2001年初最终完成并公布,其正式名称为"多媒体内容描述接口"(Multimedia Content Description Interface)。它提出了一种适用于现实生活中的各种多媒体内容的标准化描述方案,以提取待描述对象的各方面特征为基础,方便人们对所需的多媒体材料进行快速、有效的检索。

---- 3.VB开发MPEG -- Audio/Video数据流的播放技术

---- 3.1.VB中Multimedia MCI 控件,MediaPlayer控件播放MPEG数据流的缺点

---- VB中常用的多媒体控件是Multimedia MCI 控件,它管理媒体控制接口 (MCI) 设备上的多媒体文件的记录与回放。它被用来向诸如声卡、MIDI 序列发生器、CD-ROM 驱动器、视频 CD 播放器和视频磁带记录器及播放器等设备发出 MCI 命令,还支持 Windows (*.avi) 视频文件的回放。采用Multimedia MCI 控件播放采集的MPEG数据流,播放速度比实时监控显示要快,在测试时还发现MPEG文件长度缩短到500k-600k时,就无法看到播出的图像了。改用VB中的MediaPlayer控件上叙缺点仍然存在。分析原因是:因为MPEG文件长度太短了,播放设备刚打开就已经关闭了,这是编程无法控制的。而且,对于用户要求获取的某些有关压缩数据流的信息和希望实现的某些功能,比如图线尺寸、Copmression Rate、图形的缩放显示、界面的美观等,上叙控件所提供的为方便程序开发人员使用的高层接口已不适用,要想在此基础上实现对底层的一些操作,难度可想而知。在解决上叙实际性问题时,我们调用了动态链接库Quatrz.dll。

---- 3.2.提供对MPEG流方便的底层操作和高层接口的动态链接库Quatrz.dll

---- 在Windows\System下可找到一个动态链接库Quatrz.dll,这是Windows中带的用于控制运动图像的播放的一个类型库,只要在VB的"引用"菜单中将它添加进来即可使用。该库中定义了IBasicAudio,IBasicVideo和IBasicVideo2,IMediaEvent 、IMediaEventEx、IMediaPosition等类,可方便地在CommandButton控件的Click等事件中添加代码设置和读取Audio的相关值,设置或读取Video的输入输出源的相关参数,直接调用无参函数Run、Pause、Stop等控制播放事件进程,利用IMediaPosition类对具体播放细节进行操作。对于压缩的MPEG数据流的输出显示并不需要特别的控件,在VisualBasic中你可以选择一个窗体作为容器或窗体上的PictureBox控件作为容器。为了界面的美观和用户查取相关信息的方便,我们采用了PictureBox控件作为容器显示播放的MPEG数据流。

---- 3.3.用PictureBox控件显示MPEG数据流

---- Visual Basic中PictureBox 控件可以显示来自位图、图标或者元文件,以及来自增强的元文件、JPEG 或 GIF 文件的图形。亦可在代码中操作图形属性和方法,以创建动画或进行仿真。在窗体上放置了一个PictureBox控件picTV,在调用了Windows\System下动态链接库Quatrz.dll的基础上,定义一个全局的Object对象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.4.MPEG数据流的缩放显示

---- 放大或缩小MPEG图像是各种多媒体播放软件中常用的图像显示处理手段。VisualBasic中对于静态图片进行缩放处理可以使用Image控件,将控件的Stretch属性设为True,则装入的图片会改变比例适应Image控件的范围,因此对图片的缩放处理变成对Image控件的Height、Width属性值的大小变化。由于控件的尺寸发生变化,显示的点距不能改变,造成显示点的像素点与图片不能完全一一对应,显示质量明显变差。只有Image控件才能对图片进行缩放,如果PictureBox控件不足以显示整幅图象,则裁剪图象以适应控件的大小。要想实现用PictureBox控件实现对输出MPEG图像的缩放,必须改变MPEG数据流的输出比例,在调节PictureBox控件的尺寸去适应输出的MPEG图像。实际上,在上面的第3小节里,为了显示输出MPEG图像已经这样做了。只不过用的是读取出的MPEG图像OldWidth、 OldHeight,下面给出一个以原来的1/2大小输出MPEG图像的例子。

pVW.width = OldWidth / 2
pVW.Height = OldHeight / 2
picTV.Left = 135
picTV.Top = 135
picTV.width = pVW.width * 15
picTV.Height = pVW.Height * 15
pVW.Owner = picTV.hWnd

---- 在放大或缩小MPEG图像的尺寸时要注意保持Width、Height的比例一致,以免输出的图像变形。
---- 3.5.鼠标拖动播放MPEG数据流

---- 用鼠标拖动滚动条随意播放MPEG数据流是Windows中多媒体播放机播放VCD的常用技术。VB中的Slider 控件是包含滑块和可选择性刻度标记的窗口,可以通过拖动滑块,用鼠标单击滑块的任意一侧或者使用键盘移动滑块。在选择离散数值或某个范围内的一组连续数值时,Slider 控件十分有用。通过将滑块移动到刻度标记处,可以对MPEG数据流进行定位播放。在窗体上放置一个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

---- 3.6.MPEG数据流采集时间的获取
---- VisualBasic里提供了一个函数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数据流的采集时间。

---- 4.结束语

---- 将成熟的图像压缩技术用于电视监视监控领域具有十分重要的意义。例如:在银行的监视监控系统中,由于客户(银行)身份的特殊性,在对冒领他人存款、银行失窃或被抢劫等扰乱银行正常工作秩序的事件的调查及其处理中,采集的压缩数据流是很重要的办案线索与证据。在该系统中不仅要求监视画面清晰,采集的数据冗余度低,MPEG数据流的播放技术也是很重要的。本文介绍了在Windows环境下,利用VisualBasic自身条件和原有控件开发MPEG卡采集的Audio/Video数据的播放技术。充分利用了VB的优越条件,灵活地与VB中各种现有控件结合,开发出来的MPEG媒体播放器功能完善,回放的MPEG画面能清晰地重现数据采集时场景、做到了"闻其声,见其人"、并能准确确定事件发生的时间时刻。对只记录了单帧的Audio/Video数据流也能同样播放。上述技术已在监控系统中使用,并效果良好。
日本很积极:富士通和NEC确认将推Tizen设备 10大支持移动“触摸操作”的JavaScript框架推荐 数据科学家的争夺及美分析学专业研究生院的建立 从开放走向封闭 Netflix宣布停止发布API key 《植物大战僵尸》神秘续作:可能是一款横版游戏 高性价比:GlassUp宣布支持Windows Phone系统 未挖掘到足够信息:非收集数据少,是利用率只有1% 下一个帝国:谷歌收购初创公司DNNresearch 苹果更新Apple Store应用,可查看零售店库存 开源软硬件:福特汽车的OpenXC计划 Temple Run:Oz稳坐付费榜头把交椅,迪士尼名利双收 Facebook开放图谱示好开发者 新增书籍电影等九项操作 源代码管理的六大视觉模式 最新算法面世 可提高云数据库性能 分析称平板电脑应用将占全球应用经济的35% 三大运营商对微信等OTT业务摊牌 Runscope联合创始人John Sheehan:API已死,API永存! IBM在京发布大数据白皮书 提出五项关键建议 Twitter开源Parquet 将支持Impala加速实时查询 使用Go代替Ruby,将服务器数量从30降到2 初创公司SwiftStack:“放在盒子里的S3” 赫尔辛基:全球移动游戏开发者的“黄埔军校” 不只属于三星!uMoove将发布“眼球追踪”SDK Android掌门人Andy Rubin宣布辞职 Chrome主管接任 openSUSE 12.3发布 弃MySQL拥抱MariaDB Meteor:让实时Web App成为主流 别了,Google Reader!谷歌于7月1日关闭服务 “天网”降临 机器人或将崛起? 涅槃重生:Qt 5 for Android预览版发布 Google Play将逐步移除广告拦截应用 Shapeways公司开放API 3D打印时代来临 请问怎样订阅google上的新闻组?? 浏览器中的时间选择 谁知道程序员大本营2001光盘那个EXE文件的制作方法吗? 为什么没有actionscript的论坛?那个可是前沿啊/ 错误类型:Microsoft JET Database Engine (0x80040E09)是什么错误啊?请大虾们帮忙! 紧急:请问怎样在windows me中添加、设置并使用传真机 有谁有字节序转换的c代码?现在我要将网络字节序和主机字节序相互转换,但又不能调用api,不知那位大侠可以帮忙?先谢了! 用.NET制作安装盘的一些问题 有谁有字节序转换的c代码?现在我要将网络字节序和主机字节序相互转换,但又不能调用api,不知那位大侠可以帮忙?先谢了! 不能访问asp文件了?? 能做到让页面不刷新吗? 请教一个算法,有关数学的 FastReoprt 要!要!要!要!要!要!要!要! 《C++ Primer》 中文版怎么还不出啊! 重庆高程报名时间 怎样用NMFTP象网络蚂蚁那样自动获得下载文件的地址 特酷的串口通讯调试工具,有其它工具... 有没有win32版的mysql JDBC驱动? 郁闷!菜鸟的“关于数据库订购与发布的问题” :( 如何使子类的属性不可见 我想画曲线,类似log曲线的样子,不知道vc里面怎样才能方便的实现,有源码最好 特酷的串口通讯调试工具,有其它工具... 请问如何用电话线将各分公司连网,并实现数据上传功能,以保证总公司的数据汇总,CSDN的高手到那里去了,我已经第二次提了,没有一个人回 请指教! 特酷的串口通讯调试工具,有其它工具... 菜得不得了的 问题,从SQL SERVER中导入一个表(如表名QK)到ORACLE后,不知表名变成什么? 怎样看到PowerBuilder User’s Guide使用手冊。Application Techniques使用手冊呀? 一直想看古天乐的《创世纪》,请哪位提供一下网上哪里有它下载或在线看网址,不甚感激! 为什么一执行文件ss.txt得内容就清空了??? 中文问题 特酷的串口通讯调试工具,有其它工具... sos sos 求,向access2000中写数据的asp代码?和用asp连接access有几种方法? 如何保存xml的网页,谢谢! 如何声明一个变量,可在整个程序内调用,并其生命周期和程序一样长??? 请推荐一本数据结构的书,最好是大学教材,c++描叙,写了 求助:vc++ 6.0中,用向导生成了一个windows程序, 我又新加了一个工具条,怎样让它和以前的工具条在同一行上? 请问VIA VT82C686A芯片的主板最大支持的CPU是多少?? 怎样看vb中控件的代码?如:from,command... 大家帮我看看这段代码哪里错了???? 在jbuilder6下如何存取中文数据库,内码的转换如何实现?高手请进,100分奉上 请问如何在dbgrid控件中 第3列=第2列×第1列 有什么方法可以获得页面信息 菜鸟请教一个复杂结构类型结构体成员变量初始化赋值出错的问题。 CDC实现图片运动问题,请大家多多帮忙?如何擦掉已经画出的图片 那里有Delphi函数表?API的个人理解,希望修正!(新人学习在过程中的问题) exchange的路由器问题 WinFax的烦事。 请问IsProxyClass函数在哪找 请问怎么才能实现将一个datawindow中的某一列拖放到另外一个同样的datawindw中 欧洲是伸向欧亚大陆的一个半岛,为什么说澳大利亚更像一个大半岛 你整么看? 一个碟子一段铁丝一勺洗衣粉怎么证明声音声波的形式传到远方 口语交际 湖北省潜江市的环境污染以及为保护环境应做点什么? 世界最典型的季风气候分布在哪里它们是怎么形成的 近腊月下,夜登华子冈,辋水①沦涟,与月上下;寒山远火,明灭林外.深巷寒犬,吠声如豹;村墟夜舂,复与疏钟相间.此时独坐,僮仆静默,多思曩者②,携手赋诗,步仄迳③,临清流也.当待春中,草木蔓 怎样才能保护环境?6年级的口语交际怎样才能保护环境?别那么长 欧洲西部的三大半岛是什么?在地图上的位置是?学哥学姐们帮帮忙,马上就要结业考试了 英语翻译近腊月下,夜登华子冈,辋水①沦涟,与月上下;寒山远火,明灭林外.深巷寒犬,吠声如豹;村墟夜舂,复与疏钟相间.此时独坐,僮仆静默,多思曩者②,携手赋诗,步仄迳③,临清流也.当待春 自我介绍作文结尾怎么写?教下! 世界上最典型的季风气候区在什么地方? 自吸泵的吸程跟扬程都是什么意思?另外:矿洞垂直深度为约33米,里面进水深约17米,有没有什么型号的自吸泵可以把水抽出来?什么牌子的水泵? 1月,7月的高低气压中心有哪些? 欧洲南部的三大半岛中,面积最大,气候最复杂的是( )半岛形状像长筒皮靴的是( )半岛,该半岛以( )气候为主,岛上主要的国家是( ). 怎样鉴别自吸泵的扬程7.5KW电机自吸泵,参数是扬程55米,流量60立方米.怎么能够知道是否能到达它所说的参数.以前用的是离心泵,平面距离30米,垂直高度3米.电机7.5KW,扬程32米,流量50立方米.24个 如何判断气压的高低有道题给了地区海平面等压线分布图 可是我不会看这个图该如何判断它是低压还是高压呢 求方法 欧洲西部的四大半岛,三大岛屿,两大内海 分别是谁? 在国际单位制中,功率的单位是“瓦”它用基本单位表示是什么? 南北半球1月7月的高低气压中心有哪些? 怎么让母鸡生小鸡?公鸡和母鸡交配后才能生小鸡,交配后的母鸡生出的所有蛋都能生出小鸡吗?还是不一定哪一次生出的蛋才能孵出小鸡?怎么才能让母鸡生出的所有的蛋都能孵出小鸡? 用一个碟子,一段铁丝和一勺洗衣粉如何做实验?小明在家中打开音响听音乐,忽然想起课本上说声音能使空气形成疏密相间的波动并以此把声音传到远处,他找来一个碟子,一段铁丝和一勺洗衣 澳大利亚1月和七月气压差异的原因 750瓦的带压力罐自吸泵最大压力能达到几个压力? 小明在家中听音响时,忽然想到课本上说声音能使空气形成疏密相间的波动,...写不下了,下面继续:并通过空气将声音传到远方.小明想:“声音的波动我为什么看不见?这种说法到底对不对” 我们能听到物体发出的声音是因为: A有物体 B有发声的物体 C发声体在空气中振动 D物体在真空中被敲击 《华歆王朗》文言文翻译题华歆,王朗俱乘船避难·······世以比定华,王之劣.(1)解释下列括号中词语歆辄难之(难) 既以纳其自托(以)(2)用现代汉语解释下列句子王欲舍所携人既 盐水蒸发是分解反应吗? 怎样跟孩子解释动物交配跟孩子出去时正好看到两只小狗在交配,孩子问,一时不知道该怎么跟孩子说,只好说了句“两只小狗在打架”,我知道这样不是很好,可又不知道该怎样跟孩子解释, 亚洲南部的三大半岛自西向东依次是? 窑洞的特点是什么 Mg在空气中可以和N2反应,但是按照氧化还原反应中O2的氧化性比N2的氧化性强,那么Mg应该先和氧气反应,等氧气完了后在和氮气反应,也就是镁在空气中只和氧气反应?这是怎么回事?希望解释下. 华歆王朗俱乘船避难中王朗表现出怎样的性格? 山西的窑洞特点就是一些特点,急用 常温下Mg能与空气中的O2反应吗?为什么?常温下Mg能与空气中的O2发生反应吗?为什么?那高温下呢? 欧洲南部的三大半岛自西向东分别是?rt 窑洞的特点? 有若干克浓度为4%的盐水,蒸发了一些水分后变成了10%的盐水,再加入300克4%的盐水混合后变为6.4%的盐水.问最初的盐水多少克?一定要用二元一次方程! 我找不到华歆王朗的介绍! ( )的物体,在液体中( ),比同体积的液体( )的物体,在液体中( ) 有若干克5%的盐水,蒸发一些水分之后变成了10%的盐水,再加进300克4%盐水,混合后变为6.4%的盐水,问:最初的盐水是多少克? 欧洲南部三大半岛自西向东依次为? 液体的体积常用什么来表示 有若干千克4%的盐水,蒸发了一些水分后变成了10%的盐水,在加300克4%的盐水,混合后变成6.4%的盐水,问最初的盐水是多少千克? 华歆...华歆、王朗的(品质)好坏.的原文和题目十分钟内 液体的体积用什么表示 有4%的盐水若干克,蒸发掉一部分水后,浓度变为10%;然后在加进4%的盐水300克,混合后变为浓度是6.4%的盐水,问最初 盐水多少克? 亚洲南部三大半岛的气候类型自西向东分别为 液体体积常用()、()来表示 有若干克浓度为4%的盐水,蒸发了一些水分后变成了10%的盐水,再加入300克40%的盐水混合后变为6.4%的盐水问最初的盐水多少克 华歆和王朗谁更好? 力的作用效果可以表现在两个方面:一是改变物体的运动状态,包括()改变和()改变两种情况. 噪声是指发声体做 的振动时发出的声音 用一个碟子、一段铁丝和一勺洗衣粉做实验.证明声音能使空气形成疏密相同的波动.请写出实验过程. 窑洞是什么地方的房子 如何给孩子讲解关于性问题 一个碟子 一段铁丝 一勺洗衣粉做一个试验证明声音能使空气形成波动并以次把声音播到远处? 口语交际:怎么样保护环境(几句话)只要几句话 孩子们想知道的有关性和成长的那些事怎么样 用碟子、铁丝、牛奶证明声波存在小宇在家听广播时,想起课本上说:“声音能使空气形成疏密相间的波动并以此把声音传播开来”这种说法到底对不对呢?于是他找来了一个碟子、一段铁丝 帮我写一下保护环境的口语交际.急!1 立式无密封自吸泵不出水怎么处理
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘