视频播放器

2024-09-13

视频播放器(精选12篇)

视频播放器 篇1

1 引言

作为任何一个拥有多媒体功能手机的读者而言, 如果能够自主开发出一款定制的手机视频播放器是多么令人有成就感的事情。如果说仅仅是在WTK模拟器上, 使用MMAPI (移动媒体API, JSR135) 就可以做出一个简单的视频播放器来, 然而要真正应用到实机却不是那么一帆风顺的事情, 在下文中逐步向读者说明。图1是该款视频播放器在WTK模拟器和Nokia5310实机上的运行界面:

该款播放器在实机上支持3gp、mp4、wmv等常见视频媒体类型以及gif动画。

2 功能分析

作为一款实用的手机视频播放器, 不仅要考虑界面的个性化, 而且还要考虑较高的播放效率和手机厂商对视频媒体类型的支持, 归纳为以下3个方面:

(1) 实现播放的基本功能。包括播放控制、音量调节、扩展卡资源读取支持等。

(2) 流畅的播放效果。本案例中采用播放池 (Player Pool) 策略, 这一策略使播放过程更为流畅。造成播放停滞的原因主要有两个方面:一方面基于MIDlet的安全考虑, 每当读取本地文件时手机系统都要求进行手动确认, 这样就会间断播放过程。另外一方面每次对音乐文件的播放预处理也会造成一定的播放间隔。

(3) 完全满足手机厂商所支持的视频媒体类型, 支持尽可能多的视频媒体类型。本案例中采用的是系统自动匹配的策略, 即由手机系统本身来识别播放视频类型。

以上的要求似乎比较简单, 但是由于模拟环境和实机环境的差异, 在实际开发中总会遇到一些小的问题, 接下来就和读者朋友们分享开发手机视频播放器的一些经验和技巧。

3 设计分析

3.1 PlayerMIDlet

主MIDlet也是整个程序入口, 程序启动时显示播放列表面板。

3.2 VideoPanel

播放列表面板, 为程序主界面, 负责播放列表和对象池管理。

3.3 PoolHelper

对象池帮助类, 负责生成播放对象池。

3.4 PlayCanvas

播放布, 用来装载媒体播放。

3.5 AudioSettingPanel

音量控制面板, 实现对播放过程的音量控制。

另外, 视频播放器工程还引入了文件选取模块, 用于生成播放文件列表。图2是该工程。

4 实现过程

4.1 PlayerMIDlet类

PlayerMIDlet仅仅提供了MIDlet框架, 在启动界面创建视频播放面板:

4.2 VideoPanel类

视频播放面板类主要负责播放列表和对象池管理。表1是视频播放面板类的主要成员。

(1) 文件选取模块的调用

视频播放面板的“添加播放列表”菜单调用文件选取类实例来生成播放列表, 同时生成播放项目的播放和音量控制对象, 并提供播放入口菜单:

以上代码中, 主模块通过提供finishAddList方法来获取文件选取模块的返回。当选取完毕后, 对选取项目还要进行重复性判断, 如果存在重复则提示, 如果不存在则调用对象池帮助类生成该项目的播放和音量控制对象, 同时提供播放入口菜单。图3是在WTK模拟器和Nokia5310实机中开始播放列表的界面。

(2) 播放控制

视频播放面板只提供播放入口方法来启动播放布, 真正的播放控制在播放布类中:

(3) 对象池的管理

对象池的初始化在对象池帮助类完成, 在系统关闭时进行对象池的释放:

以上代码中关闭了所有视频播放器对象, 释放视频播放的所有相关资源。

4.3 PoolHelper类

对象池帮助类, 主要是根据文件选取模块提供的URI来生成播放项目的视频播放和音量控制对象池:

以上代码, 为了避免访问本地资源所造成的资源死锁, 对象池帮助类为线程类。在run函数中通过文件URI创建播放器和音量控制对象, 并插入到对象池 (后进先出) 。

对于视频播放器的创建是整个工程的核心, 也是开发人员比较迷惑的地方。

(1) 视频播放对象的困惑

1) 对视频媒体类型的支持。图4是常见的媒体类型不支持的异常画面。

对于WTK模拟环境 (笔者使用的是WTK2.5.2) , 似乎只支持mpeg类型的视频媒体, 播放mp4, 3gp类型的视频时就会抛出不支持的内容类型的异常。对于手机实机环境, 厂商承诺支持的类型程序都可以支持。在Nokia5310环境中, 可以支持3gp, wmv, mp4等主流视频媒体类型以及gif动画, 反而不支持mpeg类型。

2) 视频播放对方的创建方式。上段代码中并没有使用输入流和媒体内容类型 (content type) 来创建播放器对象, 而是通过视频文件URI自动创建。

使用输入流创建播放器对象存在制约。在模拟器环境下调试发现, 使用输入流创建播放器的方式不适用较大的媒体文件, 否则将抛出内存不足的异常。实机环境下, 往手机上安装文件大小大于一定限制的jar文件时, 会得到一个安装包过大而提示无法安装 (大小限制额度可能因各款手机不同而存在一定差异, 但是这个值应该小于一个常规视频文件的大小) 。图5就是在将一个文件大小为2M的jar文件安装到手机时提示的错误。

使用输入流创建视频播放器对象适用于文件大小较小的视频文件, 这也是J2ME教程中常用的通过Class类的getResourceAsStream的方法在资源中获取文件流来创建播放对对象的方式。

3) 创建视频控制对象的时机。上段代码中并没有在生成播放对象的同时生成视频控制对象, 其主要原因有两点:一方面是视频控制对象需要绑定到播放布 (Canvas) , 当初始化视频控制对象显示模式时, 会产生视频控制对象视图与当前界面重叠的问题。如图6所示。

另外一方面, 视频播放布应该是共享的显示资源, 不可能为每个视频控制器创建播放布。基于这种对应关系, 视频控制器的管理应该纳入播放布的范围。

以上的这些“机关”也正是在本文开头说的仅仅在WTK模拟上写一个简单的播放器是很简单的, 而要在实机上写一款能用的视频播放器却是比较困难的原因。

4.4 PlayCanvas

播放布类是视频播放的核心, 负责播放控制、播放侦听以及视频控制对象的管理。

(1) 播放控制

以上代码中, 播放布类提供了播放、暂停、全屏幕、正常屏幕和音量控制 (如图1所示的播放界面) 。这里并没有提供“完全结束播放” (close方法) 的接口, 因为对于播放“完全结束”会造成播放对象的释放, 必须重新创建播放器对象才能再执行播放行为, 否则在播放对象关闭的状态下调用播放方法会出异常 (详细错误内容可以参见MMAPI参考文档) , 所以只有当系统关闭时才考虑“完全结束播放”。

(2) 视频控制

当选择播放项目进行播放时, 播放布就会获取播放对象的视频控制对象并启动播放:

以上代码中, 播放布通过对象池中的播放对象来获取视频控制对象 (VideoControl) , 并初始化视频控制对象的显示模式和区域大小, 然后调整播放显示位置并开始播放。其中有3个比较重要的地方:

(1) 视频控制对象的模式初始化只能成功调用一次, 如果再次调用会抛出模式已经设置的异常。所以必须对初始化状态进行管理, 避免重复初始化 (上段代码中使用视频状态池videoStatusPool来进行状态管理) 。

(2) 对于部分视频, 例如gif动画, 存在没有音量控制对象的情形, 所以要对音量控制对象进行是否为空的判断, 否则会抛出指针为空的异常。

(3) 为了完整监控播放状态, 必须设置播放布为播放侦听 (PlayerListener) 。

4.5 AudioSettingPanel

音量控制面板由播放布调用, 主要用于提供音量控制的界面, 实现当前播放音量的控制:

以上代码中, 该面板类实现了ItemStateListener, 通过一个Guage来实现音量的控制。实际上, 各款手机所呈现的Guage组件与WTK模拟器显示的是不同的。以图7是Guage在WTK模拟器和Nokia5310实机的运行界面。

通过以上过程可以总结出, 在实现手机视频播放器的过程中要注意以下7个窍门:

(1) 播放控制由播放布类完成, 播放主界面只需要提供开始播放的入口。

(2) 播放布同时要设置为播放侦听, 这样才能对播放状态进行全面的监控。

(3) 在播放控制中并不需要提供“完全结束播放” (close方法) 的接口, 可以通过停止接口来实现播放项目的切换 (被停止的项目可以接着播放) , 否则在播放器关闭的状态下再执行播放操作会抛出播放异常。

(4) 通过文件URI来创建播放器对象, 可以避免使用文件流来创建播放器造成的限制, 同时也可以避免对视频文件类型的管理。

(5) 视频控制对象的获取在播放布初始化中进行, 而不能用对象池进行管理。

(6) 视频控制对象的模式初始化只能有一次, 再次初始会抛出模式已经设置的异常。所以必须进行初始化状态的管理。

(7) 对于gif动画, 其音量控制对象可能为空, 需要对音量控制对象进行是否为空的判断处理。

5 验证环境

本文涉及的开发环境为:JDK版本1.6.0_03, IDE为WTK2.5.2和EditPlus2.3.1;验证环境为WTK2.5.2模拟器和Nokia5310 (配置为MIDP2.1和CLDC1.1) 实机。

除了选择与配置对应的API之外, 由于手机视频播放器涉及到MMAPI和PDA可选包的使用, 所以在工程API设置中还要进行相应的API选择。图8为手机视频播放器工程的API选择。

6 结语

在开发论坛中, 很多读者在开发视频播放器的过程中因为模拟器与实机对媒体类型的支持存在差异而产生困惑, 因为播放对象的创建方式导致程序无法正常运行而灰心, 这些也正是手机程序与桌面型应用软件开发不同的地方, 并不一定在模拟器上运行正常就会在实机上运行正常, 在模拟器上运行失败而在实机上运行失败。更多的还是需要读者根据实机环境去摸索, 敢于试验, 这样才能做出一款个性优秀的手机视频播放器。

视频播放器 篇2

在刚刚过去的雷锋月里,各学院,班级陆续开展各式各样的志愿者活动。为了加强对志愿者活动的宣传,鼓励同学们更多的参与到志愿活动中来,激发志愿者的热情,工业工程1101班举行了一次以“爱没有距离”为主题的志愿者宣传活动。

活动前期,班级青协小队长做了一系列的准备活动,例如准备视频材料,写好串词,提出要讨论的问题以及通知同学们等。活动与3月28日在11109教室举行,当天,各志愿者均积极到达教室并按照所分配的小组坐好。活动正式开始,首先由小队长为全体志愿者讲解活动的背景及目的,接着为大家播放视频。视频以公益广告的形式传达了志愿者的爱心与行动,表达了志愿者们对这份工作深深的热爱。期间,同学们都认真观看视频,很多同学看完之后都深有感触。接着,小队长组织全体同学以小组为单位进行讨论,讨论主要围绕“看完视频后的心得体会”,“对志愿者活动的意见及建议”等主题展开。讨论中,同学们兴趣高涨,积极发言。有的同学说,看完视频后感觉到志愿者活动原来就在我们

身边,我们每一个小小的举动都有可能给他人带去一份大大的温暖;有的同学说,以前自己对志愿者活动毫不积极,现在才知道,原来志愿者或动都这么有意义,自己以后一定要积极参与;当然,有的同学也提出了一些很好的建议,例如希望志愿者活动可以开展地更加广泛。在场的同学均积极发言,表达了自己对志愿者活动的看法。最后,小队长对大家的发言进行了总结。的确,志愿者活动其实就在我们身边,在我们的日常生活中,我们每一个微小的举动或许本就是一次志愿者活动。爱没有距离,一个眼神,一个手势,带来的却是一份大大的温暖。

视频播放器 篇3

此次发布中最重要的一款产品是所内在国内最新推出的4.3英寸超大屏幕MP4视频播放器PMX-M8系列产品。这是索尼继旗舰型MP4产品PMX-M70系列之后,在MP4领域的又一重要举措。

作为M70系列的升级产品,M8系列在画质、音质以及相关功能上都表现得更加优秀。在画质方面,M8系列的色彩显示升级到了18bit,色彩显示技术的提升,结合4.3英寸TFT宽屏液晶屏幕和30帧高画质影像播放带来更加出色的动态画面表现能力,使得PMX-M8系列能够生动流畅地再现色彩过渡。同时,M8系列加入更加出色的SRS音效技术,让使用者在欣赏优美画质的同时,还能享受到身临其境般的震撼音效。

除了硬件功能的升级外,M8产品还在软件的人性化设计上深下功夫。听力保护功能会在用户将耳机插入M8的时候自动开启,它可以自动降低音量以保证用户戴耳机享受音乐时听力不会受到损伤;五种文档背景颜色变换,可以让使用者在舒适的背景下阅读电子读物。

视频播放器 篇4

我国从2007年开始发放3G牌照, 手机多媒体终端的用户数量将会伴随着终端开发技术和3G网络技术的发展而逐渐庞大。对于运营商来说, 市场规模将明显增大, 而产品运营、业务扩展、市场营销将会是近3年移动流媒体市场的核心竞争力。

据艾瑞咨询主办的“2006手机网民看3G”的互联网调查中统计, 视听娱乐将成为3G应用普及后智能手机用户最期待的无线业务。手机视频的巨大市场前景是包括运营商在内的所有企业都不可小视的。

类似优酷、 土豆、爱 奇艺等国 内视频巨 头非常看 好手机视频 终端 , 因为i Phone手机非常 普及 , 用户群体 庞大 ,最重要的是手机能随时随地地拍照、录视频, 而且能随时随地把拍摄 的视频上 传到视频 网站上去 , 非常方便 ; 另外iPhone多媒体客户端的播放内容可以直接从电视台、影视公司等多媒体提供商那里获得, 资源极其丰富。对用 户而言 ,手机视频播放客户端将成为人们非常重要的娱乐方式。手机往视频方向发展也是势不可挡的, 而对手机视频的需求也是非常大的。

2体系结构及其特性

1、i Phone SDK架构

i Phone SDK是由苹果公司提供的i Phone应用开发包 , 整个SDK包括了界面开发工具、集成开发工具、框架工具、编译器、 分析工具 、开发样 本和多个i Phone、i Pad、i Pod模拟器。如图1所示。

(1) Core OS 层

很多人听说过IOS系统是基于UNIX的。而Core OS层就是用Free BSD与Mach所改写的Darwin, Core OS是开源、符合POSIX标准的一个Unix内核。这一层包含并且提供了整个iPhone OS的基础功 能 , 如 : 硬件驱动 、内存管 理、程序 管理、线程管理、文件系统、网络接口,以及标准输入输出等,所有这些功能都是通过C语言的API接口来提供。此外, 这一层是最具有UNIX色彩的, 如果你需要把UNIX上所开发的程序移植到i Phone上, 多半都会使用到Core OS的API接口。

(2) Core Services 层

Core Services层基于Core OS基础之上 , 它提供了更多更丰富的功能, 它包含了Foundation.Framework和Core Foundation.Framework两个部分 , 并且 , 它提供了一系列处理字串、排列、 组合、日 历、时间 等基本功 能 , 所以叫Foundation。Core Fundation是属于C语言的API接口 , 而Foundation是属于Objective-C的API接口。另外Core servieces还提供了其他的常用功能, 比如: Security、Core Location、SQLite、Address Book. 其中Security是用来处理认证 , 密码管理 , 按安全性管理的; Core Location是用来处理GPS定位和地理信息处理; SQLLite是小型的、轻量级的本地数据库; 而Address Boo是用来处理电话薄资料的。

(3) Media 层

Media层提供了图片、音乐、 影片等多媒体功能。与音乐对应的是Core Audio和Open AL, Media Player实现了影片的播放 ; 图像处理 方面分为2D图像和3D图像 , 2D图像由Quartz2D来支持 , 3D图像则是用Opengl ES来支持 ; 最后用Core Animation来对动画提供了强大支持。

(4) Cocoa Touch 层

Cocoa Touch是Objective-C的API接口 , 其中最核心的部分是UIKit.Framework,应用程序界面上的各种组件, 全是由它来提供呈现的, 除此之外它还负责处理屏幕上的多点触摸事件、文字的输出、图片网页的显示、相机或文件的存取、 以及加速感应的部分等。

2开发环境

(1) 软件环境

操作系统: Mac OS X 10.6.4;

IDE: Xcode 5.0;

SDK版本 : iphone SDK 7.1;

模拟器: iphone 5s、ipad air;

(2) 硬件环境

CPU: 至少双核CPU, 1.2GHz以上主频 ;

内存: 至少1GB;

硬盘: 至少60GB;

网络: 10M/100M网卡。

3需求分析

3.1可行性

3.1.1经济

本项目的开发全部采用苹果公司的产品, 包括操作系统、开发IDE、测试用模拟器、真实i Phone手机。这些软硬件设备虽然价格不菲但对于专业苹果应用开发人员来说都是必须有的, 并且, 这些软硬件都为一次性投入, 在以后开发苹果应用时也可以继续采用这一套软硬件, 不存在人力物力的过度浪费现象。所以开发一款基于i OS的音乐播放器在经济方面是可行的。

3.1.2技术

苹果公司的产品在多媒体应用方面下了极大的功夫, 因此也提供一整套非常强大的多媒体开发框架。在程序设计语言上采用Object-C足够, 在UI布局方面采用.xib或storyboard等布局文件就可以设计出使用比较友好的UI界面, 媒体流的获取采用HTTP或是UDP协议获取网络视频资源; 在媒体播放方面采 用Iphone SDK 7.1中Core Audio和Open AL, MediaPlayer实现了影片的播放。从而分析得出开发这款音乐播放器在技术方面是可行的。

所以, 基于i OS的音乐播放器的开发是可行的。

3.2功能

当用户进入播放列表, 在本地视频文件或网络在线视频文件列表中, 选择播放, 即可观看视频, 切入到横屏模式可进入全屏播放。

3.3性能需求

(1) 对i Phone支持MP4/3GP/AVC/AVI/MPEG-4等格式的

视频文件进行播放, 分别对来源于本地和网络的视频文件进行处理, 利用横竖屏的灵活切换, 实现全屏播放, 使播放效果更为显著。

(2) 支持MP3音频文件的播放 , 从本地和网络列表中读取音乐播放列表, 根据歌曲和歌手名称从3G网络上搜索歌词, 支持歌词同步; 放完一首歌可自动播放下一首, 支持循环播放。

(3) 支持网络MP3流媒体的广播格式 , 简朴大方的用户界面, 增加文字流动效果, 更具观赏性。如果当前电台流出现问题, 可使用向前和向后来对同一站点的不同端口频段进行调整。

(4) 对本地文件媒体文件进行管理 , 刷新功能重新搜索本机上所有的媒体文件, 删除功能删除不必的媒体文件, 选中文件后可根据不同的媒体格式选择播放器, 支持本地蓝牙传输。

(5) 在线音音频列表按照用户输入的关键字搜索歌曲 ,支持在线播放、音乐文件下载。

(6) 从网站shoutcast上获取网络电台 , 支持电台搜索功能, 用户点击可在线收听。

(7) 通过土豆网站、56视频网站获取相应的视频信息 ,对视频文件进行分类管理, 用户进入后只需点击即可轻松地观看和下载, 支持视频搜索, 根据用户输入的关键字, 搜索网站中的视频, 支持翻页功能;利用六间房网站对i Phone手机平台的友好支持界面, 采用手机Web打开网页, 支持在线观看、收藏、搜索和访问友请链接网站等多种功能。

(8) 提供媒体文件下截 , 支持断点续传、文件播放、 删除等功能。

(9) 更多设置模块包括蓝牙管理、用户手册、 背景设置、动画效果设置等后台管理功能。

(10) 网络环境 : 播放网络视频 , 要求网络带宽流畅 , 信号好。

3.4关键技术

(1) 播放视频用到的API主要使用的是Media Player框架中的MPMovie Player Controller类和MPVolume View类。

(2) 链接网络资源获得歌词 , 进行分割排序比较 , 使用NSTimer来监测播放的时间 , 实现歌词同步。

(3) 广播播放器采用Code Morphic公司的Co Mo Radio开源软件底层的部分功能实现广播流的播放, 该开源软件提供的Cm Audio Player用于管理和播放网络广播。

( 4) 结合NSURLRequest类和UIWeb View控件 , 实现手机网页浏览。

(5) 下载管理采用ASIHTTPRequest实现网络连接 , 加入到network Array下载队列实现多个网络资源同时下载。

(6) 创建GKPeer Picker Controller类的实例 对及相关 的接口, 把大的媒体文件分割成小的模块, 来实现蓝牙传输。

4视频播放器模块

4.1视频播放器模块描述

视频播放 器模块是 对i Phone支持MP4/3GP/AVC/AVIMPEG-4等格式的视频文件进行播放 , 分别对来源于本地和网络的视频文件进行处理, 利用重力感应技术, 实现横屏和竖屏的灵活切换, 使播放效果更为显著。

4.2算法实现

播放视频用到的API主要使用的是Media Player框架, 该框架包括 两个类 : MPMovie Player Controller类和MPVolume View。它们用于管理整个视频的播放, 只需要提供视频文件的URL, 并调用play方法播放视频即可。视频文件支持如下:

( 1) H.264视频 , 高达1.5Mbit/s, 640×480像素 , 每秒30帧 , Low-Complexity版本的H.264 Baseline Profile采用AAC-LC音频, 高达160Kbit/s, 480k Hz, 立体声音频为.m4v、 .mp4和.mov文件格式。

( 2) H.264视频 , 高达2.5Mbit/s, 640×480像素 , 每秒30帧 , Baseline Profile高达Level 3.0采用AAC-LC音频 , 高达160Kbit/s, 480k Hz, 立体声音频为.m4v、 .mp4和.mov文件格式。

(3) MPEG-4视频 , 高达2.5Mbit/s, 640×480像素 , 每秒30帧 , Low -Complexity采用AAC -LC音频 , 高达160Kbit/s,480k Hz, 立体声音频为.m4v、 .mp4和.mov文件格式。

程序代码如下:

(1) 在项目中加入Media Player框架 , 并引入Media Player/Media Player.h头文件 :

( 2) 在View Controller.h文件里创 建一个MPMovie PlayerController指针 :

(3) 获取视频文件存储路径。由于从播放列表View Controller中采用委托传递数据操作过于繁琐 , 在本项目中各个模块之间进行数据传递基本上都使用文件读取用为中介来实现数据传递;

(4) 初始化一个网络视频播放player

(5) 初始化一个本地视频播放player

(6) player操作方法 :

播放: [self.movie_Player play] ;

暂停: [self.movie_Player pause] ;

停止: [self.movie_Player stop] ;

(7) 通过消息中心NSNotification Center时刻监视视频的播放状态:

4.3逻辑流程

视频播放模块的流程图如图2所示。

5结语

视频播放器 篇5

Windows Media Player可以直接播放的文件,例如:rm、rmvb、mp3、mkv等格式都会造成好友无法正常听到或看到影音文件。

温馨提示:

1、种情况下您可以选择到网络上去查找适合播放该影音文件的解码器,安装好后再进行给对方播放影音文件操作(由于Windows Media Player非我们开发的软件,无法提供相应的解码器)。

视频播放器 篇6

统一的视频搜索、播放、互动平台;

全网视频搜索,视频一搜就有,一点就播;

自主创新的P2SP点播加速技术, 加速点播,流畅稳定;

全方位互动超爽体验,视频观看一站式解决。

官方网址:http://www.vvbox.com/

听专家谈创业

2006年国内视频领域风起云涌,全国出现了数百家类Youtube视频网站,一直从事视频领域研究和开发工作的我也在时刻关注着这一变化,在使用这些网站服务的时候发现这类网站模式大同小异,内容小异大同。我们发现视频网站或者视频搜索网站都不能很好地解决用户体验的问题,用户对统一的搜索、播放、互动平台非常需要。2006年年初我们开始技术研发,目标是给用户最好的视频收视体验,软件采用了先进的网络视频搜索技术、多媒体播放器技术、P2SP点播加速技术等。

专家帮你就业

VVBOX在软件开发上,采用的什么程序?

学文:VVBOX采用VC++平台开发。

为什么要采用该程序开发呢?

学文:因为VC++开发程序执行效率高,占有系统资源少。

对初学者或大学生,您建议他们学C++吗?您认为哪类语言最有前途?

学文:对于初学者学习编程,建议从标准C开始学习,有了一定基础以后可以学习一些可视化编程工具,比如VB等,能比较快地获得一些成就感。

能给大家讲下是为什么吗?

学文:对于将来以软件开发为职业的人来说,基础软件设计开发能力的培养是最重要的,有好的编程技能和编程习惯,可以很容易地掌握不同的编程语言,在实际工作中可以不同的应用软件采用不同的开发工具实现。

如果您在招聘时,哪几方面会是您招人的目标?

学文:基本功扎实,具有创新思维是我们招人的目标。

当大家还在进行HTTP等下载,还认为P2P是很流行的技术时,新的技术已经出现了,那就是P2SP技术。其实P2SP技术大家已经在用了,那就是迅雷,迅雷将P2SP用于了下载,而VVBOX就更进一步,将P2SP用于就是视频播放。于是记者采访了威播网的技术总监吴学文先生。

吴学文

清华大学计算机专业硕士毕业,主要研究方向为多媒体传输以及视频图像编解码算法研究,具有很强的技术创新能力和坚定的创业精神。2001年研究生期间,在清华创业园创办北京东方睿智科技发展有限公司,是公司主要创始人之一,承担主要技术攻关和技术团队管理工作。2003年进入东芝(中国)有限公司先后担任项目经理,高级技术经理等职,曾管理50多人的研发团队,有非常丰富的软件项目开发管理经验,主持开发成功的项目近10个。2006年初,发起创建北京领先英特传媒技术有限公司,公司从无到有,从弱到强,发展到现在逐渐拥有了一支非常强的技术研发队伍和技术支持队伍,在宽带流媒体应用领域具有了非常强的技术实力。公司运营的VVBOX网络视频搜索播放器平台正在成为广大用户观看互联网视频新的门户。

软件精典应用

海量视频瞬间搜索

VVBOX能提供按分类和按关键字等多种搜索功能,点击相应的明星、体育、新闻或学习等视频库,就能找到相关内容,当然,你也可以在搜索栏里输入想要的内容,点击“搜索”一搜就有。

视频下载经典收藏

VVBOX支持本地或者网络flv文件播放,是一款不错的flv播放器。在收看时,点击“保存”即可下载。当然,你也可以点击“收藏”,下次想打开时,只需点击“我的VV”,在“我的收藏”里点击相应的视频即可。

互动体验短信交流

VVBOX支持用户互动发表评论,登录后点击“站内短信”,再输入用户和内容即可发送。支持用户视频文件收藏,推荐视频给好友,定制自己喜欢的视频等功能。如果你没有注册,那你就只能看视频,不能发短信了哟!

防止打扰置顶播放

点击右上角的置顶即可让播放器窗口处于所有窗口的顶层,这能方便你观看视频。再点击一下,即可取消置顶。

视频模式快捷切换

在右上角还有个“精筒模式”按钮,点击即可进入精筒模式,只能看到视频窗口,没有其他的信息窗口。再点击“完整模式”即可轻松返回。也可以按“Ctrl+G”来进行快速切换。

个人设置轻松设置

右击拖盘区的图标,选择“系统设置”,在“系统设置”的“个人设置”里,可以设置“系统运行自动启动”、“是否弹出今日热点”和“下载完成提醒”。当然也可以对模式切换的快捷键进行设置。

赠送珍藏版VV号

视频播放器 篇7

自从多媒体问世以来, 各种应用得到蓬勃发展, 多种开发工具也应运而生, 可谓百花齐放。DirectShow是Microsoft公司为游戏和其它高性能多媒体应用所提供的一套底层应用程序编程接口, 它能够完成多媒体设计的总体框架和底层工作。DirectShow对媒体数据处理采用流媒体的方式, 在应用中使用该方式可以不考虑复杂的数据传输、硬件差异和同步性工作, 同时又可以自动协商从数据源到应用的转换, 流接口提供了统一的、可以预测的数据存取的控制方法, 这样应用程序在播放媒体数据时不需要考虑它最初的来源和格式。设计中使用了DirectShow这种较新潮的标准后, 使得媒体文件的处理变得简单而富有成效。Microsoft Visual C++是大家喜欢使用的工具, 既有高级语言的简便、易用性, 又有低级语言的灵活性、强大性。本设计就是利用Visual C++ 作为开发工具, 以Windows作为开发平台, 以DirectShow为框架设计一个能够播放VCD等形式的工具, 播放常见音乐、电影, 如:MP3、AVI、MPEG等格式的媒体文件。

1 Filter Graph的设计

在任何系统的设计中, 最关键的都是系统架构以及控制部分的设计, DirectShow系统也不例外。由于这是基于对话框的设计, 在设计播放器时只需考虑Filter Graph设计和基本的音频、视频控制。

在整个设计当中, 设计的核心部分是Filter的设计, 它也是基于DirectShow音频和视频系统的难点和重点, 只有设计好了实现系统各种功能的Filter, 才能继续完成后续的设计。而在DirectShow中Filter只是一个应用的框架, 一个能支持“输入→内部处理→输出”的典型过程应用框架。在这个框架之下更重要的就是应用逻辑 (也可以说是常说的控制逻辑等) , 即“内部处理”部分。一般来说, 建议将应用框架与应用逻辑分离, 使设计的结构清晰、扩展性好, 如图1。所以设计主要在应用逻辑块, 另外, 还要处理好各个Filter之间的连接, 即Filter Graph中接口关系及其相关事件、消息的处理, 这也是很重要的部分。如果处理不当, 所做的播放器就不能实现控制和播放了, 因为具体操作和处理函数没有正确联系上。

1.1 Filter Graph第一阶段的设计

创建一个名为VdGraph的Filter Graph, 其第一阶段是创建一个Filter Graph Manager组件, 代码如下:

1.2 Filter Graph第二阶段的设计

为了实现文件的播放, 第二阶段就是要根据实际的应用, 创建一条完整的Filter链路, 代码如下:

1.3 Filter Graph第三阶段的设计

第三阶段调用Filter Graph Manager上 (或直接在某个Filter上) 的各个接口方法进行控制, 并且完成Filter Graph Manager与应用程序的事件交互, 可以调用IMediaControl接口方法控制Filter Graph的状态转换。

1.4 Filter Graph链路的验证

从DirectShow的特性中了解到:在第二个阶段中, 构建Filter链路之前, 要在GraphEdit中验证构思中的Filter链路是否正确, 而后再以GraphEdit中的Filter链路为模型在程序中实现。要使用GraphEdit这个功能, 就要在程序中创建一个Filter Graph Manager之后将其注册到活动对象表中。

在退出应用程序前, 还要将显示应用程序创建的Filter Graph的GraphEdit关掉, 在程序析构Filter Graph Manager前, 再注销先前的注册。

1.5 Filter Graph事件的处理

获取各个接口后, 就要处理应用程序对事件的通知, 即WM_GRAPHNOTIFY的消息响应。先定义这个消息WM_GRAPHNOTIFY, 然后调VdGraph::SetNotifyWindow将其设置给Filter Graph Manager。

1.6 抓图功能的实现

在播放媒体文件过程中, 常常需要用到一个很有用的功能, 就是在当前播放位置抓取图片, 使用mBasicVideo::GetCurrentImage接口方法来实现抓图功能, 设置图像的大小、图像帧分配的内存、图像帧数据的获取等。

到此, 控制逻辑的主要部分就基本实现了。

1.7 各控制Filter的实现

在音频和视频文件播放过程中, 要对各状态进行控制, 比如:停止、运行、暂停等等, 在Filter Graph中, 也应该给出相应的具体实现。到这里已经简单地完成了Filter Graph的设计, 播放器也有了一个具体的框架。

2 用户界面的设计

整个Filter Graph设计完成后, 就要设计用户界面, 应该把它设计得既漂亮适用、又合理方便, 这也是媒体播放器软件的基本要求。在界面上要做一些基本视频和音频的控制。比喻:“打开”、“播放”、“上一曲”、“下一曲”、“暂停”、“停止”、“全屏”、“退出”的控制等等。还有:在播放视频文件的时候获取属性页的“属性”;实现实时拖动的“进度条”;控制声音大小的“音量条”, 抢抓画面的“抓图”选项等。

3 播放控制的设计

先将前面设计的Filter Graph的各种操作封装, 包括Filter Graph Manager的创建、其上的各种控制的接口等。在主对话框类中, 定义一个VdGraph类型的指针VdGraph*mFilterGraph;然后使用VdGraph类型的指针mFilterGraph调用Filter Graph的各种操作来实现基本的逻辑控制, 但是当用户选择一个源文件的时候, 还要创建相应的Filter Graph。定义一个消息映射WM_GRAPHNOTIFY, 再声明一个公有的消息响应函数afx_msg void OnNMOutofmemoryHotkey1, 就可以处理Filter Graph事件。播放器已经有了播放媒体文件的功能了, 但还必须给打开按钮添加代码, 并在打开的同时播放所选文件的第一首曲子。同样给播放、上一曲、下一曲、暂停、停止、抓图、全屏、属性、退出等按钮添加代码, 分别控制, 实现不同的功能, 从而实现用按钮控件进行控制播放器的目的。

4 结束语

本播放器系统采用了Directshow应用框架, 以VC++作为开发工具。在开发过程中Fiter Graph的构建和处理让应用程序与系统之间的事件交互得以实现, 如通过MPEG的解码Filter, 以及视频色彩空间的转换Filter、音频采样频率转换Filter等等可将音频数据传送到声卡通过音箱传出, 将视频数据传送到显卡通过彩显进行显示。播放器界面以图形或各色按钮为代表, 看起来比较美观, 通过对按钮进行各种设置, 可让按钮完成相对应的任务, 操作方便, 简单、明了, 且可以播放多种媒体文件, 播放效果很流畅。

参考文献

[1]陆其明.DirectShow开发指南[M].北京:清华大学出版社, 2003.

[2]辛长安, 梅林.VC++编程技术与难点剖析[M].海口:南方出版社, 2004.

[3]赵大鹏, 时家明.用C++Builder开发基于DirectShow的视频捕获程序[J].程序员, 2004 (6) .

一种基于FPGA的视频播放器 篇8

视频图像信号的突出特点是信息量巨大,以我国数字广播中广泛采用的PAL制式为例,标准的数字化PAL电视分辨力为720×576,24 bit的色彩位深,1帧图像的信息量为720×576×24 bit=9.953 28 Mbit,而PAL标准中每秒扫描25帧图像,则每秒传送的信息量为9.953 28×25=248.832 Mbit。另一方面,视频信号需要严格的时钟同步,在视频的采集与显示过程中,即使仅一个像素错位,整幅画面也会失步。CPLD与FPGA等可编程逻辑器件集成度与速度都有很大的提高,而且价格较低,在图像显示控制方面有较多应用。文献[1],[2]采用可编程逻辑器件完成LCD控制电路设计,文献[3]设计了一种LCD控制器的IP核,基于FPGA的LCD控制器在灵活性与价格方面都比专用显卡芯片具有优势。

本设计基于“FPGA+SAA7111A”的结构,利用FPGA的硬件并行处理和在线可编程能力解决视频信号信息量大和制式繁多的问题,通过Verilog HDL编程实现视频采集以及TFT LCD驱动等各种复杂时序信号的产生与控制,实现了高质量、小体积、低成本的视频播放器。

2 总体设计思想

2.1 系统介绍

电视信号除了需要传送辉度信号Y以外,还必须用次载波来传送色差信号BY及RY。复合视频信号将BY及RY以3.58 MHz的次载波载送在Y信号里,同时还包括了行同步信号、行消隐信号、场同步信号、场消隐信号等同步信号。为了得到图像信号,首先需要采用梳状滤波器将3.58 MHz的色度信号与Y信号分离,得到Y,C信号(即S-Video),然后以不同的速率对这两路信号采样、编码就得到各种标准的图像信号。

本设计采用Philips公司的SAA7111A来完成复合视频信号的解码。SAA7111A是一种增强型视频输入处理器芯片,它能够完成视频制式自动识别、A/D变换、同步时序信号分离、亮度色度调整、色彩空间变换等功能,极大地减轻了设计的复杂度和体积。同时,SAA7111A是一种标准的I2C器件,需要通过I2C总线对其初始化。为了减小视频播放器的体积及成本,设计中采用FPGA模拟I2C主控制器来完成SAA7111A的配置过程。

设计中采用的TFT LCD为光联科技的UMSH-8044MD-T。该TFT LCD分辨力为320×240,支持RGB(5∶6∶5)格式图像显示。本设计通过FPGA产生LCD需要的各种时序信号,驱动该TFT LCD完成视频播放。

2.2 系统结构

该系统结构如图1所示,它主要完成对视频信号的采集并实时播放。整个视频系统由3部分组成。

1)视频解码模块,该部分通过FPGA来配置视频处理芯片SAA7111A,实现模拟视频信号的数字化,为系统后面的模块提供RGB(5∶6∶5)格式的标准数字视频信号。

2)图像缓存与控制模块。该部分是整个系统的关键,它协调着采集与显示的同步。一方面通过FPGA编程控制SRAM存储所需分辨力的数字视频信号;另一方面,采用2块SRAM实现双缓存,通过乒乓机制,确保FPGA向一块SRAM写图像数据的同时,LCD能够接收到另一块SRAM的数据,始终保证LCD接收到连续、稳定的视频流。

3)TFT LCD驱动模块,该部分通过FPGA产生LCD显示时序,实现TFT LCD显卡的功能,确保SRAM中的数据正确输出到LCD。

3 系统具体设计及实现

3.1 视频解码模块

SAA7111A解码芯片需要通过I2C总线对其初始化才能正常工作。由于I2C总线时序比较简单,并且该设计仅涉及到单主控制器、单从器件的情况,不需要仲裁过程,更加降低了难度,因此这里采用FPGA模拟I2C主控制器来完成SAA7111A的配置过程。I2C总线时序如图2所示,每次传送完1 byte后,需要接收到从器件的响应后再传送下一字节。

为了判断SAA7111A是否解码正确,建议同时编写对SAA7111A的读程序,通过读取SAA7111A的状态寄存器0x1F的值来判断解码芯片的工作状态。值得注意的是,SAA7111A对晶振精度要求较高,稍有偏差就会造成颜色分量的失真。前两次采用无源晶振,SAA7111A均解码不正确,建议采用精度更高的有源晶振。

3.2 视频图像缓冲模块

SAA7111A场同步信号VREF、行同步信号HREF、奇偶场信号RTS0、像素时钟信号LLC2的时序见图3。

当RTS0为1时,表明输出为奇数场,当场同步信号VREF有效时,对行同步信号HREF计数到83时,启动行有效信号。同理当行同步信号HREF有效时,对像素时钟信号LLC2计数到200时,启动数据有效信号,开始采集图像数据[4]。采用该方式可以灵活的控制采集信号的分辨力,这里将分辨力设为320×240,是为了满足TFT LCD分辨力的需要。由于SAA7111A解码出来的数字视频信号采用隔行扫描的方式,而TFT LCD是逐行显示,所以该奇数场采集了120行数据。

在这里FPGA接收4个输入时钟,即VREF,HREF,RTS0和LLC2。为了保证时钟的可靠性,将像素时钟信号LLC2引入FPGA的全局时钟引脚作为全局时钟。

对图像数据的定位,采用下列方法:调用FPGA的ROM宏模块,建立1个表,保存行首地址,每次存储数据时,行首地址采用查表得到,行内地址采用计数的方式[5,6]。

这样做的好处是:1)可消除隔行扫描信号与逐行扫描信号的差异,由于行首地址已固定,行内地址都采用计数的方式,奇偶场信号的存储方法完全一样。2)可准确定位整幅图像每行的行首地址,即使某一个数据受到干扰,则失步只存在于该像素所在行,其他行仍然同步。

3.3 TFT LCD控制模块

如图4所示,像素数据需要在行同步信号HSYNC、帧同步信号VSYNC、像素时钟CLK以及使能信号ENAB(图中由V_EN和H_EN)的配合下才得以在LCD上正确显示。一副图像被各种时序信号分成了若干区域,只有图中有效像素区的数据会被显示到LCD上。当行同步信号HSYNC、帧同步信号VSYNC均处于有效像素区时,输出使能信号ENAB有效,使数据输出;而当HSYNC和VSYNC处于消隐期间,关闭使能信号,禁止数据输出。

图5显示了VSYNC与HSYNC的时序关系。由于该时序关系比较复杂,而且LCD对时序要求比较严格,这里采用有限状态机来产生各种时序信号[7]。

系统采用的TFT LCD标准像素时钟为6.4 MHz,为了便于时钟同步,这里将LLC2二分频作为显示时的像素时钟(即CLK=LLC2/2=6.25 MHz)。系统中采用的摄像头输出的是PAL信号,则显示1屏图像需要0.020 4 s。而SAA7111A可在1 s采集25帧图像,即采集1帧图像需要0.04 s时间。这样采集1帧图像的同时LCD大约需要刷新2次。不妨采用奇偶场信号RTS0的时钟变化来产生INT_Syn标志表示1帧的开始,这样需要LCD每次读SRAM中的数据2次后才能切换到读另一块SRAM。

从图5可以看出,VSYNC的产生可以分为4个状态:S0,S1,S2和S3。各状态之间的转换为S0→S1→S2→S3→S0,通过状态机描述如下:

1)S0为帧同步脉宽阶段。INT_Syn到来,标志一帧的开始,此时VSYNC为1,帧有效信号VDEN为0,对HSYNC计数从0到VSPW。

2)S1为垂直后扫阶段。此时VSYNC为0,帧有效信号VDEN为0,对HSYNC计数从0到VBPD。

3)S2为帧有效阶段。此时VSYNC为0,帧有效信号VDEN为1,对HSYNC计数从0到LINEVAL。

4)S3为垂直前扫阶段。此时VSYNC为0,帧有效信号VDEN为0,对HSYNC计数从0到VFPD。

行同步HSYNC信号的产生过程同VSYNC类似,只不过HSYNC的各个状态是对CLK计数。当帧有效信号VDEN与行有效信号HDEN均为1时,打开LCD数据使能端ENAB,LCD接收SRAM送来的数据。当然,由于LCD的差异,可能在时序产生时需要对前消隐、后消隐信号有所调整才能显示出无错位的图像。

通过Verilog HDL编程语言来描述以上状态机,在Quartus II 6.0开发环境中仿真得到TFT LCD显示时序(见图6)。通过该仿真可以看出,采用有限状态机较好地解决了视频显示复杂时序的问题,得到了TFT LCD显示所需的各种时序信号。

3.4 双缓存控制模块

以上分别介绍了视频采集以及TFT LCD显示驱动功能的实现,但由于采集与显示都是连续不间断的,故需要协调采集与显示的同步才能正常播放视频。这里采用双缓存结构,通过乒乓缓存操作确保LCD不间断地接收数据[8]。当FPGA向SRAM1写入数据时,LCD接收来自SRAM2的数据,这时LCD数据口和SRAM2相接,却必须和SRAM1隔离;反过来,当FPGA向SRAM2写入数据时,LCD接收来自SRAM1的数据,这时LCD数据口和SRAM1相接,却必须和SRAM2隔离。这里采用如图7所示电路解决这一问题。

图7中,引入switch控制信号作为缓存切换标志,其中switch信号每当RTS0上升沿到来时翻转一次。当switch为1时,vpo[15∶0]与sram1_data[15∶0]接通,而由于三态门为高组态,vpo[15∶0]与sram2_data[15∶0]隔离,而在数据输出端通过多路选择器使DATAB即sram2_data[15∶0]输出到lcd_data[15∶0]。同理,当switch为0时,vpo[15∶0]与sram2_data[15∶0]接通而与sram1_data[15∶0]隔离,lcd_data[15∶0]接收SRAM1的数据。而SRAM地址产生则比较简单,只需要在每帧到来时从零开始计数即可。通过此种方案可以很好地解决视频采集与显示的切换,视频播放效果如图8所示,视频播放比较流畅,清晰度较好。

4 小结

笔者设计并实现了一种基于FPGA的视频播放器,经过仿真与测试,每秒能够播放25帧视频,且适用于分辨力在720×576以下的各种TFT LCD。

笔者将视频的采集以及TFT LCD的驱动集成在一块FPGA中,实现了视频播放的功能。同时,该方案与其他方案相比,不仅减小了视频采集与显示时钟同步的难度,又缩小了系统的体积,更为重要的是该方案完全在线可编程,具有非常好的灵活性。另外,随着数字图像处理技术的日益发展及成熟,该方案也可作为图像处理系统中的前端视频采集部分,为数字图像处理部分提供高速、可控的视频流。

参考文献

[1]LEI Jingming,ZHOU Xuechen.Dynamic dithering algorithm and frame rate control technique for liquid crystal display controller[C]//Proc.ASICON2003.[S.l].:IEEE Press,2003:740-743.

[2]ITAKURA T,MINAMIZAKI H,SAITO T,et al.A402-output TFT-LCD driver IC with power control based on the number of colors selected[J].Solid-State Circuits,2003,38(3):503-510.

[3]程佺,沈绪榜.一种LCD显示控制器IP核的设计与验证[J].计算机与数字工程,2004,32(1):5-8.

[4]程颖,王锐.SAA7111A芯片在视频图像处理FPGA设计中的应用[J].合肥工业大学学报:自然科学版,2007,30(11):1399-1403.

[5]武乾永,陈宾.基于FPGA的实时图像数据采集模块设计[J].微电子学,2008,38(3):453-456.

[6]陈彬.基于FPGA的视频图像处理系统设计[D].重庆:重庆大学,2006.

[7]方勇,吕国强,彭良清,等.3D显示器视频转换系统设计及其FPGA实现[J].液晶与显示,2007,22(1):94-98.

视频播放器 篇9

Vx Works是美国风河公司推出的一个实时操作系统,专门为实时嵌入式系统设计开发的操作系统内核,为程序员提供了高效的实时多任务调度、中断管理,实时的系统资源以及实时的任务间通信。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,是一种功能强大而且比较复杂的操作系统。

但是在用于监控管理系统的Vx Works系统设计中,该系统本身对本地、网络视频的播放等人机交互应用支持较差,在与视频播放器设计相关的视频显示、图形界面开发方面,需要基于系统自身的多任务体制、网络套接字编程、存储及文件系统管理、2D图形开发等基础技术自行开发。

本文结合实际工程阐述了一种Vx Works下的能够支持本地文件播放和网络组播视频播放的播放器设计,具体分析了播放器图形界面交互模块、组播接收模块、视频解码模块、视频播放模块以及各模块间同步控制等设计思路,实现MPEG-4网络视频和本地视频的播放显示和控制。

2总体设计

用于网络组播视频播放的播放器设计主要包括播放器图形界面交互模块、网络组播视频输入模块、视频解码模块、视频播放显示模块,另外若需要支持本地视频文件播放,还需要本地文件输入模块,有相互关联的模块之间还需要利用信号量、看门狗或时钟中断进行同步控制,以控制视频图像解码和显示频率。

其中,图形显示交互模块由播放器窗口框架、播放停止等按钮、视频进度条、视频文件列表、网络视频地址等参数设置输入等控件组成,作为视频播放控制的人机交互接口;网络组播视频输入模块负责从指定地址和端口接收网络视频数据,并输入至解码模块,是网络视频组播输入接口;解码模块负责网络视频数据帧的解码,按照约定或根据帧流确定解码器,将经过压缩编码处理的网络视频数据帧解码,并将解码后的一帧数据输出至待显示缓冲区;视频播放显示模块在定时器释放的固定频率信号控制下,按照一定频率将解码后的视频数据通过写显存的方式,在播放器窗口框架内进行刷新显示,完成一帧图像显示。

各主要模块间的信息流程如图1所示。

3播放器图形交互模块

3.1图形开发概述

Vx Works的开发环境tornado不包含图形开发工具,但使用风河公司自身的多媒体库Wind ML(Wind River Multimedia Library)已经足够有效开发常用图形框架。风河多媒体库包括软件开发包SDK与硬件开发包DDK,其中DDK层作为SDK层与硬件之间的媒介层,提供完成一套硬件参考驱动;SDK作为应用程序与DDK层之间的媒介,提供一套API接口函数库,用来对基本图元、音视频、字体以及输入消息的支持。

为Vx Works系统提供了一套基本的2D图形开发库,包括基本图形及键盘鼠标等标准设备驱动程序框架,其相关窗口库中提供诸如win Create等函数实现基本的窗口绘制,且Wind ML下还自带一套窗口管理器WWM(Wind ML Window Manager),提供了基本的窗口管理功能。用户需要根据自身需求,基于窗口管理器进行常用控件类的开发以及窗口图形资源的创建、管理、使用、销毁等。

3.2播放器控件设计

本文设计的播放器模块利用现有Wind ML提供的资源进行窗口控件开发,创建播放器框架、按钮、文本输入框(设置参数)、进度条、列表栏等控件,构成一套完整播放器。每种控件均是属于Wind ML窗口,本质上是一类矩形对象。程序利用窗口接收人机交互事件,通过回调函数进行事件的处理,还可以控制窗口的移动、尺寸变化。

对于窗口控件的开发,主要通过win Class Create接口函数创建一个具有同样属性、同样消息处理器的窗口类,并通过win Create创建关联了该类的窗口实体,在消息处理器中将需要处理的事件进行相应的操作处理,以实现某种控件的基本功能。

消息处理器需要处理的消息由系统底层统一定义好,也可由用户自行新建。主要处理的消息包括:

MSG_DRAW:绘图消息,一般在第一次显示、窗口遮挡后重现等时机后由窗口管理器产生,或人工调用相关函数产生。

MSG_PTR_BTN1_DOWN:鼠标左键按下后产生的消息,类似的还有右键、中键,以及鼠标弹起消息。

MSG_KBD_CHAR:键盘可打印字符输入消息,类似的还有回车键、退格键、删除键等不可打印字符对应的消息。

其他窗口创建或销毁、窗口绑定或解除绑定等消息。

一个完整的控件开发类,包括定义类数据、创建函数、消息处理器等主要部分,以文本输入框控件为例,需要以下内容来实现控件设计:

3.2.1文本框类的基本数据

以数据结构的形式,定义必要的数据,包括文本指针,文本字体,光标显示位置,文本显示位置,以及文本框最大输入数据等。

3.2.2文本框创建接口函数(自定义为wwm Textbox Create)

主要内容包括调用win Class Create函数创建文本框类,调用win Create函数创建用户指定大小和位置的文本框窗口实例,并关联文本框类,其中可在参数中设置本类窗口的基本属性(有无边框、是否初始可见等等)。

3.2.3文本框消息处理器(自定义为wwm Textbox Msg Handler)

包含本类窗口的初始化、销毁事件处理,绘图处理等基本消息事件的处理,还包括鼠标单击处理、键盘字符输入,光标上下左右以及删除回退等消息处理。其中绘图是大多数窗口控件需要处理的基本操作,是关系到文本框类所有窗口实例的颜色及字体显示刷新的消息处理支线,在产生重新绘图消息后,由该支线利用点、线、面的2D图形绘制手段进行绘图。另外,文本框还需要响应鼠标单击消息,以激活窗体响应键盘输入;收到键盘输入消息后,解析键盘数据,以单链表形式存储文本框字符串,根据单链表算法进行字符串内字符的插入、删除,并主动释放绘图消息以绘制和刷新文本框内的字符。

3.2.4其他文本操作和显示接口

根据文本框控件要实现的功能,还需要自行设计文本框显示字符设置、文本框显示字符串获取等函数接口。

其他如进度条、文件列表、按钮、播放器外框等常用控件均是由上述方式进行控件类设计,之后在主程序中调用自定义的各窗口类实例的创建函数接口,组成完整一套视频播放器人机交互界面,详细设计不再赘述。

4组播视频输入模块

4.1网络套接字通信概述

Vx Works提供了成熟的TCP/IP协议栈和套接字(socket)编程方法,实现网络信息传递,常用手段为流套接字和数据报套接字。其中流套接字采用面向连接的TCP协议通信,优点为数据包通信有序、可靠;数据报套接字即UDP通信,不需要像TCP一样建立和维持稳定的连接,优点是使用方便,支持单播和组播、广播,且可以基于UDP协议进一步封装RTP/RTCP流媒体协议,实现网络视频流控制和接收。

4.2组播视频接收设计

本文涉及的视频监视系统视频服务端在网络上采用UDP组播方式将视频信息进行网内发送,因此播放器需要采用UDP组播接收方式接收和传递经过编码的视频数据。

本播放器设计中,组播视频数据的接收是实现播放器播放网络实时视频的主要环节之一,基于UDP基本通信流程,通过播放器界面控件启动指定的某一路组播地址下的网络视频数据监听、接收,流程设计如图2所示。

另外,与组播视频接收类似的,本地视频文件播放模块也可采用“读取本地文件-->加入解码缓冲”的方式设计本地文件输入模块,区别是采用Vx Works的文件管理系统进行数据输入。

5视频解码模块及视频播放显示模块

由于网络视频传递时通常都按照一定视频编码进行压缩编码,以便在有限的带宽下传输,因此播放器需要有相应的解码器对编码后的视频帧进行解码。

以本设计中涉及的MPEG-4视频为例,Vx Works系统及开发环境本身不支持MPEG-4编解码,因此需要开发或移植对应解码器,以实现MPEG-4视频流解码。

MPEG-4采用基于对象的压缩编码技术,在编码前,首先要对视频序列进行分析,从图像中分割出各个可视对象,然后分别对每个对象的形状信息、运动信息、纹理信息单独编码。一个视频对象(VO)可由视频对象起始码和一个或若干视频对象层(VOL)组成,视频对象层由VOL头和若干个VOP(视频对象平面)构成,其中VOP是VOL的一个时间瞬间。MPEG-4视频编码是基于VOP进行的,采用运动补偿预测、压缩手段,通过帧内VOP(即I帧,关键帧)、帧间前向预测VOP(即P帧)、帧间双向预测VOP(即B帧)三种类型VOP的编码实现。解码过程即是对各个VOP的反向过程。

普通视频对象流的解码过程如图3所示。

MPEG-4编码是目前使用较久、较广泛的编码技术,在其他平台下有不少解码模型可供移植,以减少开发时间。本设计中采用移植开源的Xvid解码器模型到Vx Works系统中的方式,根据需要裁剪、优化,设计本系统中的解码模块。

另外,由于解码后的数据已是可显示的原始RGB图像数据,视频显示模块设计采用直接操作显存的方式,将解码后的RGB图像数据按照每秒25帧的速率逐行写入显存地址,实现逐帧画面显示。解码模块和播放显示模块主要流程设计如图4所示。

需要注意的是,播放模块任务进程与解码模块任务线程优先级之间必须有适当的高低关系,设置播放模块优先级略高于解码任务等,使视频数据流读取、解码操作在25帧/秒的帧间隔内进行,以避免在视频播放期间播放任务被中断,产生图像卡顿。

6验证及结语

根据本设计方法研制的Vx Works平台下某监视系统播放器,具有完整的图像界面及人机交互操作界面、本地MPEG-4视频文件检索播放、MPEG-4网络组播码流在线播放等功能,效果如图5所示。

通过播放分辨率为720×576、码流2Mbit/s、帧率25帧/s的标清MPEG-4视频组播码流验证,其播放效果清晰,实时性及执行效率高,可良好满足Vx Works系统下视频播放设计需求。

参考文献

[1]王金刚.基于Vx Works的嵌入式实时系统设计[M].北京:清华大学出版社,2005.

[2]Wind River Inc,Wind ML SDK 3.0Programmer's Guide,2005.

视频播放器 篇10

该方案基于MFC框架,播放器功能完全采用底层的WIN32API实现,具有结构清晰、设计简洁、可扩展性强的特点。与普通视频相比,立体视频具有多个视频通道,数据量较大。本文所涉及的自由立体视频源,其每一帧的立体图像都由8幅存在一定视差的平面图像合成而来。需要播放立体视频时,通过与狭缝光栅相匹配的立体合成算法[2],将8幅分辨率为720×360的图像合成分辨率为1 920×1080的立体图像进行显示。所以,播放器除了具有普通视频播放器的基本功能之外,还具备视频格式自动匹配、帧率控制及平面/立体模式自由切换等功能。同时,为了达到明显的立体效果,帧率至少要达到20f/s以上。

1 自由立体视频播放器实现原理

播放器基于MFC框架,按钮控件实现对播放器各项功能的控制,进度条控件显示视频解码线程的进度,滚动条控件显示视频播放的进度,并具备拖动滚动条以控制视频进度的功能。静态文本控件内显示视频帧数,累计时长、平均帧率等实时信息。播放器原理如图1所示。

立体播放器处理视频文件的流程是,从数据文件读取YUV420数据,根据图像的大小,以帧为单位转换为内存无关位图DIB(即RGB格式)[3],并利用与狭缝光栅相匹配的合成算法将RGB像素数据重新组合排列,最终将内存中已经排列好的RGB数据显示在播放器的视频区域。

视频播放器的显示原理与动画片的原理类似,利用人眼的视觉暂留特性,快速地把一张张图像贴到播放器的视频区域。人眼无法分辨这些静止图像,感觉如同播放动画一样。

通过贴有特定光栅的显示器来显示、播放立体图像,由于观察者双眼相对于光栅屏幕的空间位置不同,会产生双眼视差[4],从而令观察者无需借助立体眼镜即可裸眼体验立体感觉。

2 播放器性能

为了精确测量播放程序中各个功能模块的耗时情况,程序中加入了测量时间的功能。

实现方式:在程序运行时,首先调用QueryPerformanceFrequency()函数,得到CPU的时钟频率m_freq。在需要测量时间的操作之前和之后调用QueryPerformanceCounter ()函数,分别得到2个时钟计数值mcount_start和m_count_stop,则利用公式:

即可得到执行操作所消耗的时间。

利用此种方法,测得播放器播放视频过程中各个环节的耗时情况,如图2所示。

初步实现播放功能时,播放视频的帧率很低,只有9 f/s~11f/s,所以需要针对视频播放过程中各个环节的原理和特点采取不同的方式提高播放器的运行效率。

3 关键技术研究与性能改进方法

3.1 内存中图像数据的显示

将内存中的RGB数据显示到视频区域,需要在具备图像显示功能的函数体中,提供表示图像颜色位数、尺寸等格式信息的结构体BITMAPINFO,以及图像数据起始地址的指针BMPbuffer[5]。对具备显示图像功能的函数进行测试,结果如下:

(1) StretchDIBits。可以用拉伸模式完成全屏显示功能,但是在拉伸模式下,图像会出现明显的色彩错误。

(2) SetDIBitsToDevice。只能原比例显示图像,如果显示器的分辨率设置小于1920×1080,则图像无法完整显示。

(3) DrawDib函数组。DrawDib是不依赖于图形设备接口(GDI)而直接操作显存的函数组。能够实现图像的显示功能,并且能以任意宽高比进行拉伸显示,拉伸后的图像无色彩错误。所以,此处采用DrawDib函数组来实现内存位图的显示功能。

显示功能的核心伪代码为:

核心函数是DrawDibDraw (),参数中需要提供视频显示控件上表示绘图区域的参数rect、LPBITMAPINFO类型的结构体指针m_IpBmpInfo及DIB数据的起始地址BMPbuffer。

经测试,DrawDib函数组能够很好地完成DIB图像的显示,贴图速度快,没有明显的延迟现象,并且在全屏模式播放时没有出现类似使用StretchDIBits ()函数时出现的色彩失真,达到了良好的显示效果。

3.2 内存映射文件处理大文件操作

分辨率为1 920×1 080的600帧的视频,采用YUV420存储格式时,体积高达1.78GB。目前,对于这种大文件的操作通常是以内存映射文件的方式来加以处理的[6]。

根据播放器功能模块的耗时统计结果,未使用内存映射文件方式,而直接从硬盘读取分辨率为720×360×8的YUV420数据,平均每帧耗时35 ms,是整个播放流程中耗时最大的环节。所以,采用内存映射文件的方式改进文件读取模块可以提高播放器的效率。内存文件映射是Windows的一种内存管理方法,通过文件映射使磁盘文件的全部或部分内容与进程虚拟地址空间的某个区域建立映射关联,可以直接对被映射的文件进行访问,不必执行文件I/O操作也无需对文件内容进行缓冲处理,这种特性在进行大文件的磁盘事务操作时将获得很高的效益。内存映射文件的一般编程流程如图3所示。

经过实际对比测试,直接从硬盘读取分辨率为720×360×8的YUV420数据平均帧耗时_35 ms。而通过内存映射文件的方式读取每帧数据的耗时可减少到15 ms左右。可见内存映射文件在处理大数据量文件时表现出了良好的性能,比通常使用的CFile类和ReadFile()等函数的文件处理方式更加快速有效。

3.3 缓冲解码

播放器已经实现了YUV视频格式的播放功能,在此基础上加入H.264解码模块以实现播放器对H.264格式的支持。

采用开放源码的JMVC来处理H.264视频视频的解码。经测试,对于1920×1 080的H.264视频,JMVC解码速度在12f/s左右,如果采用实时解码播放的方式,播放的帧率较低,达不到流畅播放的要求,因此采用缓冲解码的方式来实现。环形缓冲区的工作原理如图4所

为了接收JMVC解码H.264产生的YUV数据,首先在内存中开辟出能够存储100帧YUV数据的环形缓冲区YUV Buffer。所谓“环形”,是指当需要接收的YUV图像帧数多于缓冲区的承载量时,数据指针从缓冲区结尾处重新跳转至缓冲区起始处,即重新返回到缓冲区起始处开始存储,将先前的YUV数据覆盖掉。播放线程将缓冲区内的YUV数据处理并显示出来后,数据指针同样从缓冲区结尾处重新跳转至缓冲区起始处,即重新返回缓冲区起始处,继续处理播放YUV数据。

3.4 多线程的应用

根据播放器功能模块的耗时统计结果,使用单线程方式处理YUV数据的转换和RGB数据的合成平均耗时为18 ms和20 ms。

为了提高多核CPU的利用效率,采用多线程方式改进程序的功能模块。由于图像以帧为单位,每帧YUV图像数据排列结构相同且无相关性,所以在处理时将每帧图像由上至下分成4快,每块图像数据开启一个线程,同时采用四线程来处理转换过程。转换得到RGB图像,其像素数据的排列顺序也是从左至右、从下至上,所以RGB的合成工作也可采用四线程实现。

经过实际对比测试,采用4线程处理YUV数据的转换和RGB数据的合成,平均耗时降至5ms和7ms,大大提高了图像数据的转换与合成效率。

3.5 多线程同步、线程间通信

在播放H.264视频格式的模式下,播放器首先启动解码线程,向缓冲区内写入YUV数据。当缓冲区内开辟的100帧控件被装满后,需要利用线程通信机制向播放线程发送消息。播放线程开始处于等待状态,从消息队列中取得相应消息并验证,当识别出解码线程发送的特定消息后开启播放功能。采用此种方式,可以在保证视频不间断播放的基础上提高视频播放的帧率。但是由于采用多线程实现,线程间的同步成为不可忽视的问题。

解码和播放两个线程是同时执行的,解码线程提供YUV图像数据,播放线程将缓冲区内的YUV数据处理成RGB位图数据并显示出来。不允许在某一时刻,在任何一段内存区域上同时发生读取和写入操作,所以,必须采取有效的线程同步措施。常用的线程同步方式有:互斥对象、事件对象、临界区等。播放器中需要同步的只有解码和播放两个线程,所以此处采用互斥对象来实现线程的同步。线程之间的同步规则是:

(1)解码线程可以超前播放线程,但是超前的帧数不能大于缓冲区的长度。

(2)播放线程不可以超前解码线程。

根据缓冲区的长度构造一个互斥对象数组,数组的每个元素与缓冲区中一帧的YUV数据相对应。解码线程向缓冲区的某个区域写入数据之前,首先要请求与该位置相对应的互斥对象的拥有权,完成写入操作后,应立即放弃该互斥对象的所有权;播放线程从缓冲区内读取数据之前,也要首先请求与该位置相对应的互斥对象,完成读取操作后立即释放该互斥对象。

由于互斥对象只能被一个线程所拥有,在执行相关操作前,如果得不到相应的互斥对象,线程函数就会暂停执行,等待另一个线程释放互斥对象,有效地避免了同一段内存同时被两个线程读取和写入情况的。

经过测试,这种方案成功地实现了解码线程和播放线程的同步协调,有效地避免了播放视频过程中出现进度差错的问题。

3.6 视频播放速率的控制

播放线程中包含的操作有:(1) YUV到RGB转换;(2) RGB图像数据的重新合成;(3) RGB图像的显示。这三项操作整合到一个线程中,因为其时间损耗之和明显小于H.264解码,所以通过控制播放线程的速率来实现控制整体播放帧率的功能。

播放线程中,设置一个定时器,每隔一定时间,执行一帧的播放操作。播放线程每处理一帧图像耗时约15 ms,每秒能显示图像的帧数约为66帧(1000/15=66.6),所以用定时器控制播放线程的执行时,只要将定时器的时隙设置成大于15 ms的任意值,就能实现以指定的帧率来播放视频。例如,想要以25f/s的帧率播放,只需将控制播放线程的定时器时隙设置成40 ms即可。

经过优化后的各个环节耗时情况如图5所示。

3.7 平面2D/立体3D模式任意切换功能

平面与立体图像的区别只是RGB像素排列的不同,所以要播放普通的平面2D图像,只需要在合成立体图像的环节中,将8个不同视点的数据来源设置成相同的8个视点图像中的任意一个,合成后的图像则是普通的2D平面图像,通过光栅屏幕的观看效果和在普通屏幕上观看平面图像的效果是相同的。

4 播放器外观及显示效果

最终实现的播放器具备打开、列表、缓冲、播放、暂停、停止、进度控制、全屏播放及2D/3D模式切换等功能。如图6所示,上图为普通模式播放效果,下图为立体模式播放效果(立体模式需要在贴有光栅的专门显示设备上观看,在普通显示器上观察到的是模糊的图像)。

本文提出的立体视频播放器的实现方案运用WIN32API实现播放功能,播放器不依赖于任何其他外部组件,软件结构清晰、设计原理简洁、具有很强的可扩展性。目前播放器已经实现了对YUV和H.264两种视频格式的支持,以后还可以根据需要扩展其功能。立体播放器以贴有光栅的42英寸大屏幕显示器作为显示输出设备,播放视频清晰流畅,立体视觉效果明显,帧率符合设计要求,达到了预期的设计目标和性能要求。

参考文献

[1]秦开怀,罗建利.自由立体显示技术及其发展[J].中国图像图形学报,2009,14(10):1934-1940.

[2]宋晓炜,杨蕾.一种光栅普适的LCD多视点立体图像合成方法[J].计算机应用,2008,1(28):195-198.

[3]邵丹,韩家伟.YUV与RGB之间的转换[J].长春大学学报,2004(4):51-53.

[4]杨嘉琛,侯春萍,雷建军.基于人眼视觉特征的立体图像质量客观评价方法[J].天津大学学报,2009,42(7):622- 627.

[5]王伯尊,张凤茹.在Windows下实现多幅大尺寸位图的显示与浏览[J].应用科技,2002,29(4):42-44.

巧用触发器,灵活控制视频播放 篇11

【关键词】课件;视频资源;有效控制

随着信息技术和多媒体技术的发展和普及,多媒体教学有效地增加了课堂教学信息量,极大提高了课堂教学效果。教师在多媒体课堂教学所使用的课件中,普遍使用PowerPoint,这是由于该软件操作简洁、功能全面而受到广大教师的厚爱,成为最常用制作多媒体教学课件的应用软件。

为提高教学效率,丰富教学信息量,在PowerPoint多媒体教学课件中添加.avi、.mpeg、.wmv以及.asf等格式的视频教学信息资源,可是在应用中,很多授课教师几乎没有办法对这些教学信息资源进行有效控制,特别是对于理工科而言,比如象化学反应用药品的用量与反应结果演示,物种进化等所需要了解和掌握的视频教学信息资源,将它们添加到幻灯片中,在使用多媒体教学课件传授知识时,授课教师只能任由这些视频教学信息资源全部演示完毕才开始解答学生的疑惑,这就造成了起主导作用的教师与起主体作用的学生之间应有的交互无法及时完成,学生也就不能得到良好的认识学习效果。将所需要的教学信息资源添加到幻灯片中,如何根据课堂教学进度随时互动的情况,进一步设置控制这些教学信息资源对象随时播放、随时暂停、随时停止等三种操作状态呢? 

在此,通过PowerPoint 2003中自定义动画中触发器的运用,就能巧妙地解决这一问题。触发器功能可以将画面中的任一对象设置为触发器,单击它,该触发器下的所有对象就能根据预先设定的动画效果开始运动,并且设定好的触发器可以多次重复使用。类似于Authorware、Flash等软件中的热对象、按钮、热文字等,单击后会引发一个或者的一系列动作。下面通过实例对触发器的使用进行介绍,以实现对课件中视频教学信息的有效控制。

1 在幻灯片中添加所需要的视频教学信息资源

首先定位到需要添加视频教学信息资源的幻灯片,然后在菜单栏中选择“插入”菜单,再选择“影片和声音”命令,并在其级联菜单中选择“文件中的影片”命令选项,在其弹出的“插入影片”对话框中找到视频教学信息资源对象文件,然后单击“确定”按钮。这样所需要的视频教学信息资源对象就被添加到幻灯片中,同时弹出“您希望在幻灯片放映时如何打开播放影片”对话框,这里必须选择“在单击时”按钮。最后根据实际教学需要,设定好播放视频教学信息资源窗口的大小、位置等。 

2 设计控制视频教学信息资源播放的三个触发对象 三个播放控制触发对象可以根据授课教师个人的审美观进行设定,可以是文本字符、文本框,也可以是图片、自定义图标按钮等其他对象作为触发对象。这里我们选择自定义图标按钮作为视频教学信息资源播放控制的触发对象,在“幻灯片放映”菜单中选择“动作按钮”命令,然后在其级联菜单中选择“自定义动作按钮”选项,分别在幻灯片上拖放出三个播放控制触发对象按钮,再设计好它们的大小、背景颜色、按钮线条等格式以及它们最终的排放位置。 

最后选中第一个自定义动作图标按钮,并右击鼠标,在其快捷菜单中选择“添加文本”命令选项,就可以为该自定义动作图标按钮添加“播放视频教学信息资源”文本,再设置好“播放视频教学信息资源”文本的字体格式等等。同样,再分别为另两个自定义动作图标按钮设置“暂停播放视频教学信息资源”和“停止播放视频教学信息资源”两个控制触发对象,这样,三个播放控制触发对象就设置完毕。 

3 通过“暂停播放视频教学信息资源”控制按钮,实现对视频教学信息资源暂停播放的控制 选中已添加到幻灯片中的视频教学信息资源图标对象,并右击鼠标,在其快捷菜单中选择“自定义动画”命令选项,在弹出的“自定义动画”任务窗格中显示了“暂停符号:视频教学信息资源对象文件名”,在它的右侧下拉列表框中选择“计时”命令选项,弹出“暂停影片”对话框,在这里我们打开“触发器”按钮,并且选中“单击下列对象时启动效果”单选按钮,然后在其右侧的下拉列表框中选择 “动作按钮:自定义2:暂停播放视频教学信息资源”为其控制触发对象,最后单击“确定”按钮,就可以通过“暂停播放视频教学信息资源”触发按钮,实现视频教学信息资源暂停播放的设置。

4 通过“播放视频教学信息资源”和“停止播放视频教学信息资源”两个控制按钮,实现课堂教学任意时间的最佳互动 再选中该视频教学信息资源图标对象,在“自定义动画”任务窗格中单击“添加效果”按钮,然后在其出现的下拉菜单中选择“影片操作”命令,在其级联菜单中选择“播放”命令。这样在“自定义动画”任务窗格的下面就出现了一个“播放视频教学信息资源文件名”动作效果选项,然后在它的右侧下拉列表框中选择“计时”命令选项,弹出“播放影片”对话框,再次打开“触发器”图标按钮且选中“单击下列对象时启动效果”单选按钮,在其右侧的下拉列表框中选择触发对象为“动作按钮:自定义1:播放视频教学信息资源”为播放控制触发对象,最后单击“确定”按钮,这样就可以根据教学活动需要随时通过“播放视频教学信息资源”触发按钮实现视频教学信息资源播放的设置。 

参照视频教学信息资源的“播放视频教学信息资源”触发按钮的设置,就可以为视频教学信息资源设置“停止播放视频教学信息资源” 触发按钮的设置。 

上述是从多媒体教学课件制作实践出发,探讨了PowerPoint多媒体教学课件制作方面视频教学信息资源在PowerPoint电子教案上的应用,授课教师可以随时通过“暂停播放视频教学信息资源”按钮,随时解释视频教学信息资源中化学反应、生物进化、物理现象中存在的问题和处理方法等,极大地提高师生之间的教学互动,课堂教学更加形象化,有效地提高了课堂教学实效,实现了课堂教学过程的最优化。

参考文献

[1] 《中国教育信息化·基础教育》.2008年第1期

[2] 《科技信息》.2009年17期 

[3] 《信息技术与远程教育应用能力培训教程》.河北人民出版社.

多路视频同步播放控制的实现 篇12

视频数据和总线数据是试飞测试数据中的两个重要组成部分,其中视频数据以其全面、直观、时效、客观的反映人机交互动作等优点成为试飞工程师给出航空武器装备鉴定/定型试飞结论的重要依据。一般地,视频数据分析处理过程是抽引机载航电系统多路视频信号,使用机载记录设备对其进行分开记录,飞行结束后,通过卸载记录数据对视频进行还原。目前机载视频记录数据共有4路,试飞工程师事后通过视频播放软件对某一路视频数据进行播放,攫起关键时刻和关键信息,再在其他视频或者总线数据中找到对应时刻关心的状态和信息,在需要的时候对视频数据进行视频截取或截图处理,通过对视频数据的分析、处理、判读对系统进行判断分析。

1 视频数据分析处理现状

目前使用的视频数据处理软件一般采用通用视频播放软件如暴风影音、Windows Media Player和某些专用视频播放软件如Moonlight,XXX所专用视频软件等。随着试飞工程师对数据处理精度和多路处理需求的提出,以及对数据处理标准化要求的加强,目前使用的视频数据处理分析方法和软件已经暴露出其局限性[1]:

(1) 通用视频播放软件只能对单个视频数据进行连续播放和暂停,无法按照数据分析的要求进行按帧播放,无法精确时间定位,且无视频截取、截图等功能;

(2) 专用视频播放软件一般是按照专用用户的需求进行定制的,其一般只针对某种专用格式,或者其某些功能是专用,不能满足试飞工程师的数据处理分析需求;

(3) 按照试飞工程师需求定制专业视频播放软件费用高昂,所以一般使用Moonlight等软件的未注册版或者破解版,再使用未注册或破解播放软件进行数据播放和截取时,视频画面会有随机飘动的反盗版标志,影响数据处理的质量;

(4) 不管是通用视频播放软件还是专用视频播放软件都只能对一路视频进行处理,而试飞工程师对视频数据处理分析一般都是对两路以上的视频数据同时进行综合处理分析。

因此,针对目前的视频数据处理现状,按照试飞工程师对视频数据处理的需求,项目组自主研制、开发了多路视频数据处理分析软件,其实现了对视频数据的按帧播放、精确时间定位、视频截取、截图、多路同步等功能。

2 多路视频同步播放控制软件的设计

多路视频同步播放软件的总体结构如图1所示。

2.1 具体实现

该软件采用VC++6.0编程实现,主要特点有:

(1) 绿色免安装。拷贝后不需安装可直接使用,且需要的存储空间小(10 MB),系统资源占用低;

(2) 支持多种播放格式如.MPEG,.AVI,.MOV,M2T,.VOB,.RM,.RMVB等;

(3) 视频数据处理分析软件可同时播放最少一路、最多4路视频;

(4) 多路视频可以选择按时间或者按帧同步,这项功能通过选项卡进行设置;

(5) 可选一路视频作为同步基准,并有最短视频与最长视频两种播放基准模式;

(6) 可进行单步播放和时间点定位;

(7) 可进行视频截取、截图等操作;

(8) “选项”界面可进行软件相应设置[1]。

软件主界面和设置、控制界面如图2所示,主界面划分为4个区域,每个区域控制一路视频,并可单独对该路视频进行文件播放、暂停、停止、拖放播放、截图等功能。若需特别关注某一路视频,直接双击该视频播放区域,即可实现全屏播放当前路视频。

多路视频同步播放控制软件允许选择最少一路、最多4路文件加入播放列表,从功能选键中选中文件播放、暂停、停止、拖动播放、截图等功能。拖动功能可以实现文件的快进、快退、跳跃播放,采用的技术是获取视频的当前位置,然后设置滚动条的位置和解压卡上视频的位置为当前拖动到的位置即可。如图3所示。

记录器记录的视频本身是没有时间数据的,而是通过时码叠加产生了视频时间,因此视频同步采用的是时间戳同步法。该方法有一个公共的时间轴,也是视频同步播放控制的核心。它将多个具有时间关系的媒体流依附于一个时间轴上,因此,去掉或更改一个对象不影响其他对象的同步,即所播放的视频文件不仅仅局限在4路视频同步播放,可同时实现2路及3路视频的同步播放、暂停、停止、拖动、循环及截屏等。

此外,为了方便试飞工程师截取关键时刻视频信息,软件还增加了“逐帧播放”功能(见图4)及时间跳转功能(见图5)。其中时间跳转功能只需知道关键时刻的大致时间,将详细时间输入图5中的文本框,就可直接调整至该时刻,而不需要对每个播放对象的时间轴进行调整。

软件设置界面将与视频相关参数都考虑进来。如:选择同步的标准、播放基准、显示模式、视频保存位置及抓图保存位置及抓图频率等。如图6所示。

2.2 技术创新点

该软件的具体特性如下:

(1) 通用性。即多种视频格式的支持,通过编制解码库及自动识别调用解码库方法[2],实现了对多种视频格式的支持,可实现不同格式视频的同步播放。

(2) 多路视频的播放及同步。通过时间戳同步法,实现了最多4路视频同步播放,极大方便了试飞工程师视频数据的判读。

(3) 单帧播放、精确定位。采用基于时间同步的单帧播放及精确定位方法,可将视频画面精确到帧,同步精度极高,对于关键时刻的数据判读具有极大便利。

(4) 灵活的视频截取和截图。为了对比不同视频文件同一时刻的画面,采用抓取函数实现了对视频和图像画面的实时截取,方便将比对结果存储并汇入技术报告中。

(5) 绿色可靠。将核心第三方函数打包编译为DLL文件,实现了软件绿色免安装,可直接打开运行,使用灵活方便,避免了因试飞专业软件安装审核等繁琐程序。

2.3 软件实现的技术难点

音视频解码:判断视频格式并自动识别视频中是否含有音频数据,然后调用相应解码库对音视频进行解码。目前机载记录的视频数据中,有些视频数据是含有音频数据的,有些是没有音频数据的,因此在判断完毕视频数据之后必须能够自动识别视频中的音频数据,并调用对应的音视频解码库完成解码。

时间轴同步:如果视频长度相同,采取哪种基准同步方式都不会有任何影响。但若是视频长度不等,为了方便用户,特别设置了以最短时间轴为基准和以最长时间为基准两种同步方式。这项设置增加了软件的难度,尤其是以最长时间为基准的同步方式,若开始时间相同则进行同步播放即可。若开始时间不同,则当其中较长时间段的视频开始播放时,较短时间段视频处于等待阶段,当两段时间段相同时才开始进行同步播放。因此为了完成时间轴同步,需进行多重判断才能够最终实现同步控制。

3 结 语

试飞数据分析处理是试飞工程师对航空武器装备给出鉴定/定型试飞结论的依据,科学严谨的数据处理方法和工具为客观评价系统的功能性能提供了技术保障。针对视频数据处理分析的现状,自主开发研制的视频数据处理分析软件,具有界面简洁,功能实用,最重要的是具备多路同步播放等优势,这又为视频数据的处理分析提供了有力的手段;经过多层次、多方面的应用测试以及近年来用户的广泛使用,以其绿色、通用的特点,以及准确可靠的数据处理应用,为科研试飞视频数据处理分析、航电系统故障分析排查、机载测试系统故障分析等均提供了有力的支持,具有很好的社会效益和经济效益。

摘要:目前所采用的视频处理软件不能满足试飞工程师试飞数据分析处理的专用需求,面临现有商业软件所存在的众多局限性,采用解码库和时间戳同步等方法通过VC编程解决了多种视频音频格式解码、多路视频时间精确同步等关键技术。经过试飞工程师实际使用验证表明,该软件满足试飞视频数据分析处理所需的时间同步、精确定位等专用需求,本文详细介绍了该软件的结构和各功能模块,并讨论了软件的具体实现、技术创新点及软件实现的关键技术。

关键词:多路视频,数据处理,同步播放,试飞数据

参考文献

[1]刘晓彬,朱庆祥.视频播放软件界面设计分析与评价[J].决策与信息,2008,21(3):22-25.

[2]求是科技.Visual C++音视频编解码技术及实践[M].北京:人民邮电出版社,2006.

[3]许众威,钱小红.基于DirectShow实现多路视频播放控制[J].盐城工学院学报:自然科学版,2008(3):22-25.

[4]朱孟祥,唐普英,黄自立,等.基于DSP和FPGA的多通道CMOS图像监控系统[J].电子设计工程,2011(14):178-180.

[5]喻武龙,陈伦海,李克勤,等.视频运动目标跟踪系统设计[J].电子设计工程,2011(22):151-153.

上一篇:加工工艺与仿真下一篇:网状纤维