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

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数据流也能同样播放。上述技术已在监控系统中使用,并效果良好。
百度、饿了么、美团专家齐聚SDCC2015,剖析前端开发核心技术 【SDCC讲师专访】百度乔刚:前端可视化难点分析及探索实践 【CTO讲堂】Growth Hacking背后,数据分析平台的架构调整 BAT、巨杉、南大、柏睿等齐聚SDCC—新一代数据库专场议题曝光! 《近匠》BeeCloud创始人黄君贤:三行代码集成支付的技术实现 【SDCC讲师专访】AdMaster技术副总裁卢亿雷:分布式数据库挑战与分析 tvOS真的代表了应用的未来吗? 使用Fetch API和ES6生成器构建异步API Android应用性能优化实践 华云数据:OpenStack的技术践行之路 【SDCC讲师专访】腾讯潘安群:腾讯云金融级数据库TDSQL分析 高颜值、高品质——安全技术论坛议题曝光! 移动应用开发者正饱受折磨 在Android平台上加载本地库的危险性 《近匠》程序员客栈,程序员背后的经纪人 【CTO讲堂】浅析工业级物联网项目的快速开发 云适配陈本峰:平台型企业级浏览器是未来办公移动化的核心 警报:XcodeGhost已扩散至第三方框架 我们眼中的应用另一端是什么? 【SDCC讲师专访】百度马如悦:不写代码的架构师不是好架构师 企业级应用避免臃肿混乱的6大黄金法则 SDCC 2015讲师专访精彩集锦:程序员界“香饽饽”、大神级人物都在! 从技术经理的角度算一算,如何可以多快好省的做个App(一) 【SDCC讲师专访】Java泛型作者Gilad Bracha:优秀的程序员应该未雨绸缪 【CTO讲堂】微服务架构在云端的应用 SDCC 2015创业项目路演火爆征集:寻找中国好项目 被遗忘的设计模式——详解Swift语言中的Null Object Pattern Synaptics发布全新触控及生物识别方案,正式进军车联网 无人机、机器人,英特尔RealSense已扩展至新领域 SDCC 2015中国软件开发者大会盛大开幕 《近匠》逸创云客服创始人叶翔:做好客服产品静待SaaS大爆发时代的到来 bluesky069(菜鸟一族)你帮助我把那个PBL放到蛛蛛的信箱好不好呢?让大家都可以下在的! 请问哪里有w32dsm.exe的教程??? 潘译<>印刷错误百出,令人不忍卒读... LISTBOX的问题?请高手帮忙!!高分向送! 帮我想想这个主键该怎么建SQL SERVER7 如何将控件,恢复init()到初始状态 急救:装有SCO UNIX的硬盘克隆后不能启动系统,怎么办? 如何在FTP的目录下再新建目录?我初学网络编程, 怎样设置ScrollView中的ScrollBar不可见? 有关comboBox问题??????急!急!!! 有那位朋友对ADO控件调用T-SQL的链接服务器或存储过程的命令有所了解,或知道怎样取链接服务器的相关信息 真诚的向大家请教一个问题!!先谢谢了 redhat linux7.2安装完成后,怎么没有工具栏 已知manager是employee的子类,那么这么写Employee epy=new Manager()为什么合法? 第五次提出这个问题:如何通过DELPHI调用SQL SERVER 过程向SQL SERVER 存入图象。 为什么我在新闻聚焦中发表不了评论? 在VB里怎样用ADO存贮Access的Memo型字段? 誰有在PB下用powersock做的聊天程序? SQL的好书是什么呀?难道就没有人有体会? vb怎样格式化硬盘?? 做个《曹操传》之类的游戏需要多少投资? 关于sfc(系统文件扫描)的问题 高分求解,大虾请进 买了java程序员大本营的请进!!!! 请大家陈说学msce的前途 如何使用ProgressBar casting在java中是什么意思啊? querymode 查询器不稳定吧? 各位兄弟姐妹,在长沙拿3K是个什么水平,和沿海比怎么样,还需不需要跳槽? 想知道用程序免费发手机短信吗? 请问各位软友哪里有介绍C++Builder控件属性,方法和事件的资料。 高分相赠!!!求解我爱背单词2001共享版注册码!!! 我的XP不能上网了,添加163连接最后总说无法更新通讯簿,不能成功 如何添加纪录? 想学如何用程序发手机短信吗? 请问过滤条件filter怎么用?? 使用微软SQL Server的Select时,怎么写才能检索从N条-M条的记录(也就是说直接检索,而不是全部检索后取其中的一部分.) 如何通过程序得到系统的所有热键。谢您了。 关于CSICO防火墙515-R的问题?急 想知道在程序中如何发手机短消息吗? 求助在VC中怎样用串口控件MSComm1??(我在VB和DELPHI中用过,但不知道在VC中怎样用) 怎么给char months[12][4]赋值...... 哪里有xml spy的中文参考书 安装VisualAge for Java 出错(很急呀!!!) 求救:bcb中char与AnsiString的相互问题?? 请看:用程序发送手机消息. 第六次提出这个问题:如何通过DELPHI调用SQL SERVER 过程向SQL SERVER 存入图象 怎么可以使多个按钮同时保持按下状态?我的怎么只能安下一个? 请教各位项目经理,在开发软件过程中会有什么问题? 想学习如何用程序向手机发送短消息吗? 怪事!C++Builder中同樣的表達式出現不同的結果 井底之蛙,所见甚小.和一叶障目,不见泰山.所包含的物理知识? 高炉炼铁的生铁出口为什么比炉灰的出口低 纯铁的熔点为1535℃,而高炉中炼铁时生铁(含碳量较高的铁的合金)在1200℃左右就熔化了,这是因为( )A.因为形成了铁碳合金,所以熔点变低B.合金的熔点比其成分物质的熔点高C.铁的纯 电路图 电流与电压的计算!在电路中R1与R2是并联,且与灯L是串联,R1=30欧R2=60欧RL=40欧U=12求:1、经过电阻R1的电流及R1两端的电压?2、经过灯L的电流及L两端电压?具体公式算法帮忙列出来, 炼铁时为何生铁出口低于炉渣出口 高炉炼铁为什么只能冶炼出生铁而炼不出纯铁? 这个电路的电压和电流怎么算 高炉炼铁时生铁出口低于炉渣出口 钢和生铁的区别是什么?工业高炉炼铁的方程式是_______.铁生锈的条件是什么,如何防止铁生锈? 混连的电路的电压:某个点上的电压 总电压 电流:某个点上的电流 总电流怎么算 咱们就从这个图算就行 拜托了 生铁出口低于炉渣出口是因为 我的世界铁矿和什么东西烧能得到铁 硅锰和锰铁的区别在元素组成和含量上有无不一样? 怎么计算出一些复杂的电路图的各点电压和电流?(有图)象这个复杂电路图应该怎么计算出各点的电压电流?要结合什么定律?分析电路的工作原理是不是都应该这样?我是学电子的现在还是一 漫画《井底之蛙》的含义 锰铁粉的含量怎么检测 井底之蛙是出自什么成语 “井底之蛙”的含义 硅铁、锰铁、废料铁混合而成的材料好还是硬质合金好?具体有那些区别? 带“蛙”字的成语(井底之蛙除外) 井底之蛙的含义 400平方 电缆,380电压下能承受多大的电流,距离230米 如图12所示漫画描述的是“一叶障目”这个成语,这个成语说明了一个什么物理原理? 井底之蛙的之是什么意思! 五点法作图 第二小问 应该怎么取?是取括号里的为0,pi/2,pi…还是x高一数学三角函数 五点法作图 第二小问 应该怎么取?是取括号里的为0,pi/2,pi…还是x可是那个0,pi是什么的范围! 高炉炼铁:请教同行的师傅:高炉后期的操作如何提高冶炼强度? 焦炭是冶炼铁的原料之一 其作用是 铸造中用的 覆膜砂、硅铁、锰铁、蠕化剂、球化剂、硅钙、甲基硅油等 对人体的伤害?我早铸造厂上班,请问铸造厂中使用的覆膜砂、硅铁、锰铁、蠕化剂、球化剂、硅钙、甲基硅油等对人体 冶炼ZL102合金铝怎么增加强度 工业上冶炼含fe2o3为百分之80的铁矿石100t,可得纯铁多少吨?(假设原料充分利用) 生铁,硅铁,锰铁的溶点是多少? 冶炼企业,10台回转窑,每台100KW,求年用电量?总功率多少?变压器应是多少? iron是什么材料 铸造用锰铁如何检验 精炼电弧炉变压器如何做到恒功率运行和恒流运行 炼一吨铁需要多少原料?炼一吨铁需要哪些原料?量是多少?如果铁矿石品位是50的,怎么样计算的 钢水35号请问锰铁硅铁的加入时间 请举例说明硫的氧化性比氧气和氯气弱 水银洒在桌子上,要洒上硫粉进行回收,是咋回事? 165个千瓦多少电流(A)电压380 判断氯气和氧气的非金属性强弱,通过什么实验来验证,原理是什么 见识短浅,却又妄自尊大的“井底之蛙”为什么会“坐井观天,所见甚小”,从光的传播角度考虑.谢谢咯``急`` 在380伏电压的线路中,它的电流每千瓦有多少A. 导致"井底之蛙,所见甚少"的原因 硫粉对水银有何化学反应? 直流电压80伏100千瓦等于多少个电流 心理学入门知识的书籍 高炉炼铁如何通过看渣、看铁块样品分析出铁水的成份? 一个160千瓦的电机380的电压怎么计算电流呢对吗有消耗的吗 综合基础知识的 书是什么书啊? 高炉炼铁 为什么铁水出口比除渣口低 灰铁250 多加锰铁能否解决缩松 强度低 硬度低 高炉工长需要懂得哪些知识(基础的)、在高炉操作中哪些方面是重点注意的?新手该从哪里学起?因为我是第一次接触炼铁这个工作行业、很迷茫、不知道从什么开始学起、但因为一些原因 高炉炼铁铁水上面飞出的花是什么东西 锰铁中所含的碳对终点钢水中的碳含量的影响是多少比如说 “高碳锰铁”中的碳含量为 7% .这个 7%中的7对钢水中的碳含量的影响是多少?如果冶炼 0.41% 含锰量为 1.5%的合金,1000千克中可产生 4. 下列物质只能在氧气中燃烧的是A.硫粉 B.红磷 C.铁粉 D.蜡烛 高炉炼铁为什么要加入石灰石,为什么要造渣?一氧化碳和氧化铁反应装置得到的铁是生铁还是纯铁?高炉里的焦炭燃烧生成的一氧化碳与氧化铁反应得到的是生铁还是纯铁?若是纯铁,那这纯铁 用物理光学解释井底之蛙最好有图 1)高炉炼铁时焦炭的作用是1_______2_______(2)为什么生铁出口低于炉渣出口? (3)请将发电机与电动机作一对比并简要概括它们的相同之处和不同之处.(4)请从铜,锌,钛,铁,钙,银,铝,汞八种金属中选取 高炉炼铁练成生铁还是纯铁?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn