视频播放器研究.docx
- 文档编号:6582201
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:55
- 大小:482.83KB
视频播放器研究.docx
《视频播放器研究.docx》由会员分享,可在线阅读,更多相关《视频播放器研究.docx(55页珍藏版)》请在冰豆网上搜索。
视频播放器研究
二播放器简介
1.1简介
媒体播放工具,这里主要指视频播放,因为要面临庞大的兼容性和纷繁复杂的算法,从架构上看,能脱颖而出的体系屈指可数。
大体来说业界主要有3大架构:
MPC、MPlayer和VLC。
这3大架构及其衍生品占领了90%的市场,凡是用户能看到的免费媒体播放软件,无一不是源自这3大架构。
MPC/HC架构
MPC(MediaPlayerClassic)和它的后续者MPC-HC应该并列而说。
MPC基于DirectShow(DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,9.0之前与DirectX开发包一起发布,之后包含在windowsSDK中。
运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。
它广泛地支持各种媒体格式)
架构,是Windows系统下元祖级别的播放器。
包括KMP之流最早也就是抄来MPC的代码再换个界面。
MPCHC则在MPC的原作者Gabest渐渐退出开发后的继承者,MPCHC有很多创新特性,包括开始融入ffmpeg(FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。
它提供了录制、转换以及流化音视频的完整解决方案。
它包
含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。
)和支持更多DirectX特性和DXVA
MPCyHC
优点:
更直接的支持DXVA,对一些稀奇古怪的Windows平台上的格式可以通过调用第三方的Filter组件等,拥有更好的兼容性
缺点:
有人说DirectShow是Windows中最难掌握的SDK,开发复杂;
DirectShow允许第三方封装的特点也让兼容性和稳定性问题复杂化;第三方
Filter出现异常时非常难以分析处理,更难以复用;
射手播放器的架构主要来自MPC-HC,但更多的融合了FFmpeg的优势,对DirectShowFilter进行了多处改写,大大加强了对ffmpeg的利用,提高了解码稳定性,同时扩展了解码能力和兼容性。
1.2常见多媒体播放器特点比较
目前桌面市场上存在多种媒体播放器,它们各有各的技术特点,采用的体系结构也各不相同。
下面将对几种常见的媒体播放器的特点进行分析和比较,从而借鉴它们的优点。
1.2.1)WindowsMediaPlayer
WindowsMediaPlayer(以下简称WMP是微软公司推出的基于Windows的媒体播放器,它可以播放和组织计算机及Internet上的数字媒体文件。
它支持目前流行的大多数多媒体格式,如asf、wmvwmampeg-1、mpeg-2、wav、avi、midi、vod、au、mp3l^。
目前它的最新版本是WMP10包括WindowsMediaAudio10、WindowsMediaVideo10和MP谕解码器,并采用了WindowsDRM(DigitalRightsManagement,数字版权管理)技术。
1992年微软在Windows3.1当中捆绑了WMP1.0,使Windows3.1成为第一代支持多媒体的Windows系统.用户可以自定媒体数据库收藏媒体文
件。
支持播放列表,支持从CD读取音轨到硬盘。
支持刻录CD,V9以后的
版本甚至支持与便携式音乐设备同步音乐。
整合了的收费以及免费服务,V10更整合了纯商业的在线商店商业服务。
支持换肤。
支持MMSWRTSP的
流媒体。
如果用户播放的音频文件与网站上面的数据校对一致的话,用户可以看到相关的专辑讯息。
WM采用的是封闭式结构,但是各个组件都已经模块化,并且具有单一窗口的多合一界面,可以使用标签来打开各项功能。
从整体上说,它外观华丽,功能强大。
但是它是一个基于DirectShow体系结构的媒体播放器,没有开放源码,用户要想扩展其功能必须使用MicrosoftActiveX控件技术和组件对象模型
(COM)技术利用微软给出的专用SDKBF发,这就决定了它只能适用于Windows系列操作系统,无法让其在Linux上运行,不具备可移植性。
止匕外,由于微软公司在这款软件中集成了大量的附加功能,如广播电台、播放复制CD、寻找
internet视频等,因此它还存在系统资源占用大、响应速度不快的缺点。
最后它是被捆绑在windows操作系统上的。
3.RealPlayer
RealPlayer是RealNetwork公司推出的一款媒体播放器,其最新版本是
RealPlayeUQRealPlayer能够播放最新的RealVideo和RealAudio,通过其内置的浏览器还可以显示网络上使用html和macromediaflash动画文件的内容。
RealPlayer支持大多数多媒体文件格式,如rm、rmvb、avi、mpeg等,而且它还支持jpeg、gif以及png等图像格式,不过不支持quicktime的文件格式。
主要功能包括:
支持播放在各种在线媒体视频,包括Flash,FLV格式或者
MOV格式等等,并且在播放过程中能够录制视频。
同时还加入了在线视频的一键下载功能到浏,览器中、支持IE和Firefox,这样便能够下载YouTube,MSN,GoogleVideo等等在线视频到本地硬盘来离线观看。
而且还加入了DVD/VCD视频刻录的功能。
RealPlayer是网上收听收看实时音频、视频和Flash的最佳工具.让你享受更丰富的多媒体体验,即使你的带宽很窄。
RealPlayer是一个在Internet上通过流技术实现音频和视频的实时传输的在线收听工具软件,使用它不必下载音频/视频内容,只要线路允许,就能完全实现网络在线播放,极为方便地在网上查找和收听、收看自己感兴趣的广播、电视节目。
RealPlayer,这个工具原先是播放小巧玲珑的RM音乐文件的,到现在,已经发展成为最重要的网上音乐和影像的播放工具。
而RealPlayer在不断地优化发展,目前已作为网络广播的工具,播放网络广播网站的实时音乐节目,也可以播放网络电视节目和电影,因此,RealPlayer已经发展成为一个多元化的因特网节目播放工具。
和WMP不同,RealPlayer是跨平台的,目前它可以运行在Windows>
UNIX/Linux、Mac(Macintosh,苹果电脑)系统上。
这主要归功于它使用了RealMedia结构(RMA)来实现了一个可扩展的插件接口。
RealMedia结构
(RMA)基于微软组件对象模型(COM),但它没有采用COM的全部,而只实现COM的一个子集提供跨平台操作,可使用任何编程语言开发符合RMA的插
件。
在Windows平台上,RMA插件是32位动态链接库;在UNIX与
Macintosh平台上是共享库。
RMA提供几个跨平台的服务,所以开发的插件代码不特定针对某一个操作系统。
不过,RealPlayer并不是开放源码的,要想对它进行二次开发必须向RealNetwork公司购买许可证并且使用专用的RealSystem
SDK。
同时,由于RealPlayer的大量功能都是基于网络流媒体的,如CPU占用率调整、缓冲设置、网络环境设置等,作为一款本地播放器就少了些常规功能,比如声道平衡、声音控制等。
4.QuickTimePlayer
QuickTimePlayer是苹果公司在MacOS和Windows平台推出的多媒体播放软件,最新版本是QuickTimePlayer7。
该软件允许你全屏播放视频,通过Internet观看现场直播事件,用30多种标准格式打开视频、静态图片及音频文件,支持MPEG-4视频和AAC音频,并且是播放MOV格式文件的官方软件。
苹果电脑公司所设计的QuickTime架构是强大的、可扩展的、灵活的数字媒体制作平台,作为上市的最新版本,它可以与老版本相兼容。
因此,即使是十
年前以QuickTime1制作的文件在QuickTime7中也可以顺畅的播放。
现在,基于QuickTime的应用程序可以通过MacOSXTiger中新的CoreMediaServices充分利用硬件加速的视频处理性能。
此外,QuickTime7为Macintosh的软件开发人员提供了现代化的程序设计界面QTKit。
它会让程序
师们能够在基于Cocoa的MacOSX应用程序里轻松使用QuickTime
可靠的文件格式:
.mov文件格式让QuickTime有别于其他媒体平台。
具架构好像一个容器”,能够容纳不同类型的媒体,如音频、视频、MacromediaFlash文本、图像和子图。
每一种类型的媒体都被保存为一个独立的轨道”,既易于处理,又能够与以前的版本相兼容。
开发人员通过创建QuickTime组件,能够轻易的利用新的媒体类型或轨道”扩展.mov文件格式。
AppleQuickTime视频文件播放程序,除了播放MP3外,QuickTime还支持MIDI播放。
并且可以收听/收看网络播放,支持HTTP、RTP和RTSP标准。
该软件还支持主要的图像格式,比如:
JPEG、BMP、PICT、PNG和GIF。
该软件的其他特性还有:
支持数字视频文件,包括:
MiniDV、DVCPro、DVCam、AVI、AVR、MPEG-1、OpenDML以及MacromediaFlash等。
5.MPlayer
MPlayer是Linux上的媒体播放器(也能运行在Windows和许多其它Unices±,甚至非x86CPU上),最新版本是MPlayer1.0pre7。
它能使用众多本地的、RealPlayer和Win32DLL编解码器来播放大多数MPEG、AVI、
ASF/WMV、QT/MOV、yuv4mpeg文件。
它还能支持VideoCD,SVCD,DVD,3ivx和DivX格式的电影。
Mplayer的另一个大的特色是广泛的输出设备支持。
它可以在X11,Xv,DGA,OpenGL,SVGAlib,fbdev,AAlib,DirectFB下工作,而且也能使用GGI和SDL和一些低级的硬件相关的驱动模式。
MPlayer
还支持通过硬件MPEG解码卡显示和onscreendisplay(OSD)
MPlayer采用的是完全模块化的结构,具有一个统一的解码器插件接口,开放源码,而且它并不基于DirectShow结构,完全采用C/C++语言编写,所有解码器全部编译到播放器里面。
这样就使它具有了很好的可移植性以及较高的执行效率和较快的响应速度。
不过它的缺点也很明显,那就是界面不够友好,完全基于命令行、基本操作依赖快捷键的模式使得用户很不容易接受,达不到易用的要
求。
为什么MPlayer功能这么强大,结构还这么小巧,却没有在中国流行起来,这大概是因为MPlayer源自于Linux,是一个开源的播放器,国外开发网站只给出了源代码、解码包、皮肤等组件,用户想要安装使用这个播放器必须要经过繁琐的编译过程才能使用,而国内用户绝大部分均被编译这个门槛限制入内。
另外,
它在播放时完全是单线程,易因其他进程抢占CPU而导致响应迟滞。
MPlayerWW编译版是通过国外开发网站提供的源代码等数据编译而来,功能强大、界面简洁、并进行美化处理,省去令人烦恼的编译过程,用户可以直接解压使用,能自定义多种皮肤与关联图标
6.VLCmediaplayer
最初为VideoLANClient,是VideoLAN计划的开放源代码多媒体播放器。
支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影音光盘
及各类流协定。
它也能作为单播或多播的流服务器在IPv4或IPv6的高速网
络连接下使用。
调用FFmpeg计划的解码器与libdvdcss程序库使其有播放多媒体文件及加密DVD影碟的功能。
VideoLAN计划是一个开发多媒体播放程序的计划。
原本针对流影音有两个程序一VideoLANClient(VLC)及VideoLANServer(VLS)一然而大部分的VLS功能都集成进VLC,所以就将程序名称改为VLCmediaplayer。
这个计划原本是巴黎中央理工学院学生的专题计划。
在2001年2月1日以GPL发布后,现在贡献者已经遍及世界。
这个播放软件的三角锥图标是源自于交通三角锥。
目前的图标是2006年高分辨率的CGI,用以取代先前手绘的低分辨率图标。
VLCmediaplayer具有跨平台的特性,可用于Linux、MicrosoftWindows>MacOSX、BeOS、BSD、PocketPC及Solaris。
VLC在Windows和Linux上的操作接口基于Qt4。
在Windows,Linux以及某些平台,VLC提供了一个Mozilla扩展,使得某些网站上附带的QuickTime及WindowsMedia多媒体文件,可以在非微软或苹果电脑的操作系统中,正常显示于Mozilla的浏览器下。
从版本0.8.2开始,VLC亦提供了一个ActiveX的扩展,使用户可以在InternetExplorer下,正常显示某些网站上附带的QuickTime及WindowsMedia多媒体文件。
VLC支持播放某些没有下载完成的视频文件部份内容。
彩蛋
VLC在12月24日会自动把软件ICON设置为一个戴圣诞帽的三角锥。
由此可知现在主流的媒体播放器按其特点大致可以分为两类:
一类界面美观、使用方便,具有专用的插件接口,不开放源码,基于某一特定的体系架构,可以运行在特定的平台上,可移植性不强,扩展性一般,如WindowsMediaPlayer、RealPlayerQuickTimePlayer等;另一类界面易用性差,具有开放式插件接口,开放源码,不基于某一特定的体系架构,可以运行在多种平台上,可移植性、扩展性强,如Mplayer。
最后提一下一些比较常见的播放器,比如腾讯视频播放器,风暴播放器,还
有白噪声播放器,是一种播放随机性[[声音]]的装置…滴声、风声、海浪声,或者和白噪声掺杂在一起。
白噪声播放器也用来缓解耳鸣。
圣经播放器,有很多牧
师讲道、赞美诗等等。
:
:
媒体播放器架构设计
一设计需求
1)支持符合MPEG-1、MPEG-2、MPEG-4标准的多媒体文件,支持扩展名为avi、mp3、wav、mpg、mpeg的文件。
2)具有多媒体文件的打开、删除、显示文件头、显示文件长度、显示播放时间等功能。
3)提供全中文界面,并支持多种字体,并可以进行中英文界面切换。
4)可以选择打开任意位置下的多媒体文件,包括U盘和SD卡。
5)可以查看和编辑MP3文件的ID3标签信息。
6)运行时占用内存较小,响应速度快,可以自动进行音视频同步。
理想的音视频同步方法及实现中的困难
由于音视频同步问题是普遍存在的,MPEG-2标准中给出了一种理想条件
下的音视频同步方法。
下面先简单介绍一下MPEG-2的语法结构及相关术语再分析它提供的音视频同步方法。
MPEG-2的语法是一种分层结构,主要分三层:
传输(Transportstream层、PES(PacketizElementaryStream)®和ES(ElementaryStream)®[32]。
视频、音频数据经过编码、压缩后成为ES流。
然后ES流被进行一种逻辑意义上的打包,打成PES流。
PES进一步打成传输包,形成传输流。
MPEG-2算法的特点是在空域和时域上都进行压缩编码,在三层码流结构中都带有表示时间的信息。
其
中比较重要的是PES中的显示时间标签(PresentationTimeStamp,PTS)和解码时间标签(DecodingTimeStamp,DTS),以及传输层中的节目参考时钟(ProgramClockReferencePCR)。
在MPEG-2中,解码恢复出来的图像(Picture)被称为PPU(PicturePresentationUnit),解码恢复出来的语音被称为APU(AudioPresentationUnit);它们在码流中的相应部分叫PAU(PictureAccessUni环口AAU(AudioAccessUnit)。
一般PPU和APU是不同的,或说不相关的帧周期。
例如,假设一个AUDIO序列每帧有1152个采样,若采样率为44.1kHz,则帧周期为26.1ms;而一个VIDEO序列,如果帧频为29.97Hz,则帧周期为33.76ms可见PPU和APU的时间边界并不一样,采取一定的措施来进行音视频同步是必要的。
在编码器中,有一个共同的系统时钟,MPEG-2的系统流(以传输流为例)中,节目参考时钟PCR是这个系统时钟的采样。
在系统流中,有Video显示时间
标签和Audio显示时间标签,表示Picture显示的时间和相应Audio回放的时问。
显示时间标签也以这个系统时钟为参考,它是工作于90kHz的计数器的
采样值,用33bit表示,可以记录下24h内的任何时钟周期。
节目参考时钟和显示时间标签都被编码到码流中。
相邻的节目参考时钟和显示时间标签间隔一般小于700mso解码端可以按照节目参考时钟,通过一个锁相环恢复与编码端一致的本地系统时钟。
显示时间标签在MPEG-2中是以一个理想的解码器
(Decoder)——系统目标解码器(STD)为基础定出的。
STD是一个真实解码器的数学模型,它假设了通道Buffer永不上溢、下溢(对下溢有些特例);对码流的处理是瞬时的、理想的。
因此,如果节目参考时钟和显示时间标签在编码端被正确编码,被无错地存储和传送,在解码端被进行正确的解码,而解码端又以节目参考时钟为基础恢复出与编码端一致的系统时钟,并且在正确的显示时间标签时间显示图像、回放声音,则视频和音频达到同步。
可以看出,调整解码器本地系统时钟是实现媒体同步的基础,若没有调整好则影响多媒体数据的同步播放。
但是一个实际解码器要比理想的解码器复杂得多,所以在具体实现中音视频同步会遇到以下困难:
1)被解码的码流不能瞬时地从通道Buffer中读出来;解码过程要花时间;显示和回放要花时间。
2)根据解码硬件系统的不同,必须采用不同的同步措施。
3)显示时间标签和相应的PU在码流中分别处于不同的层中,而系统头信息和基本流的处理在不同的过程中,这在实现中存在着如何找到相配对的显示时间标签和PU的问题。
4)当解码工作于从模式时,视频同步信号或音频采样频率由外部供给,这时PU的输出实际上并不由解码器主动控制。
5)码流可能出错。
节目参考时钟和显示时间标签在传送中都可能误码、出错。
通常实现音视频同步的方式有两种:
一种是以视频为基准,通过重复或跳音频帧的方法来调整音视频同步;另一种则反之,以音频为基准,通过对视频帧跳帧与重复显示来完成[42]0考虑到嵌入式系统的资源非常宝贵,对视频进行跳帧往往不能很快完成,而一般处理音频帧比处理视频帧速度快,因此这里采用第一种方式。
数据流首先通过分离器分解为视频数据流和音频数据流,然后经过对应的解码器,同时由本地系统时钟来进行时间戳控制;获得准确显示或回放时间以后进行时间戳比较;若同步则直接输出,不同步则进行音频跳帧或等待,直到同步后输出。
F撼
心窗反情
该方法的同步精度与音频帧的时间长度关系最大,如果不考虑视频序列的播放情况以及其他因素,那么由于音频帧的长度一般不超过100ms,一般情况下
同步精度可以达到100ms左右。
系统数据流程:
首先输入模块从数据源(多媒体文件)读入数据,此时它将读入文件头,做一些基本的处理,如读出文件长度,获取此文件的编码类型、比特率,判断能否播放等;然后插件接口模块会调用分离器插件将多媒体数据切分为视频数据流和音频数据流;再经过视频FIFO和音频FIFO,排序处理;最后送入视、音频解码器调用相应的解码器进行解码,对于音频数据就会进行重采样,对于视频数据就会读取相应的帧,逐帧解码;之后经过采样的音频数据和经过渲染覆盖的视频数据先进行音视频同步,再分别通过视、音频输出模块输出。
这其中,数据的读入、分离、解码、输出都是通过Qt提供的类库以多线程同时进行的,在解码得同时程序也在不断将数据读入缓冲区并排序等待处理,以提高效率。
二功能模块的实现
根据上一节的设计方案,整个系统分为五个模块:
输入模块、输出模块、插件接口模块、解码库模块、用户界面模块。
下面依次介绍各个模块的具体实现。
2.21输入模块
输入模块的主要功能是将用户指定的多媒体文件读入。
由于不同格式的多媒体文件需要调用不同的解码器才能正常打开,因此考虑到程序的模块化将实际的文件打开工作交给插件接口模块调用相应的解码器进行,输入模块只对文件进行一些基本的处理并对文件内容进行缓存,然后为插件接口模块输送原始数据流。
输入模块的数据处理流程如图
输入模块数据处理流程
用户首先通过图形用户界面选定待播放文件发出打开指令,这将会使输入模
块接收到一个信号并通过用户界面传回的信息获得待播放文件的文件路径和文
件名。
接下来输入模块会检查文件路径是否合法、文件是否为空,之后会向插件
接口模块发出信号,通知插件接口模块查找可用的解码器,为文件解码做好准备。
下一步就是进行调用播放初始化函数init(),其具体过程下面会详细介绍,最后
就是将工作移交给插件接口模块,让它调用对应文件格式的解码器的open()函
数。
播放初始化函数主要是为播放做一些必要的准备工作,其执行流程可以参见
图
排放初始化开始
读取文件名*
H顿计数
*总帧装.幅率.文件性度
设置标志・
isSeekable
―►(初始化结束
1)判断当前是否有文件在播放,如果有则立即调用stop()函数。
stop()函数
会停止当前文件的播放并关闭已打开的解码器,同时把控制音频缓冲区的互斥
信号量audioMutex加锁,清空音频缓冲区、关闭对音频设备的引用,再把控制音频缓冲区的互斥信号量解锁。
之所以要使用互斥信号量是因为输入输出都是
多线程同时进行,通过对互斥信号量加锁可以避免发生资源冲突。
2)把控制音频缓冲区的互斥信号量audioMutex加锁,读入文件名,把当
前帧计数current_frame置为0。
3)判断是否存在可用的解码器,若不存在则把音频互斥信号量audioMutex解锁,返回布尔值FALSE,结束播放初始化。
4)测试是否可以用相应解码器的open()函数打开文件,若不能则把音频互
斥信号量audioMutex解锁后返回FALSE。
5)获取多媒体文件的音频通道数和视频通道数。
若有音频通道则通过解
码器读取音频数据流的采样率、频率并根据这些信息分配音频输出管道和音频
输出缓冲区;若有视频通道则通过解码器获取视频数据流的总帧数、帧率、文件
长度。
6)通过执行解码器的音频采样设置函数audioSetSample()口视频帧设置函数videoSetFrame(球判断待播放文件是否可以从任意位置开始播放,将结果保存到布尔量isSeekable中。
7)把音频互斥信号量audioMutex解锁,返回真,结束播放初始化工作。
2.22输由模块
输出模块的主要功能是将通过解码器解码之后的音频、视频数据送到输出设
备(如LCD显示屏、扬声器)输出。
根据输出内容的不同可以将输出模块划分为音频输出和视频输出两个子部分。
这两个部分基本上是相互独立输出的,通过
插件接口模块的同步控制让它们在输出时保持同步。
1)音频输出
音频输出的主要步骤如下:
A.调用deviceReady()iS数判断音频输出设备是否已经就绪。
B.调用音频输出设备打开函数open()。
此函数的定义如下:
Boolopen(unsignedintf,unsignedintchs,unsignedintbps);其中f表示频率,chs表示通道数,bps表示每个采样需要写入的比特数,如果打开成功返回真,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 视频 播放 研究