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

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数据流也能同样播放。上述技术已在监控系统中使用,并效果良好。
俄罗斯当局封杀GitHub,理由是教唆自杀 裁员110人、关闭工作室,Rovio重组求出路! 全Swift开发、代码开源!有钳的Firefox for iOS 详解开源游戏开发框架HaxePunk的主要特性 《程序员》杂志休刊通知 2014 TOP50最具价值CTO获奖名单揭晓! TIOBE 2014年12月编程语言排行榜:R和Swift成为年度语言候选者 免费增值应用正在“杀死”游戏开发者? 直接Mark!开源的DevOps开发工具箱 Apache Mesos联合创始人Benjamin Hindman:谈分布式应用现状 直觉不靠谱!使用移动应用分析的七个巧妙方法 屏蔽、挖角与丑闻,Uber的“创收神器”泡沫 蚁视科技发布会:三大产品与四大概念技术 盘点VS2015 预览版的5个新特性 低能的“智能” 你就是明星,第一届IBM RockStar正式启动! Kubernetes:Google分布式容器技术初体验 方法可以复制 AngularJS资源集合 那些年,微信走过的开放之路 从YunOS话阿里移动互联网云生态布局 Mobile First!苹果联合IBM发布10款企业级App iOS8.1.1越狱又惹急苹果!扒一扒黑客与苹果的斗争史! Firefox.html:用HTML重现Firefox UI Qt 5.4正式发布!引入WP,支持HTML5混合开发 2014智能硬件盘点第二弹!这次咱走暖心的 聚合数据资产,推动产业创新——2014中关村大数据日看大数据变现 拥抱开源:微软Windows 10宣布全面支持AllJoyn技术 改变App领域发展!友盟推“数据工场”战略,两款新品亮相 Cloudera正式登陆中国市场:与英特尔携手共助本土企业淘金大数据 Go 1.4正式发布 支持Android开发 【特别提醒】2014中国大数据技术大会门票全面告罄 不接受现场购票 倡议:不管提的问题有没有解决,一段时间后把分都给掉! 登陆后,怎么看不到分数了? 在控件的事件中将控件Free了行吗? corba在delphi6中无法运行 我胃口很大!!! VB能允许运行多大程序才不会出错? 哪里有D版,到哪里能买到D版的??? VB如何插入汇编程序代码?“=ASM:”吗?怎么用? 如何解决读英文书开头难的问题? 有没有打印Tdecisiongrid的孔件 日记 情归何处?? 谁知道哪里可以弄到这本书"Windows Graphics Programming: Win32 GDI and DirectDraw" 程序员杂志第7期的程序擂台目前为止只有一个人做对了 分数不高,还请各位DX们指点以下:如何用DELPHI控制excel的格式(比如第一列的宽度,第五行的高度),以及如何在WORD中生成表格,其中填入数据库的数据. 各位情感高手请解答(没有谈过恋爱的免谈) 一个list控件,style设为checkbox,要怎样才能使列表中各项的默认值是选中状态,也就是说各项一开始都是打了勾的 阿虎菜问7:请问C与C++中的内封函数应该差不多吧? s_cube(竹子), s_cube(竹子)~!! 我爱你,s_cube(竹子) s_cube(竹子) ~!在哪里 简单问题(1) 如何不运行编译? 有谁知道怎么从perl里调用一个c库里的函数????????? 请问在CB中如何隐藏WINDOWS的任务栏呢? 今天不爽,下班后打星际,大家一起来。 指点!在PB中怎样用程序作成一张动态的交叉表 编辑控件怎样才能显示那些怪字符? 有没有人喜欢郑智化 大家推荐好听的几首歌吧! 请教:怎么学c++? 高手点拨! 各位网络高手.如何在程序里讲ip地址转化为域名 有什么方法,可使表单内的组件背景变成透明的而文字不透明,请看例子: 编辑控件怎样才能显示那些怪字符???? swall(壹心) 你还在深圳特区吗? 如何设置Session的密码?请高手指点迷经^^^^^ 哪位可以解释一下下面的代码? perl 的人气太差。罢了罢了。找本perl自己搞定 MsSQL7.0 当日志文件大小未限制而变得很大时,怎样清日志文件,使其减小? 请教诸位牛兄牛姐牛夫人---有难度哦(着急出活!) 基本问题:如何将一个.txt中的内容读入到内存再从内存中读出并存为另一个文件?谢了先!!!! 高手帮帮忙!!!!!!!!!!!!!! 又有台风了。。。。 在zip包中加入ASP推荐的PAD File有用吗????? PB连接SQL数数库,为什么显示的表会不全 如何把一个文件file.dat里的数据写入软盘0磁道0磁头1扇区. 我要骂人! chris2001(牛虻),不是东西 华为工程师 谁知道 vb 的序列号?????? VS.NET 有开了个新铺子。为什么我的ejb/j2ee还没有开张。气愤。 老大们:我是菜鸟,有问题要问,不过不要笑我。一定给分的 再次发问:关于在SQL SERVER中的某张表上建立触发器...... 测人的体温的温度计除了水银温度计和电子温度计,还有其他的么? 把一根温度计浸入热水中,温度计的水银为什么先下将后上升 为什么,在焓湿图上,干球温度35度,湿球温度23度和干球温度30度,湿球温度23度的焓是一样的呢? 什么是贝克曼温度计的基点温度 我自制了一个30度恒温箱,试验要求温度精确,我采取的是电子控温器,箱内用电子温控探头,为了保险我又放了一支水银温度计在箱内,同时把电子温控探头和水银头绑在同一位置,但读出的结果 怎么样正确使用水银温度计可以手拿另一头给宝宝试热吗?可以放在她的脖劲下试热吗? 贝克曼温度计和接触式水银温度计一样吗? 水银温度计准和电子温度计哪个比较准? 水银温度计在使用中有哪些缺陷 贝克曼温度计多少钱一支? 水银温度计和电子温度计到底哪个准?最近一直看温度,心里有很多的憧憬……但是今天发现一件事,我一直是用水银温度计在量自己的口腔温度,今天早上水银温度计量的口腔温度是36.9(因为 太空中能否使用水银温度计失重状态下能否使用水银温度计 一种温度自动报警器的原理图,在水银温度计里封入一段金属……………一种温度自动报警器的原理图,在水银温度计里封入一段金属丝,当温度升高时,水银面____当温度达到金属丝下端所 用水银温度计测量液体温度,在温度计示数上升的过程中,水银的密度将 ▲ (填“增大”、“减小”或“不变”).我知道答案是减小,但物质密度不是物质本身的性质么?和质量,体积无关么? 水银温度计宝宝刚才把水银温度计放在嘴里咬碎了 我晕 不知道有没有吞到嘴里去 怎么办啊 急 有一种温度自动报警器,在水银温度计里封入一段金属丝,当温度达到金属丝下端所指的温度时电铃就响起来发出警报信号,请说明它的工作原理. 用水银温度计测量液体的温度是正确的方法是什么? 用水银温度计是因为水银是. 水银温度计和电子温度计哪个准啊同一时间把水银温度计和电子温度计在口腔中测量出来的数值不一样,到底要看哪个的啊水银36.4 电子35.8 (差了6度诶)电子温度计我是买【东阿阿胶阿华医 在常温时,将水银温度计插入下列某种液体中,取出温度计放置在空气中后,温度计的读数先升高再降低,则可推断温度计插入的液体是A.食盐水 8.酒精 C.浓硫酸 D.浓盐酸为什么?水银温度计 水银温度计怎么测都看不见有水银啊是新买回来的我之前买了几个都是看不见有水银怎么回事啊 水银属于液态还是固态?水银可流动但又是液态金属,说他完全是液态也不行,那他到底是什么? 为什么蒸馏实验的时候温度计水银球要放在蒸馏烧瓶支管口?放在其他位置有影响吗那为什么在这种东西没蒸发完时,温度计示数会上升,我觉得在这种东西蒸发完之前温度应该是恒定的啊 水银温度计怎么看 水银的固态与液态 比较水银的固态 与 液态 比较 哪个重点啊?在同体积下 在蒸馏装置中,温度计水银球的位置应在何处?为什么? 怎么看水银温度计 水银温度计里的水银是液态的还是气态的谁知道 蒸馏实验时,温度计的水银球应放在蒸馏烧瓶只管口处.哪错了? 怎样看测试体温的水银温度计的水银有没有跑出来? 水银是液体还是固体呢?为什么打碎以后是固体的球状物呢?后面的问题也要回答的哦 蒸馏实验时温度计水银球不放在冷凝管口,如果偏上偏下各有有什么影响那么温度计怎么控温呢?放上放下温度不都是一定的吗~跟蒸馏出来的产物有什么影响呢? 水银温度计怎么看求图 汞是属于固体还是属于液体 蒸馏装置中,温度计的水银球应位于什么地方?作用是什么? 已知湿球温度和干球温度,大气压强,如何求含湿量d?如题,应该在焓湿图上查得出的,我想知道怎么查,不要公式,因为不知道定压比热没法算.求解!我只记得查相对湿度为100%的那条线,但是按干球 温度计里为什么要用水银? 水银温度计在装热水的杯子里爆了偶然,老婆把水银温度计放在有时炒菜时加水的杯子里,当时里面装的开水,结果温度计爆裂了,家里老人家觉得没什么就倒到下水道去了,然后只是用洗洁精清 什么是湿空气,含湿量和相对湿度的定义是什么? 在太空中使用水银温度计.貌似答案是可以.但是还是有点怀疑,我是这样想的.气压低的话沸点低 .那水银不会沸腾么.0.0 还有看过好多人讨论真空下水到底会不会沸腾,好像都没什么结果.请问有 为什么水银温度计放在热水里,示数会先下降再上升?玻璃泡的变化会那么明显吗?有没有什么资料可以找给我看一下? 如何根据空气温度、相对湿度计算含湿量g/Nm3?例如:空气温度32度,相对湿度83%,如何计算g/Nm3?通常可知含湿量为25.22g/kg,请问如何折算成g/Nm3?谢谢了,Nm3是指标准立方米(1个大气压,20摄氏度), 水银温度计碰破后,为什么可用硫粉覆盖是因为贡和硫反映吗? 将一支灵敏温度计的玻璃泡浸入热水里,并立刻观察温度计细管里的水银面的高度变化,将会看到温度计中水银面下降,然后再上升.试说明其道理. 已知温度 露点 气压 求相对湿度 温度计的水银球破裂后,掉在地上的水银能用硫粉除掉吗?换句话说,硫能和水银(汞)能反应吗?如果能反应的话,我想问问硫相对于汞有什么作用?希望前辈们给予详细的解答! 将一支灵敏温度计的玻璃泡浸入热水中,为什么细管内的水银面先下降再上升? 关于干球温度计,湿球温度计的问题我有一个疑问,假如湿度越大,那湿球温度计所沾上的水分就越多,那么蒸发的水分就越多,吸热,制冷就越多,湿球温度计的示数就越小,干湿度差就越大,那就相 汞制温度计打碎的处理除了硫粉还有其他方法吗?我想知道对于汞,有哪些相对便宜的材料能迅速处理汞,请注意要求:迅速,低廉.另外,温度计现在有哪些种类?哪种用的比较多?有哪些可以或者 两只内径不同,下面玻璃泡内水银量相同的合格的温度计,同时插入一杯热水中,过一会儿则看到( )答案是(D)为什么呢?A.两只温度计水银柱上升的高度相同,示数相同 B.内径细的温度计水 如何根据空调冷凝器的空气进口干球温度计算出空调的冷凝温度手头上现有一台冷凝器的换热器,各个尺寸参数都已经知道了.现在要对该换热器做实验,按照国家标准,空气进口干球温度取35度, 为什么水银温度计碎了要撒硫粉 温度计接触热水,水银为何先下降后上升 高中有机化学里各个需要温度计的实验中温度计水银球的位置分别在哪里还有没有?还有没有啊? 硫粉是什么,对吸收水银有用吗?因为偶家温度计破了,听别人说硫粉可以吸收水银. 当将水银温度计放入热水中时,会看见水银柱先是下降再上升,为什么? 有一种测量空气湿度的温度计 所示 它是由两支相同的温度计组成的 其中一只温度计正处于空气中另一只温度计乙的玻璃泡浸在潮湿的海绵中 将其放在室内 其中 的示数小 这是因为 .两示数 救救我吧,中午打碎了一般水银温度计,晚上打破了电子温度计,当时我宝宝也在她刚42天,我该怎么办啊急.谢谢了我还没有分. 用温度计插入热水中测量热水的温度时,为什么开始时水银柱略微下降,然后在上升?分析是什么原因? 空气干球温度为27℃,湿球温度为19.5℃,空气湿度为多少?怎么计算?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn