基于C++的视频播放器Word文件下载.docx
- 文档编号:16364167
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:21
- 大小:115.99KB
基于C++的视频播放器Word文件下载.docx
《基于C++的视频播放器Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于C++的视频播放器Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
FFmpeg;
全格式
ThevideoplayerbasedonC++
ABSTRACT
Withtheextensiveapplicationofcomputer,therapiddevelopmentofInternet,themultimediatechnologyisalsodevelopingrapidly.AvarietyofaudioandvideoresourcescanbeseeneverywhereontheInternet,inpeople'
sdailylife,almostindispensableplayer,thenallkindsofplayerdevelopment.Now,thevideoplayersoftwareonthemarketthatdonotgroup,suchas:
Stormvideo,PPS,popular.
Thispaperpresentsthedesignandimplementationprocessofasimplevideoplayer,understandtheplayertoachievethefunction,mastertherelatedtechnicalplayerdevelopment,atthesametime,thesoftwareengineeringtheoryknowledge,understandingofsoftwaredevelopmentmethodologyandsteps.ThesoftwareusesFFmpegdecoderlibraryandsimpledirectcontrollayerandmediadevelopment.Thewholesystemfromthepointofviewofsimple,practical,functionalrequirementsofcomprehensive,reflectsthestability,thevideoplayerdevelopment,compatibility.Thisdesignisoneofthebiggestfeatureistheplayerbasicsupportallformatsofaudioandvideo,canachievesomelessofaformat.
Theplayercansupportbroadcast:
1.Allmultimediacontainerformat
2.Allmultimediacontainerformat
3.Allaudiocodingformat
KEYWORDS:
Linux;
C++;
FFmpeg;
Fullformat
目录
引言1
1简介2
1.1播放器举例简介2
1.1.1暴风影音2
1.1.2风行影音3
1.2几种常见编码格式简介4
2软件开发平台和开发工具介绍5
2.1软件开发平台5
2.2C++语言6
2.3ffmpeg6
2.3.1ffmpeg简介6
2.3.2ffmpeg媒体文件处理7
2.3.3ffmpeg文件解析库和编解码库7
3系统总体设计7
3.1系统的数据流图设计7
3.2系统的第二层数据流图的设计8
3.2.1数据提取层8
3.2.2数据预处理层8
3.2.3解码层8
3.3系统的第三层数据流图的设计9
4系统详细设计和实现9
4.1ffmpeg库的初始化9
4.2视频文件的打开10
4.3视频文件格式的解析模块10
4.3.1文件格式解析10
4.3.2文件格式解析器的主要工作11
4.3.3文件格式解析器的实现11
4.4视频解码模块14
4.4.1视频编码格式简介14
4.4.2视频编码定义14
4.4.3视频编码原理15
4.5音频解码模块16
4.5.1什么是采样率和采样大小17
4.5.2什么是有损和无损17
4.5.3为什么要使用音频压缩技术17
4.5.4频率与采样率的关系18
4.5.5流特征18
5系统的运行与测试19
5.1软件测试19
5.2测试评价20
参考文献21
引言
C++语言是一种优秀的面向对象程序设计语言,,它在C语言的基础上发展而来,但它比C语言更容易为人们学习和掌握。
C++以其独特的语言机制在计算机科学的各个领域中得到了广泛的应用。
面向对象的设计思想是在原来结构化程序设计方法基础上的一个质的飞跃,C++完美地体现了面向对象的各种特性。
随着多媒体的不断发展,多媒体格式极不统一,那么支持各种不同格式的多媒体播放器则成为一种需求。
大学的课程里面开设了软件工程这一门课程,通过学习,我对程序设计等理论知识有了较深刻的认识,同时也掌握了一定的软件开发理论,借助这次毕业设计,把这些理论知识付诸实践。
设计的这个视频播放器简单方便、易操作,能够播放常见的音频视频格式,满足一般用户听歌看电影的需求。
但是我自己能力有限,缺少开发经验,此次设计肯定存在许多不足之处,随着我知识的积累和经验的增加,我将会逐步对它完善。
1简介
1.1播放器举例简介
本小节举例介绍下列比较常见的播放器,比如国产暴风影音、风行影音等。
比较分析它们的功能,及特有的解码功能等;
另外再介绍下几种常见的编码格式以及它们的特点。
1.1.1暴风影音
暴风影音是暴风网际公司推出的一款视频播放器,该播放器兼容大多数的视频和音频格式。
从2003年开始,5年来,暴风的工程师分析了数以十万计的视频文件,掌握了超过500种视频格式的支持方案。
到2009年1月,暴风影音每天使用用户超过2200万,暴风影音成功的帮助了超过1亿5000万的中国互联网用户轻松的观看视频。
来自艾瑞的数据显示:
截止2009年1月,暴风影音每天为互联网用户播放超过1.5亿个/次视频文件;
每天,有2200万人点击蓝色的胶片图标,打开暴风影音这款软件;
每天,通过暴风影音播放的视频文件占中国所有互联网视频播放量的50%。
暴风影音已经成为中国最大的互联网视频播放平台。
2008年7月,全新的暴风影音2008第一次涵盖了互联网用户观看视频的所有服务形式,包括:
本地播放、在线直播、在线点播、高清播放等;
软件特色:
通过自动侦测用户的电脑硬件配置;
自动匹配相应的解码器、渲染链;
自动调整对硬件的支持。
它提供和升级了系统对常见绝大多数影音文件和流的支持,包括:
RealMedia、QuickTime、MPEG2、MPEG4(ASP/AVC)、VP3/6/7、Indeo、FLV等流行视频格式;
AC3/DTS/LPCM/AAC/OGG/MPC/APE/FLAC/TTA/WV等流行音频格式;
3GP/Matroska/MP4/OGM/PMP/XVD等媒体封装及字幕支持等。
暴风影音采用NSIS封装,为标准的Windows安装程序,特点是单文件多语种(目前为简体中文+英文),具有稳定灵活的安装、卸载、维护和修复功能,并对集成的解码器组合进行了尽可能的优化和兼容性调整,适合普通的大多数以多媒体欣赏或简单制作为主要使用需求的用户。
在兼容问题上,暴风影音和一些软件部相容,但问题不大,可以解决,但是要用户自己解决。
比如安装暴风影音后,丽台电视卡无法使用,解决也很简单,下载安装该电视卡全套的最新版本驱动和电视播放软件即可(注意仅仅驱动是不行的,一定要包括播放软件);
播放AVI的时候画面出错或CPU占有率奇高——解决方案:
通常是解码器兼容问题;
等等,虽然有点麻烦,但可以解决。
从以上简单的介绍可以看出,暴风影音整体还是个很强大,很好用的播放器。
单个人看来,它仍然有一些问题。
暴风影音截止到现在版本已经升级很多次了,几乎每次升级都添加了新功能,优化了某些功能,修正个别bug,到现在暴风能播放几百种格式的媒体文件,功能庞大。
这些看似很好,但是对于一般用户来说看电影听音乐看网上视频能使用几种格式的文件,甚至有部分用户不能上网,对于这些用户来说绝大部分的功能是白费了,浪费资源而已。
1.1.2风行影音
功能特色:
独创双播放内核,更快速、更清晰、更流畅,国内首家独创真正双播放内核影音播放器,聚合MPlayer和MPC强大优势功能,实现快速解码,挑战最快播放极限,播放影片更快速、更清晰、更流畅;
全面支持高清影片播放(无需安装第三方软件),从2.1版本起,全面支持高清影片播放,且无需另外安装第三方软件,全面支持HD-DVD/BD-DVD、VC-1、EAC3、EVO、TS、TP、MKV等高清格式影片;
独创高清智能连接技术、VC-1智能桥接技术、启用显卡硬解功能,充分发挥显卡硬解MPEG2,让高清播放更流畅;
播放206种影音格式;
多分层过滤解码,全面提升影片兼容播放,在双播放内核的基础上采用多分层过滤解码,保证不同格式不同编码的影片都能找到对应的分离器和解码器并顺畅播放,大大提升了影片播放的兼容性;
智能连续剧播放,智能连续剧识别,无需多次选择播放连续剧影片,自动连续剧播放,让您不间断欣赏影片更顺畅、更舒心;
跳过连续剧片头/片尾,在播放连续剧影片时,可以通过按F9/F10来设置跳过连续剧的片头/片尾,让剧情播放无缝连接;
还可以变看边下载,很方便用户等等。
从上述功能(并不完全,只是介绍一下特色功能)可以看出,风行影音也是个很不错的播放器,特别是其在双播放内核、高清影音上别具特色。
但是对于部分在网上看视频的用户来说有一点缺陷,它不支持在线播放。
1.2几种常见编码格式简介
MP3格式:
MP3具有不错的压缩比,使用LAME编码的中高码率的mp3,听感上已经非常接近源WAV文件。
使用合适的参数,LAME编码的MP3很适合于音乐欣赏。
由于MP3推出年代已久,加之不错的音质及压缩比,不少游戏也使用mp3作事件音效和背景音乐。
几乎所有著名的音频编辑软件也提供了对MP3的支持,可以将mp3像wav一样使用,但由于mp3编码是有损的,因此多次编辑后,音质会急剧下降,mp3并不适合保存素材,但作为作品的demo确实相当优秀的。
mp3长远的历史和不错的音质,使之成为应用最广的有损编码之一,网络上可以找到大量的mp3资源,mp3player日渐成为一种时尚。
不少VCDPlayer、DVDPlayer甚至手机都可以播放mp3,mp3是被支持的最好的编码之一。
MP3也并非完美,在较低码率下表现不好。
MP3也具有流媒体的基本特征,可以做到在线播放。
其音质好,压缩比比较高,被大量软件和硬件支持,应用广泛。
适用于比较高要求的音乐欣赏。
WMV格式:
一种独立于编码方式的在Internet上实时传播多媒体的技术标准,Microsoft公司希望用其取代QuickTime之类的技术标准以及WAV、AVI之类的文件扩展名。
WMV的主要优点在于:
可扩充的媒体类型、本地或网络回放、可伸缩的媒体类型、流的优先级化、多语言支持、扩展性等。
WMA格式:
WMA的全称是WindowsMediaAudio,是微软力推的一种音频格式。
WMA格式是以减少数据流量但保持音质的方法来达到更高的压缩率目的,其压缩率一般可以达到1:
18,生成的文件大小只有相应MP3文件的一半。
这对只装配32M的机型来说是相当重要的,支持了WMA和RA格式,意味着32M的空间在无形中扩大了2倍。
此外,WMA还可以通过DRM(DigitalRightsManagement)方案加入防止拷贝,或者加入限制播放时间和播放次数,甚至是播放机器的限制,可有力地防止盗版。
RMVB格式:
这是一种由RM视频格式升级延伸出的新视频格式,它的先进之处在于RMVB视频格式打破了原先RM格式那种平均压缩采样的方式,在保证平均压缩比的基础上合理利用比特率资源,就是说静止和动作场面少的画面场景采用较低的编码速率,这样可以留出更多的带宽空间,而这些带宽会在出现快速运动的画面场景时被利用。
这样在保证了静止画面质量的前提下,大幅地提高了运动图像的画面质量,从而图像质量和文件大小之间就达到了微妙的平衡。
RM格式:
Networks公司所制定的音频视频压缩规范称之为RealMedia,用户可以使用RealPlayer或RealOnePlayer对符合RealMedia技术规范的网络音频/视频资源进行实况转播,并且RealMedia还可以根据不同的网络传输速率制定出不同的压缩比率,从而实现在低速率的网络上进行影像数据实时传送和播放。
这种格式的另一个特点是用户使用RealPlayer或RealOnePlayer播放器可以在不下载音频/视频内容的条件下实现在线播放。
MPEG格式:
它的英文全称为Moving
Picture
Expert
Group,即运动图像专家组格式,家里常看的VCD、SVCD、DVD就是这种格式。
MPEG文件格式是运动图像压缩算法的国际标准,它采用了有损压缩方法减少运动图像中的冗余信息,说的更加明白一点就是MPEG的压缩方法依据是相邻两幅画面绝大多数是相同的,把后续图像中和前面图像有冗余的部分去除,从而达到压缩的目的(其最大压缩比可达到200:
1)。
目前MPEG格式有三个压缩标准,分别是MPEG-1、MPEG-2、和MPEG-4。
AVI格式:
音频视频交错(AudioVideoInterleaved)的英文缩写。
AVI这个由微软公司发表的视频格式在视频领域已经存在好几个年头了。
AVI格式调用方便、图像质量好,但缺点就是文件体积过于庞大,压缩标准不统一。
2软件开发平台和开发工具介绍
2.1软件开发平台
Linux流行是因为它具有许多诱人之处。
(1)源代码几乎全部是开放的。
Linux是一款免费的操作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。
这是其他的操作系统所做不到的。
正是由于这一点,来自全世界的无数程序员参与了Linux的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行改变。
这让Linux吸收了无数程序员的精华,不断壮大。
(2)可以运行在许多硬件平台上。
Linux可以运行在多种硬件平台上,如具有x86、680x0、SPARC、Alpha等处理器的平台。
此外Linux还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。
2001年1月份发布的Linux2.4版内核已经能够完全支持Intel64位芯片架构。
同时Linux也支持多处理器技术。
多个处理器同时工作,使系统性能大大提高。
(3)多用户、多任务
Linux支持多用户,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。
多任务则是现在电脑最主要的一个特点,Linux可以使多个程序同时并独立地运行。
2.2C++语言
C++语言是一种优秀的面向对象程序设计语言,它在C语言的基础上发展而来,但它比C语言更容易为人们学习和掌握。
对于要解决实际问题的程序员而言,C++使程序设计变得更有乐趣。
C++是一门通用目的的程序设计语言,它是一个更好的C、支持数据抽象、支持面向对象程序设计及支持范型程序设计。
在程序设计这方面,C++支持良好的设计方案、提供用于程序组织的语言设施、能将独立开发的部件组合成完整的软件。
2.3ffmpeg
2.3.1ffmpeg简介
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。
它包括了目前领先的音/视频编码库libavcodec。
FFmpeg是在Linux下开发出来的,但它可以在包括Windows在内的大多数操作系统中编译。
这个项目是由FabriceBellard发起的,现在由MichaelNiedermayer主持。
可以轻易地实现多种视频格式之间的相互转换,例如可以将摄录下的视频avi等转成现在视频网站所采用的flv格式。
ffmpeg包括一组软件,ffmpeg用于对媒体文件进行处理,ffserver是一个http的流媒体服务器,ffplay是一个基于SDL的简单播放器。
两个库文件libavcodec和libavformat。
ffmpeg项目由以下几部分组成:
●ffmpeg视频文件转换命令行工具,也支持经过实时电视卡抓取和编码成视频文件。
●ffserver基于HTTP(RTSP正在开发中)用于实时广播的多媒体服务器,也支持时间平移
●ffplay用SDL和FFmpeg库开发的一个简单的媒体播放器
●libavcodec一个包含了所有FFmpeg音视频编解码器的库.为了保证最优性能和高可复用性,大多数编解码器从头开发的.
●libavformat一个包含了所有的普通音视格式的解析器和产生器的库。
2.3.2ffmpeg媒体文件处理
ffmpeg是基于linux开发的,但同时也支持在linux,windows,wince,android等操作系统下的编译及库函数调用,从而播放器视频文件的底层处理。
在linux系统下,ffmpeg支持直接的命令行操作,实现没有包装的直接播放,解析,解码或者转换,剪切,合并,分离视频和音频。
基本用法如下:
ffmpeg-iINPUTfile[OPTIONS]OUTPUTfile
由于Linux把设备视为文件,因此-i选项后可以跟设备名。
比如DV,视频卡,光驱或者其它的各类设备。
如果没有输入文件,那么视音频捕捉就会起作用。
作为通用的规则,选项一般用于下一个特定的文件。
如果你给–b64选项,改选会设置下一个视频速率。
对于原始输入文件,格式选项可能是需要的。
缺省情况下,ffmpeg试图尽可能的无损转换,采用与输入同样的音频视频参数来输出。
2.3.3ffmpeg文件解析库和编解码库
ffmpeg作为目前领先的视频解析、解码和编码的开源程序,其在视频解析、解码和编码方面有着很大的影响。
最重要的是ffmpeg编译成动态库或者静态库的时候都提供了有着强大功能和简易使用的接口,同时ffmpeg程序支持在linux和windows等很多操作系统下的编译。
这两个特性就使得目前很多支持大多主流格式的播放器都是调用ffmpeg库进行解析和解码,如Linux下的mplayer和windows下的暴风影音和Gomplayer等主流播放器。
这里也将调用ffmpeg这个强大的视频解析和解码库实现最底层的视频格式解析和解码,从而能够实现目前主流视频格式的正常播放。
3系统总体设计
3.1系统的数据流图设计
系统的顶层数据通过用户输入文件名,然后经过系统分析,显示该多媒体内容,如图3-1所示。
图3-1顶层数据流图
3.2系统的第二层数据流图的设计
图3-2第二层数据流图
3.2.1数据提取层
该层完成主要功能为从本地文件获取媒体数据,将媒体数据存入缓冲区,按照缓冲策略将数据包发送给数据预处理层,该层有两个线程,两个线程分别为接受音频和视频RTP数据的线程。
3.2.2数据预处理层
本层对本地文件的预处理完全依赖与FFmpeg提供的功能文件解封装功能,而媒体文件的预处理需将一个或多个RTP数据包整合在一起。
3.2.3解码层
解码层主要应用FFmpeg库作为播放器的解码模块,如图3-2该部分代码支持包括avi、3gp、MPEG-4等90多种解码格式及文件格式,并且经过修剪优化后的FFmpeg代码效率和效能都得到了很大的提高。
3.3系统的第三层数据流图的设计
系统的第三层数据流图主要实现两个模块,FFmpeg多媒体文件解析库和FFmpeg音视频解码库。
如图3-3所示,播放器打开视频文件,将视频文件的数据流输入parser,parser解析视频文件的文件头,再根据数据块的id判定该数据块时视频还是音频数据。
根据音视频数据的判定,将解析后的纯数据输入到相应的视频或者音频解码器。
如果是视频数据,输入的视频压缩数据经过视频解码器解码后形成原始的视频数据,此时调用SDL库将视频画面在屏幕上显示出来;
如果是音频数据,输入的音频压缩数据,经过音频解码器解码后形成原始的未压缩的音频数据,此时调用底层的音频驱动就可以将音频数据产生的声音通过speaker播放出来。
这里的parser,videodecoder和audiodecoder将调用ffmpeg库进行解析和解码。
图3-3第三层数据流图
4系统详细设计和实现
4.1ffmpeg库的初始化
整个视频文件格式的解析以及视频解码和音频解码部分都会调用ffmpeg库的的接口函数。
在调用接口函数之前需要先初始化所有将要使用到的解析器,和各视频解码器以及音频解码器,注册所有的文件格式和编解码器的库。
#include<
avformat.h>
//包含ffmpeg所有文件格式的解析函数
avcodec.h>
//包含ffmpeg所有视频及音频编码格式的解码函数
av_register_all();
//注册所有的文件格式解析器和视频音频解码器
ffmpeg库中提供了每一种文件格式和编解码器的初始化接口,但是由于这个播放器需要实现全格式视频的解析和解码,所以需要初始化所有的文件格式解析器和解码器。
为此,使用ffmpeg提供的一个av_register_all()函数来初始化所有的文件格式解析器和解码器。
4.2视频文件的打开
第一步是通过命令行参数的形式,向播放器中传入文件名,并读入文件头得部分信息。
AVFormatContext*pFormatCtx;
//存放视频文件的所有信息
//Openvideofile
if(av_open_input_file(&
pFormatCtx,argv[1],NULL,0,NULL)!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 C+ 视频 播放
![提示](https://static.bdocx.com/images/bang_tan.gif)