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

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数据流也能同样播放。上述技术已在监控系统中使用,并效果良好。
谈Clash of Clans货币化的成功 UX设计师应当规避的七大问题 初创公司Citus Data将CitusDB扩展到Hadoop 移动医疗:巢儿孵化器为何笃信是创业金矿? 一个新的雅虎:雅虎主页改版 谷歌发布Google Glass最新视频 公开接受预定 微软Windows Blue结束半程开发 或今年8月推出 JavaFX即将开源,支持iOS与Android开发 趣味编程网Codecademy携手Twitter、Evernote、Box等推出系列API教程 开发者,别让任何人绑架你的工作节奏 REST Style来袭 LinkedIn开源Rest.li框架 [探讨] 是用jQuery框架还是自造车轮呢? 一周消息树:Java 你还会让多少人继续“受伤”? Chromebook Pixel,揭开谷歌云世界的大幕 惠普:第一财季净利12亿 同比仍在下滑 谷歌发布超高清触屏笔记本Chromebook Pixel 传谷歌正开发触屏Chrome OS笔记本 今年或上市 估值25亿 视觉社交网站Pinterest融资2亿美元 跨平台开发框架Xamarin 2.0发布 移动新趋势:扁平化设计 vs. 拟物化设计(上篇) 杂谈 App Store 之 HIG 与 Objective-C 为什么苹果三星将主宰智能电视未来? 罗永浩可爱多:Smartisan OS即将发布 春晚 VS. 移动应用:用户注意力统计报告 Twitter发布BootStrap 2.3版本! 面向对象编程从骨子里就有问题——看看名人大家是如何诋毁面向对象的 开发者及团队能从LibreOffice那里学到什么? 8000美元存储135TB数据:打造开源的存储硬件 Bing,每月27亿的有效搜索不及僵尸网络的一半 为什么说Amazon的James Hamilton是“可遇不可求”的? Facebook背后的数据团队 冒昧求救,光驱不能使用,不能boot 我的主机总收到外面发的广告信息? 高分求助急!!! 见鬼了,我添加一个TServerSocket控件,然后编译出现:Declaration terminate incorrectly 有谁知道用哪款打印机比较好呢? 按钮BitBtn1上有图片,在图片上写字的问题。(在先给分!) cystal reports 8.5 english显示繁体问题,急,等待 Unix下用什么源代码检测工具比较好? 我的电脑出什么问题了?各位帮帮忙 界面导航如何分类? 怎样得到本机的网卡号??? %¥#问个小问题,知道的都来抢分啊 谁知道哪儿有支持认证的SMTP组件下载? 有什么软件能查看PE文件的? ADO问题!!!! 100分求购最简单的串口程序!需要详细注释! 怎么给大家份呀?to wyz_csdn等(500分诚征wav 转换到MP3的源程序(VC++的例子)) 在directshow中,不知道怎样对播放的画面的亮度进行控制? 如果深愛的人要離開你,是變心還是死亡好一點?(讨论) 贴了二次为什么没有人指教? 戒水快两年了,如今回来看看,物不是人非啦 新手一问 关于datagrid 修改数据的问题,帮我看看,多谢 谁有这两本书,请帮忙发到我的邮箱里,100分相送 到底应该怎么办? 大家好,如何打开DLL文件? 建议成立一个程序员协会 关于IE中图片的保存 VB 语言支持问题 高分求李维《delphi5.xDELPHI5.X ADO/MTS/COM+高级程序设计》示例源码!!!! 请yangshu进来!给妳点分!!!倒分! 请教各位如何实现dbgrid中按住shift多选的问题? 请问把sql-server7中的数据文件copy出来行吗? 找不到类,请大家帮忙解决,谢谢 异常处理问题 怎样恢复被损坏的"本地用户和组" 小弟在线等待,一小问题,,大家来帮忙?? 求jsp树的原代码 最好是jsp+js+xml 执行效率要高。(从数据库中动态生成的)在线 关于多层结构中事务处理的问题. VB6.0升级到VB.NET的问题。 在ASP中使用ActiveX Control ADOTable表名如何在运行时“递进” 这样的待遇能招到人吗? 不好意思,问个技术问题。其他版实在没人气!只好来这问! 不爽,辞职,散分! 在线等待(100)往一个表的字段赋值,怎么不行啊! 急!在线等待! 如何把一个窗体内嵌到另外一个窗体的指定位置? 电源键设置问题 假设有一个变量CString str,调用str.GetBuffer(ncount);上面函数的参数应该为多少,才能取得缓冲中的全部字串值? 如何做局域网中的机子通讯 血浆中co2能不能运到组织液中原题所问:co2的来源及其去向?来源一空有血浆,去向一空有组织液,是不是表明血浆中的co2可以进入组织液? 甲基营养菌 "小子安知壮士志哉"断句 英语翻译(一) (甲)良尝闲从容步游下邳圯上,有一老父衣褐,至良所,直堕其履圯下,顾谓良曰:“孺子,下取履!”良愕然,欲殴之.为其老,强忍,下取履.父曰:“履我!”良业为取履,因长跪履 细菌细胞的碳氮营养比为? “小子安知壮士志哉”的句意与司马迁 陈涉世家 中哪一句有异曲同工之妙? 宋太祖的杯酒释兵权是什么意思? 细菌细胞的碳氮营养比 柴草煤屑和可燃物堆放不合理,空气不流通可能引起什么后果?式分析原因! 为什么干电池长时间放置又有了电?3q 西欧走向联合的过程是怎样的?西欧走向联合的过程,起源于何事? 原料气 液化石油气 是什么?原料气是什么~我只知道原料气是液化石油气的一种原料,请问还有没有更深入,细致一点儿的分析呢? 该化合物该怎么命名?书上有命名为4-甲基-2-戊胺的? 二战后的时候,西欧走向联合始于神马领域?军事?经济?外交? 正常标准液化气瓶内装几公斤?一口灶正常连续使用每小时消耗几公斤气?每小时大概花费多少钱? 为什么没电的干电池长时间不用后还会生出电来. 西欧各国为什么要走向联合? 液化气气灶灶面材料哪种材料好?是钢化的玻璃板好?还是彩钢的好?哪个好,还有其他的材料的吗?我们家的液化气灶是彩钢的,一点都不好搞卫生,搞不干净,说是要用干的摸布擦一下,但是也不理 "四亚甲基二矾四胺"是什么东西啊知道那有卖的吗?这边的耗子成灾,没有办法,善哉善哉 在进行英语听力测试时,各考场的有线扬声器是同时开播,也是同时停播的,他们的连接方式是_____联,原因是它们 独立工作. 100克稀盐酸与足量的碳酸钙反应,生成的气体通入澄清的石灰水中,完全反应后可得到20克的白色沉淀,求该盐酸溶液的质量分数.【请用初三化学的算法,我们可没”学过“mol”这个单位】我想知 N'N-二(2-羟丙基)-N'N-四甲基己烯二胺有谁知道这个东西那里有销售的,或者是相关产品,以及类似的产品,只要是N'N-二(2-羟丙基)-N'N-四甲基这种类型的就可以了,(CH3)3[CH3CH(OH)CH2]N+-(CH2)6-+N(CH3)2[CH2CH(O 柴草燃烧是否符合质量守恒定律如题, 长者衰者而全存乎中而的意思. 所谓天诚者难测,而神者诚难明矣中而的意思 死而有知而的意思 共轭二烯烃和氢气有1,4加成的反应吗? 通其变,使民不倦;神而化之,使民宜之的意思 诚者 天之道也 诚之者 人之道也的意思 为什么宋太祖要杯酒释兵权? 一念通神是什么意思 诚者,天之道也;诚之者,人之道也.是啥意思 干电池用完了,为什么放置几天后又“生”电了呢? 幼学琼林里有一句“ 广钱固可以通神” 是什么意思?书上没的解释没看懂~他到底拿了人家的钱了吗? 诚者,天之道也;诚之者,人之道也 的意思 耳机的两个喇叭是串联还是并联 “神魔界有人情,精魅亦通世故”《西游记》刻画的众多神魔魅都具有人的情感.请举一例,具体说明这一特点 以下所列,哪些是以少胜多的著名战役?1.巨鹿之战 2.官渡之战 3.赤壁之战 4.淝水之战 A以下所列,哪些是以少胜多的著名战役?1.巨鹿之战 2.官渡之战 3.赤壁之战 4.淝水之战A.1234 B.124 C.234 D.134 用干柴草或煤气做燃料来煮饭,在这个过程中是什么能转化为热能 初读通语句,再读明大意,三读有感悟,四读有内涵,五读有启迪.这句话怎么理解?怎样用于文言文的讲解中我们要讲《山市》这篇课文,两个课时. 布雷顿森林体系和牙买加体系的不同点 大家认为张良;萧何;韩信,你会更信任谁?我最喜欢张良,信任他简单或具体说明原因 农民在刚刚返青的麦田里烧柴草是干什么?请问是干什么 是为了保暖吗 柴草燃烧时释放的能量是生物能吗?如题、、还有吖——核能和地热能来自地球本身么? y=arctan(1-x^2)/(1+x^2)这个算不算复合函数答案是dy=[-2x/(1+x^4)]dx 但是我认为求微分应该是arctanu求导再乘du,但是du应该有等于u求导乘dx,可是看答案的意思好像没有再算du,而是直接用arctanu求导乘dx ( 麻烦会数学的帮我看看这个arctan(1/6)=? 关于能源,下列说法正确的是:A:柴草燃烧时释放的能量是生物能 B核能和地热能来自地球本身 C动物体内葡萄C动物体内葡萄糖被氧化成CO2事热能转化为化学能的过程 请问y=arctan(1-x),求y' 考研数学三:arctan函数问题如图画蓝线部分,arctan(e^x)+arctan[e^(-x)]=π/2怎么算的? 1柴草燃烧放出的能量为生物能 2 核能地热能来自地球自身 判断正误与理由 ∫∫(D)arctan y/x dxdy.D:1≤x^2+y^2≤4,y≥0,y≤x 张良,韩信,萧何 怎么死的? 班超字仲升,扶冯平陵人,徐令彪之少子也 这是哪个文言文拜托勒```` y=2x*arctan(y/x),求y‘’ tan x 和 arctan x 之间有什么数学关系吗?比如是倒数这样的? 柴草燃烧的能量转换为什么是生物能转化为热能而不是生物能转化为热能? 做饭时若要时柴草燃烧更旺 可将柴草架空 其原因是? 韩信,张良,萧何谁最后死的?都咋死的? "小子安知壮士志哉"这句话的意思顺便把含有这句古文的文言文翻译出来. 柴草燃烧释放的是生物能吗 在进行英语听力测试时,各考场的有线扬声器是同时开播,也是同时停播的.它们的连接方式是___联,原因是它们___独立工作. “班超,字仲升…………小子安知壮士之志哉” 雪地精灵--拉普兰驯鹿【高清组图】北京出租涨价近五月 司机:空车增多收重庆彭水小学生摸黑爬悬崖上学 最窄处叙利亚问题特使与叙总统阿萨德会晤 将明年起北京车辆违反尾号限行或被罚10梦鸽昨现身北京301医院 学生证实李俄外长称叙问题国际会议遭破坏 批西方记者实拍芬兰割鹿角过程:驯鹿难逃被宰港报:美国新军舰将刺激解放军奋起直追硕士学位 科级干部 浙师大图书馆门槛喧嚣城市难掩寂寥内心—老漂族,幸福港杭州到广西快速铁路明年底打通 6.5奥巴马再提名支持者当大使以再释26名巴勒斯坦囚犯穆兄会又一高级领导人被捕4名法国人被绑3年获释日本解密文件称美曾让其修宪叙利亚副总理贾米勒被解职出差期间行房受伤澳公务员求偿未果印度客车事故至少44人亡澳国防部称愿“将功赎罪”佩兰与“翻译哥”并无矛盾 用英语作答新“预选赛之王”社交网站助阵美总统大选 望借此“大捞混双要“打进”2020奥运杜琪峰的大胆实验《清明上河图》全卷铺开展出新生儿90天内参保才能报销当年门诊费散户戏称股市进入撒娇模式阿汤哥北京影院匆忙亮相南征北战年底所有公交线可实时查询澳门银河综合度假城呈献秋日顶级盛宴新闻点点评此穆勒超越彼穆勒晚清名臣左宗棠的京城岁月同程旅游进军健康养生游美国:对俄关闭领空 希腊:管得真宽古都北京的臣与城拼杀“优惠”抄告单位了,然后呢?一招识别真假防晒衣
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘