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

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数据流也能同样播放。上述技术已在监控系统中使用,并效果良好。
VB用自己的'PROGRAM'测试自己的电脑 有 BitMap 之Menu -VB资料 运行其他程序,并等待执行完毕 -VB资料 再谈VB程序的加密 在 VB 程序中如何设定 Mouse 光标的位置? 在ActiveX DLL工程中慎用App对象-VB资料 在ActiveX控件工程中设置DataField属性-VB资料 在VB中异步执行程序 在VB编程中有效地组织和利用资源 在VB应用程序中巧用DLL 在VB应用程序中使用INI文件的一点体会 在VB中操纵OLE服务器应用程序 在VB中改变显示器的分辨率 在VB中获取和修改计算机名字 在vb中没有指针,怎样才能将数组作为参数。 在VB中如何调用C++Builder创建的DLL 在VB中设置常用的外部设备 在VB中使用枚举变量 在Visual Basic 中使用C++ 类 在WindowsNT网络中广播消息 -VB资料 在可编辑控件中创建一个新的上下文菜单 -VB资料 在软件中设定热键-VB资料 在注册表中添加自己的文件类型-VB资料 在桌面上建立 Internet 快捷键 -VB资料 在桌面上添加程序的快捷方式 -VB资料 VB怎样得到当前的屏幕分辨率? VB怎样关闭Windows VB怎样关闭一个程序 VB怎样使我的程序总处于屏幕最前方?(Always on top) VB怎样延迟一个VB程序? VB怎样在VB中控制WORD 我是新手,谁能告诉我如何新建类? 各位GGJJ,帮帮忙!如果每点击一次button建立一个线程,建立多个不同的线程,怎样实现? 请问那位windows98高手可以帮帮忙忙 各位GGJJ,帮帮忙!如果每点击一次button建立一个线程,建立多个不同的线程,怎样实现? 关于XML中NODE的类型的问题(特急!!!) 大家来帮小弟以下啊,!!! 如果我把一个TAdoQuery变量送到子函数中? 谁能告诉我Bjarne Stroustrup应该怎么读? 说了半天到底谁的是正确的?在100分。delete p 是删去p指针,还是它指到的内容,*p。还是删去什么?free(p) 呢? 大家好,我有一个问题问一下你们很急的。我在线等待!!! 我要去上海找工作(java) 在线提问:各位朋友帮忙啊!很急啊! 关于通过telnet修改2000的用户密码问题 请问有无现存的四舍五入函数?(in vc) 请指教有关bde和9i的问题 帮助!谢谢! 着急!!!!!!!!!!!!!!! 关于CHM文件的菜鸟问题 各位帮帮忙,我的程序重要用定时器,怎么做呀? 为什么没法看贴子? 如何在PB8。0上创建可执行文件,,,,,,(请详细一点) 关于TStrings怎样去取值? 如何编程更改IP? 谁来帮帮我!!!!! 生成密码字典,有什么好主意呢?说说好么? 有关c++中何时分配内存的问题 急救!! 请教:有关列表框 谁有win98操作培训讲义,给我发一份到—— win2000下如何对并口进行操作? 请教IBM Open Class Libraries的问题 小弟高分求“Linux 0.02版”的源代码! 理解csdn,以后再不发政治问题的贴了。我的名字也马上改。 什么是流???(笑话) 讨论.net平台上的软件开发,请教高手 书和方法! 斑竹不要删这个帖子,别人给我做了一个FLASH网站,我放50分给他的:) 为什么看不到 关于拷贝函数 最老的帖子是什么呀?第一张帖子是谁发的呀? 我想使上下结构的网页框架位置不可以调(上方的导航条固定). WebLogic过期了,在线等待! 高手手请进!文本文件数据库表的问题?????? NOTES中如何实现这样的语句? 老板拿枪指着我,关于开共享,十万火急!! treeview控件中节点上鼠标右键点击的事件如何处理,急?!! WORD中使用VBA的一个问题 200分讨论,不够加分.关于QQ后台数据库设计如何实现,如何将好友的表关连,做到最小的数据冗余...... 请各位帮帮忙,很急! word 索引 求购或合作开发:中小型超市进销存、酒店管理源代码! 半径为R的半球形碗内表面光滑,一质量为M的小球以角速度ω在碗内一水平面做匀速圆周运动,则该平面离碗底 欧洲人均GDP的增长率下降的原因 如何使用大于1.5V的干电池给5V单片机供电使用4节干电池理论上是6V电压,但是碰到一些不正常的山寨干电池有1.66V,这样4节就是6.6V左右,如果串联压降0.7v的二极管得到的电压为5.9V,超过单片机最 尖峰电流,短路电流在选择元件时主要区别? 一道初三的物理计算题.如今大城市普遍存在着停车难的问题.如图是“路边空中绿化存车亭”的工作原理图,存车时只需40S就可以把车子从地面升起停在2m的高空.其中A为存车架,O为杆OB的转动 在单片机的实际电路中,3节1.5V干电池可以让其工作,那么ADC0809的+5V的基准电压和工作电压怎么得到 电流互感器短路时最大整定电流可以达额定电流的几倍 什么是交流电、直流电、电阻、怎么使用万用表?怎么知道这个输出是交流电、还是直流电?电阻是什么? 、2005年某市人均GDP约为2003年的1.2倍,如果该市每年的人均GDP增长率相同,那么增长率为 短路器的额定电流如何调节 单P的断路器 如何接线,连接开关、电灯~蓝线走哪里?如图单P的断路器 如何接线,连接开关、电灯~蓝线走哪里?如图 如何寻找支点 动力作用点 阻力作用点 王叔叔汽车的油箱有22升油他要去距家240km办事按每升汽油可行驶6.4千米计算,油箱汽油够不够? 这开关怎么才能 各自 控制一个电灯,互不影响、求接线图.我想让这上面的俩开关各自控制一个电灯 互不影响,应该怎么接线,第3个孔里是空的, 动力*动力作用点到支点的距离=阻力*阻力作用点到支点的距离 这句话是否正确? 2011年人均GDP增长率是多少啊? 钢绳最多承受6000n的拉力,在不计滑轮·吊钩·绳的自重及摩擦时一次最多能吊多少n 锂电池电压是多少?如何串联?锂电池串联的时候可以头接底,边接边吗?该怎么串联呢?一定要边接头头接边吗?对了,它电压是多少?搞错了,是纽扣电池,对不起啦 长l的绳子一端系一质量为m的小球,另一端为圆心,使小球在光滑水平面内做匀速圆周运动.当角速度为w时,绳子就要断裂.若用同样长的这些两股绳子系住小球m,使它仍在此水平面内做迅速圆周运 一道初三的电的物理计算题把r1R2串联后接在电压是5V的电源上,通过R1的电流强度是0.2A.两端的电压是4V,现并联他们接到一个电源上,求总电阻和总电流强度 三个蓄电池串联总电压 定长的绳子的一端系一质量为m的小球,以一端为圆心,使小球在光滑水平面内做匀速圆周运动.当速度为V时,绳子就要断裂.若用同样长的这样两股绳子系住小球,使它仍在此水平面内作匀速圆周 请问,这个电路闭合开关后是短路现象吗? 2只蓄电池串联后电压是多少 磁体能否靠近录音带,为什么? 如图所示电路中当开关______闭合时L1L2并联当开关______闭合时会发生短路 将不同电压的电池串联,会怎样 据说录像带和录音带都不能靠近磁体,把永磁体靠近录音磁带,你认为会产生什么后果,请说出你的道理 墙壁开关,三个开关控制三个灯,怎么接线?有没有图 知道几年的人均GDP,怎么算他们的增长率?第一年人均GDP9218 第二年12741 第三年14311 第四年15832 第五年17912 能不能帮我算算啊 居民人均可支配收入增长率指什么? 为什么通常所说的压力、支持力和绳的拉力都是弹力? 怎样计算GDP增长率? 2010年中国人均可支配收入是多少?人均GDP是否已达3000美元? 支持力 压力 绳子拉力 和弹力的方向啊 告诉我怎么叙述就行 急用知道的说下… 电动车第一次放电应该怎么样想问下,电动车第一次充电要12小时左右,放电是不是也要过放电,过放电能不能经多次完成,比如2~3天之后用完了再冲行不行?我看到网上新电瓶前几次不需要把电用 人均GDP 和人均可支配收入有什么区别 Dg管、De管、DN管各表示什么意思 2个12V的蓄电池串联后的电压是几V? 如果说悬绳的拉力等于重力,物块对地面的压力 等于重力,这种说法对吗 Dg表示钢管的什么 为什么电池串联电压会叠加电池串联后为什么电压会叠加,电池中的电荷作了怎样的分布 湖北省市级城市的人口数量和人均GDP 在电视机旁使用电吹风时,会看到电视画面闪烁;彩色电视机说明书上标明忌与磁体靠近.这是为什么? 钢管dg代表什么d代表什么、g代表什么 如果GDP增长率是7%,人口增长率是1%,那么人均GDP增长率是多少? 充电器输出电流不够对电池有影响么家里有个zune播放器,充电器是5v1.5a的,可是市场能买到5v1a的,对于播放器电池有什么影响? 有一个铁球的质量是316克,体积是60立方厘米,问这个铁球是空心还是实心?[铁的密度:7.9*10的三次方千克每立方米] 进水车怎么修 为什么彩色电视机说明书上标明勿与磁体靠近 墙壁插座开关一体的如何接线我想把墙壁上控制灯泡的开关,换成插座和开关一体的,后面如何接线,只有火线和零线 汽车发动机进水车有什么反应 为什么我们常见到的CRT彩色电视机说明书上标明“勿与磁体靠近”? 带开关的墙壁五孔插座怎么接,开关是控制灯的,和另一个插座的?录色和蓝色的不会接,别的都是之前接好的! 沿半径为R的半球形碗底的光滑内表面,质量为m的小球以角速度w在一水平面内做匀速圆周运动,试求此时小球离 甲乙两个小镇长75千米.西西驾驶一辆汽车行驶30千米用去2升汽油.照这样计算行完全程还需几升汽油 五孔开关墙壁插座 如何接线?原来的插座不带开关 刚刚买了一个一个康仕松日的5孔带开关的插座10A250V 不知道到如何安装 墙壁凹槽内有 红黄蓝三根线 插座背面有总共6个孔 开关处有三个分 泡水车是什么意思 gdp总量人均gdp gdp增长率反映着什么 双开五孔插座,要一开关控制插座,一开关控制电灯,怎么接线?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘