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

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数据流也能同样播放。上述技术已在监控系统中使用,并效果良好。
揭秘全球最小无线耳机背后的技术 《最终幻想》之父访谈:我为何转战F2P游戏开发 寓教于乐 11款最适合教儿童编程的学习工具 苹果iPhone6获工信部许可 本月17日在内地发售 使用Redis之前5个必须了解的事情 妆媒体微信公众号背后的酸甜苦辣 TIOBE 2014年10月编程语言排行榜:Dart首次进入前20 Instagram工程师教你如何改善App的性能 利用Neo4j对电影评论进行深度学习情感分析 【简讯】SQLite 3.8.7来了 性能提升超50% 浏览器重定向性能分析经验谈 豆瓣工程副总裁段念:看板方法核心瞄准流程中的“流动性” 【图文实录】CTO俱乐部公开课:探讨如何成为技术团队管理者 资深产品交付咨询顾问何勉谈看板:“以价值拉动”解决敏捷困扰 开源HTML5游戏引擎Frozen背后的技术 MDCC 2014精彩日程、演讲嘉宾、参展开发团队全揭秘(图) Hi,约吗?2014华为开发者联盟沙龙(上海站)火热报名中! 找虐新方向!TinyScreen显示屏打造最小游戏机 精彩继续 MDCC2014首次推出技术训练营 复制器官哪家强?3D生物打印找PrintAlive 电信开放平台应用内计费SDK 助力App小额快捷支付 专心做设计!开源跨平台应用开发框架Appverse Mobile 无线盛宴尽在阿里百川开放大会 医学界的Instagram:加拿大重症监护医生开发照片分享应用 2014中国移动开发者大调查第二批获奖名单揭晓 基于OpenStack的私有云开发部署实践 亚马逊云平台的迁移过程 【干货】微信企业号开发资源集锦 CSS生日快乐:CSS之父Håkon Wium Lie访谈录 好友近2000万,绑定银行卡过千万,日会话近百万,招商服务号成功之道 一名程序员十年技术之路的思考与感悟 以Oracle为例说明如何通过ODBC将数据库中的指定表导出到MDB数据库。(原创) 关于一种特殊按钮 SQL语句小问题!!在线等待! 想学ColdFusion 请看我的转载的贴子 Troj_Hacline.A是什么病毒? 关于XML的问题,150分赠送,急 dll问题。很简单。 感慨!!!(潜水一年,吐个泡,顺便发表一点意见) 帮个忙 怎么在Installshield中创建对话框,并操作ACCESS数据库? 连续给分:邮件服务器防病毒问题! 我想编译一个像API一样的dll 启动rose就出错,高手来看,100分 关于打印的一个问题 急!!!请提供一段设置Session的全部代码,谢谢!! 请问,从第二帧开始播放的代码的什么??? 老师要求编写五子棋的程序可是我实在想不出该怎么设定估价函数啊帮帮忙啊? 感觉压力比较大,活不下去,想跳楼自杀的进来侃侃 一个关于php提交表单的问题。 各位大侠,要命问题! 怎么在Installshield中创建对话框,并操作ACCESS数据库? win2000server的管理员密码让人改了,怎么办呀! 太气愤了,帮帮我? 用BDE连接MS SQL SERVER,为什么运行后出现未知用户名或密码的错误? datagrid中能不能进行统计 如何编写“outlook”风格的界面 如何实现flash截图?我研究了好久也不明白,希高手指点!(在线等待) 程序调用的DLL 在delphi中,用ADO如何实现将SQL中多表导出到一个Access中? 无聊啊无聊 想考软工???? Socket奇怪的问题! foxpro中如何实现按一按钮启动word和excel,并且直接弹出打开文件对话框? 关于分级权限管理(300分) 紧急求救!!!!!!!! 客户端web服务是否需要别的控件支持 帮帮我,朋友们请进.... Datareport问题! [cclq]竞选斑主,附我的方针! 用VB编写自己的服务器端组件 DAO问题,CDaoRecordset::addnew()和CDaoQueryDef::Execute插入一条记录,哪个更快? 谁能解释一下这个比较模糊的问题?关于地图窗口HWND。 闲人免进!如何增加信誉分! 如何改变Mem控件中插入符的形状? 各位大虾有没有检测日期的合法性的JAVASCRIPT脚本啊 怎么在Installshield中创建对话框,并操作ACCESS数据库? 两个问题,关于struts中form的action如何传递一个变量?如何使用科学计数变成普通数值? 救落水美女注意事项 如何学习NOTES? 急!!急!!给多分呀!!! 寻在windows下安装bugzilla时缺少的两个文件。 英语中如果you ,I ,he同时在一句话中出现时,顺序应该是怎样的? 七(3)班的同学去参加夏令营,在分配房间时发现:若每间住4人,则剩下19人无宿舍可住;若每间住6人,则有一间宿舍不空也不满.(1)如果有x间宿舍,那么可以列出关于x的不等式为------;(20) 干粉灭火器能喷多久 CAD这幅图怎么画?希望能给个详细的解题过程 “如人饮水,冷暖自知”这句话什么意思 参考下.. 怎样获得绿色晶体?我找到了,可我点了很多次就是点不到,到底怎样打到啊?我点不到那绿色的晶体怎样才能点到?说清楚点!赛尔号的!赛尔号的! 求我叫MT EASY 3.6.1 谁有 误解的反义词和近义词是什么?一定要告诉我! 英语表达中 we,I 和I,we有什么区别?一般I ,you,he/she表达时是什么顺序 质量为60kg的体操运动员做“单臂大回环”,用一只手抓住单杠,伸展身体,以单杠为轴做圆周运动,运动员到达最底点时手臂受的拉力至少是多少最高点最小速度为什么是0 不是根号gr? 直线AB,CD,EF相交于点O,若∠AOD=∠3FOD,∠AOE=120°,则∠EOC的度数为 “机动车通过交叉路口时,相对方向行驶的右转弯的机动车让左转弯的车辆先行”为什么请解释详细 同一条直线上有A.B.C.D,四点,已知AD=5/9DB,AC=9/5CB,且CD=4厘米,求线段AB的长? 一个20尺货柜能装多少8公斤干粉灭火器要算上灭火器的外包装啊 原核生物启动子的结构特点及功能 怎样用量筒测得200克的酒精? 怎么计算出2个元件的点之间的距离 as3 两种溶液混合,体积会比体积和增大吗,一般体积和增大还是减小,请举例 一名落水小孩不小心掉入水中,抱着木头在河中顺水漂流.在A处遇到逆流而上的快艇,因要全部步骤``因雾大未被发现,1小时后快艇获悉此事,随即掉头追及,求快艇从获悉到救上小孩的时间? 如何解决AS3计算误差 什么是强启动子? 一名儿童抱着木头在河中漂流,在A处遇到逆流而上的快艇,因雾大未被发现,1小时后,快艇获悉此事,随即掉头救援请问:快艇从获悉消息到追及儿童需要几小时? 铝合金压铸模斜导柱用什么材料铝合金压铸模斜导柱坏了不知用什么材料换, 怎么理解初次分配和再分配? 一名小孩抱着木头在河中漂流,在某处遇到逆水而上的轮船,因为雾太大,轮船上人没有发现小孩.一小时后该轮船上的人获悉此事,随即掉头追赶,则从获悉此事到追上小孩需要多少时间?(把符号 铝合金压铸模能不能将原材料换成尼龙材料? 什么叫做初次分配与再分配 南极有风极之称 若选取等量常态叶与皱叶玉米种子各若干粒,分别单独隔离种植,观察子一代性状中的子一代的含义? 请问什么是初次分配和再分配? 把5克的盐放到40克的水里混合成盐水,盐是盐水的几分之几,水是盐水的几分之几? “有清一代”的“有”字是什么意思? 如图,直线AB CD EF相较于点O,已知;∠AOF=3教FOB,∠AOC=100°,求∠EOC的度数 把5克盐放进40克水里混合成盐水,水是盐水的几分之几? “我代”是什么意思 我叫mt辅助easy助手, 第二问的C,红鳞熄灭后立刻打开弹簧夹, 镁合金压铸模和铝合金压铸模设计区别在哪里? 华为版的我叫mt属于哪个版本,我想用easy助手,可是不知道载哪个 童非首次在单杠项目中实现了“单臂大回环”:用一只手抓住单杠,伸展身体,以单杠为轴做圆周运动.设他的质量为65kg,求他的单臂在最低点能够承受的拉力至少约为多少?(忽略阻力,g取10)325 人们常说的W派是指什么? 等腰梯形、长方形、平行四边形中哪个不是对称图形? 已知三角形ABC中,DF交AB于F,交AC于E,交BC延长线于D,且DE;DC=AB;BC.求证AF=EF(要有完整的全过程) “国民党反动派”的说法到底是指什么意思是国民党中的落后反动派还是说国民党就是反动派 人类行为是宇宙的必然过程吗? △ABC中,D是BC的中点,E,F是AC上的点,CE=AB,AF=EF,DF的延长线与BA的延长线相较于G.求证:AG=AF△ABC中,D是BC的中点,E,F是AC上的点,CE=AB,AF=EF,DF的延长线与BA的延长线相较于G.求证:AG=AF 这儿是图: 流派流派,有流才有派是谁说的 有没有亲在恒善堂买过冰山雪菊?那里的冰山雪菊质量如何? 什么事战术?战略?定义各是什么?最好举例说明!有什么异同? 绳子上系一重物做匀速圆周运动,线长易断,还是线短易断? 初次分配和再分配按什么划分的 如人饮水,冷暖自知的意思,具体一点是禅学么,谁说的?字面意思和广义是什么? (1/2)细线一端拴一重物,手执另一端,使重物在光滑水平面上做匀速圆周运动,下列说法正确的是?..(1/2)细线一端拴一重物,手执另一端,使重物在光滑水平面上做匀速圆周运动,下列说法正确的是?A 英语中you,he,I的次序是则样的 一切振动的物体都在发声吗 清香的近义词 摇曳的近义词 平静的反义词 偶尔的反义词清香的近义词摇曳的近义词平静的反义词偶尔的反义词 英语道歉i you he怎么摆放,我是否摆放在第一位? 老师为参加夏令营的同学安排宿舍.如果增加2间宿舍,每间宿舍住6人;如果减少两间宿舍,每间宿舍住9人.问:参加夏令营的同学共有多少人? 有一个长方体容器,高10厘米,底面是6厘米的长方形,容器中装的水离杯口还有3厘米,如果放一块石头(完全侵没),有部分水溢出,取出石头,水面下降4厘米,求石块的体积. 伦敦前市长:伦敦有必要成为一个独立国国际核查人员证实叙利亚已销毁化学武器英女子脱光上衣过安检引骚乱被罚(组图联合国官员:目前还在讨论叙利亚化武销杨洁篪:中国是二十国集团的积极参与者“中国皮都”平阳十年整治制革产业 政微信被指“封杀”来往 回应称打击病毒巴基斯坦塔利班首领被美击毙 巴和平进监察部召开座谈会 聘请马怀德等40人民政部部长:鼓励老年人再社会化 释放中国国资改革进入关键期 “领队”角色快递员送货路上猝死 “过劳现象”蔓延联合国官员:目前还在讨论叙利亚化武销获俄罗斯一大型私营网站聘用 斯诺登开英国检方称《世界新闻报》曾窃听哈里王洛杉矶机场枪击案嫌犯身份确定 被指曾巴武装人员挖地道埋炸药炸伤以军 巴以纽约将购烟年龄限制上调至21岁 禁止美国:伊拉克“平衡木”不好走克里承认美国一些监听行为很过分联合国官员:目前还在讨论叙利亚化武销俄拟提前完成2020年前陆海军军备更青海5.5万农村牧区妇女享受住院分娩澳大利亚Y世代女性看重家庭 相夫教子三峡移民载歌载舞祝福“两会”喜庆“三\"口罩男\"\"毒驾\"冲关警方追且末县养殖业托起1400余户贫困农民现在的南阳,竟然丢了这么多好东西,我南阳,又排全国第一了?简直不能让其他白岩松:媒体报道环保事件“灯下黑”是南阳车站北路惊现泰国人妖,惹得多少人重磅!继\"电视机后盖\"火车站后,女生节上的横幅难民滞留希腊与马其顿边境(高清组图)新疆边境城市北屯BRT开到居民“家门2015年运城社会消费品零售总额为6山西35家企业入选2015年度全国千新疆监狱民警住村故事:丈夫住村 她撑岚县4万多贫困人口实现马铃薯产业全覆山西省机械设备成套局撤销 建省公共资宝宝一哭就要喂奶吗 婴儿饿了的各种讯都说中国成品油质量差,到底差在哪呢?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘