当前位置:文档之家› 《基于Android平台的音视频流媒体播放器》

《基于Android平台的音视频流媒体播放器》

《基于Android平台的音视频流媒体播放器》
《基于Android平台的音视频流媒体播放器》

目录

1. 绪论 (2)

1.1. 提出问题 (2)

1.2. 研究现状 (2)

1.3. 研究思路与方法 (4)

2. Android操作系统整体结构分析 (6)

2.1. Android系统简介 (6)

2.2. Android整体结构 (7)

2.2.1. Android 架构 (7)

2.2.2. 特征 (9)

2.3. Android 应用组件 (9)

2.3.1. 活动(Activity) (10)

2.3.2. 服务(Services) (11)

2.3.3. 广播接收者(Broadcast receivers) (12)

2.3.4. 内容提供者(Content providers) (12)

2.4. Android NDK工具 (13)

3. FFmpeg流媒体平台介绍与研究 (14)

3.1. FFmpeg简介 (14)

3.2. FFmpeg 的编译与运行 (14)

4. 流媒体播放器应用分析 (16)

4.1. 系统功能需求分析 (16)

4.2. 系统整体结构需求分析 (17)

4.3. 系统业务流程分析 (18)

4.3.1. 媒体播放模块业务流程 (18)

4.3.2. 媒体文件管理模块业务流程 (19)

4.3.3. 系统设置模块业务流程 (21)

5. 流媒体播放器应用设计 (22)

5.1. 系统设计模型 (22)

5.2. 系统UI设计 (23)

5.2.1. 媒体播放模块设计 (23)

5.2.2. 媒体文件管理模块设计 (25)

5.2.3. 系统设置模块设计 (29)

5.3. 系统数据库设计 (31)

5.3.1. SQLite简介 (31)

5.3.2. 播放器库表说明 (31)

6. Android平台的流媒体播放器应用实现 (33)

6.1. Android 应用程序开发 (33)

6.1.1. Android 开发环境 (33)

6.1.2. Android 应用开发特点 (34)

6.2. FFmpeg移植 (36)

6.3. FFmpeg音视频解码 (39)

6.4. 流媒体播放功能的开发与实现 (41)

总结 (46)

致谢 ..................................................... 错误!未定义书签。参考文献 .. (47)

基于Android平台的音视频流媒体播放器

摘要

伴随着多媒体技术与通信技术的不断崛起,结合网络、移动终端、多媒体技术三者为一体的视频监控技术有了迅猛发展,越来越多的多媒体客户端利用移动网络实现流媒体服务。在这一背景下,针对移动网络和移动终端的特点,提出移动流媒体客户端的解决方案很有现实意义。

本论文试从理论与实践两方面深入探讨基于Android操作系统的移动流媒体播放器的研究与设计。首先阐述了Android系统整体的框架结构,分析了Android主要四大应用组件的概念及其应用,剖析了Android NDK对C/C++的编译;其次对开源流媒体框架FFMPEG进行了深入的描述,阐述了其对于在windows下的编译和运行,剖析了FFMPEG对于android平台的移植,使得播放器在流媒体文件的解码上有了更大的扩展;最后根据已分析的需求开始进行播放器的设计、开发和实现。在播放器开发过程中利用Android多媒体框架OpenCore和移植到Android平台上的FFPMEG来实现对音视频流媒体文件的解码以及实现音视频同步机制。

关键词:安卓;FFMPEG;流媒体;媒体播放器;移动通信

1.绪论

1.1.提出问题

伴随着多媒体技术与通信技术的不断崛起,结合网络、移动终端、多媒体技术三者为一体的视频监控技术有了迅猛发展,越来越多的多媒体客户端利用移动网络实现流媒体服务。在这个拥有庞大用户群的时代,流媒体服务有着巨大的市场发展潜力。在这一背景下,基于移动终端与移动网络的特点,提出实现移动流媒体客户端的方案具有十分现实的意义。

在手机增值业务市场,彩信、彩e、短信等虽然有了交互、24小时不间断等不同于传统媒体的特点,但它们显示的内容主要以静态的文字、图像为主,相对影响其对于媒体作用的发挥。随着用户对需求的不断提升,在多媒体中需要更好地融合文字、声音和图像,以弥补短信中单调、缺乏色彩的不足,真正的让用户“振聋发聩”,感受一个逼真形象、有声有色的美丽世界。

正由于有着这种极大的用户需求,从而加快了流媒体技术的实现。它的最大特点之一就是可以在播放器中边下载边播放,无需下载整个媒体文件,实现了观看电视、电影或在网上点播的梦想。现在,人们在相对较好的网络环境下就能够在线观赏到高品质的、连续的音频和视频电视节目。在大互联网的时代下,流媒体的产生是必然性的,并且会给我们生活和工作带来巨大的影响。

本论文结合FFmpeg开源代码中解码流程,提出了移动终端流媒体播放器基于分层体系架构的设计方案。该设计的特点是在底层屏蔽不同类型文件解码时对媒体流处理的差异,最终在Android平台上实现该播放器。

1.2.研究现状

由于互联网的迅猛发展,流媒体技术在其基础上的进展也是日新月异。流媒体的边播放边下载的特点,不仅不再让用户烦恼在漫长下载的等待中,并且明显降低了多媒体系统中的存储。它多被应用在互联网的信息服务,并成功为各项应用进行多媒体的信息传输。

国内外学者与专家通过对流式传输技术、编解码技术和音视频网络传输协议等技术的不断研究和实践,在诸多方面上都取得了显著的成就。1996年,IETF制定了网络控制和网络传输协议,其中,包括实时控制协议、实时传输协议族和实时传输控制协议,

于此同时,也制定了流式传输技术 [1]。随着流媒体对网络控制和传输的要求越来越高,IETF的专家组也不断地研究并且完善该协议。到了2003年,IETF发布新版本,新版本中更好地适应了流媒体在网络传输中的更高要求。全球电信标准化组织移动网络流媒体服务框架,其中定义了端到端的分组交换流媒体业务Packet Switched Streaming Service 的规范,即PSS。它属于应用层服务,它的主要任务是负责移动流媒体服务端和客户端间的通信 [2]。根据PSS协议栈的规定,实时流协议的基本任务是建立连续的时间同步流,实现流媒体的实时控制和点播 [3]。会话描述协议初始化了流媒体参数,会话配置文件包括媒体文件列表、媒体文件服务端的所在地址以及媒体文件编码信息,播放器中的设置通过SDP文件实现。

早期VCD的每帧画面是320*240的像素,也就是76800个像素,每秒显示25帧,若每像素用16位来表示,每秒数据量将会有30兆。即使不考虑音频信号,存储半小时的节目也需要将近6.9GB的空间,传输一路数字信息号的带宽就需要超过30Mbps[4]。因此,在这种情况下明显满足不了现实需求,使得研究音视频解压技术和移动通信技术迫在眉睫,让视频通信更加流畅并现实生活中得到更广泛应用。流媒体视频传输采用高质量媒体编解码、高压缩比和高效传输速率移动通信技术,可极大提高传输速率和缩减媒体容量。短短几年,国际上已成功研究出像P-VOP、I-VOP和ROI区分等算法,而且定制了多种视频媒体编解码标准在对于不同应用领域中。如MPEG-1、MPEG-2、H.261/H.263和MPEG-4[5] [6]。MPEG-4使得流媒体更具有交互性和灵活性,其中的H.264编码标准,它是ISO/IEC的MPEG和ITU-T的VCEG所结合的一个全新高压缩数字视频编解码标准,它符合ITU-T的H.264标准,也是ISO/IECR的MPEG-4的一部分[7]。

H.264与其他编解码相比较更多突出:具有更高的压缩比率与更好的移动网络适应性[8]。当前,ISO/IEC的MPEG和ITU-T的VCEG联合视频组正在研究高效的视频编解码标准HEVC,让视频传输的质量与数据压缩比率有更高层次的提高,它被称为H.265,计划在2013年完成。只有不断研究新的视频编码标准,未来人们对于流媒体技术或许将有着更高的要求,人们需要不断研发与实现出更新的编解码标准才能满足社会的发展需求[9][10]。

当今国际上主流的流媒体解决方案有几种,分别是Realsystem、QuickTime、Flash Media System和Windows Media System。Realsystem是由RealNetworks公司研发,在基于SMIL技术并且结合自身的RealText与RealPix技术使其拥有媒体控制能力和交互能力,SureStream自适应流技术可自动适应不同带宽的流传输播放;QuickTime是由美

国苹果公司研发的视频标准,它采用Sorenson Video编解码视频和独有的Qdesign Music 编解码音频技术。Flash Media由Adobe公司制定的解决方案,它被广泛释放在当前互联网平台中,它的重要特点就是能够跨媒体、跨平台的传播。国内外较流行的视频网都使用Flash Media,如Youtobe、土豆网等。Windows Media是由微软所研发和制定,它基于Win操作系统,并且是免费提供服务的流媒体平台,微软为开发者提供相应的SDK 给与使用。

国内外在基于Android操作系统上的流媒体播放器不在少数,但或多或少都存在一些问题与不足:在国内,第一个基于Android操作系统上实现在线视频播放的播放器软件Dopool手机TV,在2G网络GPRS和EDGE的环境下进行播放测试,结果出现声音播放不连续、内存占用率大及画面不间断的停止;国外的流媒体播放器代表性的是开源项目VLC播放器,但进行播放时常也不大稳定;youtube视频网站的youtobe Mobile,它使用了vorbis和VP8的音视频编解码技术,但VP8与H.264在编解码的效率上还是存在一定差距 [11]。

1.3.研究思路与方法

本论文设计与开发的Android流媒体音视频播放器,面向的用户群体的社会所有用户群体,是基于Android平台的流媒体播放器应用,采用分层设计结构,该播放器的解码库源自经过剪切优化的FFmpeg源代码,并且本论文中的播放器提供了对网络视频的解析与播放,是其应用范围更为广泛。

1.题目

基于Android平台的音视频流媒体播放器

2.选题意义

随着移动终端设备更新换代速度的不断增加,移动互联网慢慢成为访问互联网的主流趋势,移动互联网的兴起也导致其内部细分市场的竞争越来越激烈。根据《网宿科技中国互联网发展报告(2012年第四季度)》中数据显示,2012年移动终端所用操作系统中,Android增长迅猛,第四季度占比达到67.21%,稳居移动互联网终端主流操作系统的位置[12]。

根据网宿科技后台日志对有效独立IP的统计,每天约有三四千万的移动终端用户访问互联网。随着信息技术的快速发展与移动传播方式的不断增加,互联网移动化已经是一种势不可挡的发展趋势。以阿里巴巴为代表的互联网平台企业,将很有可能推出更

适用于移动终端访问的新平台,以跟上传统应用移动化的大趋势。

媒体技术和流媒体业务在国内的发展正在逐步走向成熟,竞争非分激烈。中国电信、中国网通等国内电信运营商都在不同程度上推出了视频点播、视频直播、在线音乐等流媒体业务。中国电信则把流媒体业务作为2005年重点推广的内容。2006年可以说是流媒体在中国的市场开拓时期,随着2007年的到来,中国的流体业务也开始进入大规模的增长阶段,流媒体将得到更加广泛的应用[12]。

3.本文研究内容

(1)Android的开发和在windows操作系统下的开发环境搭建。

(2)Android应用程序打包安装包与Android应用在真机上的调试。

(3)FFmpeg的优化与移植。

(4)FFmpeg在Android开发中的解码与应用。

(5)研究移动流媒体系统的整体框架和客户端功能模块,设计及实现客户端的重要模块。

2.Android操作系统整体结构分析

2.1.A ndroid系统简介

图2-1 Android Logo

(1)Android:中文称安卓,是一个以Linux为基础的半开放原始码作业系统,主要用于移动设备,由Google成立的Open Handset Alliance(OHA,开放手持设备联盟)持续领导与开发中。Android系统最初由安迪·鲁宾(Andy Rubin)开发制作,并于2005年8月被Google收购。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商成立OHA来共同研发改良Android系统。随后,Google以Apache免费开源许可证的授权方式,发布了Android的源代码。让生产商推出搭载Android的智能手机,Android作业系统后来更逐渐拓展到平板电脑及其他领域上[13]。

(2)发行版本

图2-2 Android 各代版本 Logo

Android在正式发行之前,最早期拥有两个内侧版本,并且以机器人名称来对其进行命名,它们分别是:阿童木(Beta版本),发条机器人(1.0版本)。后来由于涉及到版权问题,谷歌把每个版本的命名方式以甜点来命名。在1.5版本开始命名,每个版本

名称各有特色:纸杯蛋糕(1.5版本),甜甜圈(1.6版本),松饼(2.0/2.1版本),冻酸奶(2.2版本),姜饼(2.3版本),蜂巢(3.0版本),冰激凌三明治(4.0版本),果冻豆(4.1和4.2版本)。

2.2.A ndroid整体结构

2.2.1.Android 架构

下图显示的是Android 操作系统的主要组件。每一部分将会在下面具体描述。

图2-3 Android 整体结构

1.应用程序

应用程序层主要是一系列系统应用程序,这些应用程序包括 e mail 客户端,SMS 短消息程序,日历,地图,联系人管理,浏览器程序等。这些应用程序主要是用JA V A 语言编写。

2.应用程序框架

该层提供应用程序开发所需的API框架给程序员,而且是一种重要机制。这种机制为应用程序的提供了许多可复用的组件,并提供了一系列的开发规范。在遵循框架安全的状态下,应用程序可以调用它自身的功能模块并且给予其它应用程序调用。这种重用

机制可方便用户替换成其他程序组件。

应用框架层包括一系列的重要组件,其中包括;

·内容提供器:让应用程序能够访问任何其他可允许访问的应用程序中的数据(如音视频文件数据库),应用程序自身也可利用内容提供器共享自身的数据。

·视图:用来组成应用程序的最小单元,例如它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons),web浏览器视图(webview)。

·通知管理器:管理通知栏中显示的所有通知信息,也可以使用其来自定义通知的信息样式。

·资源管理器:管理并提供应用程序本地资源的访问,如本地布局文件、字符串、样式和图形。

·活动管理器:主要对应用程序的生命周期进行管理,并且提供正常的导航回退的功能。

3.系统运行库

该层类似为中间件层,为应用框架层提供服务,应用框架层作为中间层,为开发者提供服务。这些C/C++库能被系统中的组件使用。下面是一些主要核心库:·系统库- 是google基于BSD许可研发的标准C函数库,即biomic库,它在运行效率、体积和线程实现等方面都做了一定的优化。

·媒体库- 在2.3版本之前都采用OpenCORE媒体框架,之后引入Stagefright 媒体框架,库中支持音视频常用的录制、回放等操作,支持静态图像生成。主要支持格式有MP3,AAC,AMR,H.264,MPEG4,JPG,PNG。

·Surface Manager - 是显示系统的重要组成,主要负责绘图合成与2D和3D图层的渲染。

·WebKit - 系统浏览器引擎,并且它是开源的。

·SGL - 基于Skia的2D图形渲染引擎。

·OpenGL ES - 3D图像效果渲染库,当可用情况下,该库可支持深度优化的3D 软加速或者使用硬件的3D加速。

·FreeType - 负责矢量和位图的字体渲染。

·S QLite - 一个嵌入式的轻型的数据库引擎,提供应用程序本地数据存储。

Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。

4.Linux内核

该层是Android的底层核心部分,基于Linux 2.6版本内核,充分利用Linux内核的安全模型、网络协议栈、进程管理和驱动模型等优点。该层也是作为抽象层在软件和硬件栈之间。

2.2.2.特征

·应用程序框架应用程序API,使组件具有重用性

·Dalvik 虚拟机提供给开发使用,优化移动设备

·图形渲染库基于Skia的2D图形渲染库和基于OpenGL ES的3D图形库(硬件加速可选)

·浏览器引擎基于开源的WebKit引擎

·多媒体框架支持静态图像格式与音视频格式PNG,GIF,JPG,MP3,AAC,AMR,MPEG4,H.264)

·SQLite一种嵌入式的轻型的关系数据库

·EDGE,3G,WiFi(依赖硬件)和蓝牙Bluetooth

·GSM 电话技术(依赖硬件)

·应用开发环境包括调试工具,虚拟机,DDMS、Eclipse或android studio和开发环境插件ADT等。

·照相机,GPS,指南针,和加速度计(accelerometer)(依赖于硬件)

2.3.A ndroid 应用组件

Android的一个主要特点是,当其他应用程序允许时,一个应用程序可以利用其他应用程序的元素。例如,如果你的应用程序要一种带有图片的列表视图,且系统中其他应用程序已经开发了一个合适的列表视图并可以提供给别的应用程序使用,这时你可以调用这个视图,而不用自己开发一个。应用程序不用并入其他应用程序的代码或链接到它。反之,当需求产生时它只是启动其他应用程序块。当应用程序被其他应用请求时,系统必须能够启动一个应用程序的进程。因此,不像其他大多数系统的应用程序有类似main()函数的程序入口,Android应用程序没有一个单一的入口点相反,系统能够实例化和运行需要几个必要的组件。有四种类型的组件:

·活动(Activities)

·服务(Services)

·广播接收者(Broadcast receivers)

·内容提供者(Content providers)

当需要在应用中使用应用组件时,需要在AndroidManifest.xml文件中注册一些相应组件的配置信息,在文件中声明组件的某些属性与特征。一个应用程序可以是一个或多个的应用组件组成,不需要使用到所有的应用组件。

2.3.1.活动(Activity)

一个活动(activity)它主要表示一个应用程序的用户界面,它与用户交互,关注用户从事的事件并且做出相对应的响应。

android.app.Activity类:因为几乎所有的活动(activities)都是与用户交互的,所以Activity类关注创建窗口,使用setContentView(View)方法将自己的UI放到里面。活动通常以全屏的方式展示给用户,也可以以浮动窗口或内嵌在其他活动中成为子活动窗口。有两个方法是几乎所有的Activity子类都实现的:

1. onCreate(Bundle):主要做一些活动上的视图与数据的初始化工作。最重要的是,在这个方法里通常将用布局资源(layout res)用setContentView(int)方法定义你的UI,和用findViewById(int)在你的xml布局UI文件中中检索你需要使用到的交互视图(view)。setContentView指定由哪个文件指定布局,可以将这个界面显示出来,然后进行相关操作,操作会被包装成为一个意图(Intent),然后这个意图对应有关联的“活动”进行处理。

2. onPause():处理当离开你的活动时要做的事情。最重要的是,用户做的所有改变应该在这里提交(通常ContentProvider保存数据)。

一个应用程序可能只包含一个活动,或者它可能包含几个活动。活动的内容与多少决于开发者的应用和设计。每一个活动都有一个默认的窗口。默认情况下窗口会填满整个屏幕,它也可以比屏幕的尺寸小或者悬浮在其他窗口上。活动可以使用一些特殊的显示方式,比如弹出式对话框的形式。

活动窗口的可视化是继承自View基类的一个分层的视图对象提供。每个视图控件是窗口内的一个特定的矩形空间。父视图排列和组织子视图的布局。叶子视图(在分层的底层)绘制的矩形直接控制和响应用户的操作。因此,视图是活动中与用户发生交互的最小单元,活动可以是一个或多个视图排列组成。比如视图可以是一个文本、一张图片或一个列表,用户通过视图来了解活动中的内容以及点击或触摸屏幕与视图发起一个

行为。Android中有许多视图可以使用,包括按钮(buttons)、文本域(text fields)、滚动条(scroll bars)、菜单项(menu items)、复选框(check boxes)等等。

在活动初始化时设置改活动的视图在窗口中。内容视图(content view)在视图层结构中处于相对于树形图的根节点位置。如图2-4所示:

图 2-4 视图的层次结构

2.3.2.服务(Services)

Service也就是服务,它是在后台运行,不可交互的一个东西。服务没有可视化调用户界面,它只在后台运行。服务可能用来播放音乐、从网络获取数据或计算一些东西并提供结果给需要的活动(activities)。每个服务都继承自Service基类。

每个服务类在AndroidManifest.xml中有相应的声明。服务可以通过Context.startService()和Context.bindService()启动。如果在service的oncreate或者onstart 做一些很耗时的动作,最好是启动一个新线程来运行这个service,因为,如果service 是运行在主线程中,会影响到程序的UI操作或者阻塞主线程中的其他事情。

例如音乐播放器应用,它有一个或多个活动(activities),允许用户选择歌曲和开始播放。当用户需要退出播放器或临时开启了其他应用程序时,用户希望音乐能够继续播放。这时活动(Activity)就无法满足用户的需求,就需要启动后台服务(Services)来满足继续音乐播放,让它能够在退出播放器或在其他程序中也能够正常播放。

连接到(绑定到)一个持续运行的服务(services),若服务为启动,系统将自动启动他。连接之后,你可以通过服务的接口与服务交互。音乐播放服务的接口可以允许用户暂停、倒带、停止和重新播放。

2.3.3.广播接收者(Broadcast receivers)

广播(Broadcast)是在组件之间传播数据(Intent)的一种机制。在Android中许多广播都来自于系统,例如公告时区的改变、电池电量低、网络提醒等。应用程序也可以自定义广播,例如为了程序中当下载版本完毕时通过广播发出下载完毕的通知。一个应用程序可以有任意数量的广播接收者去反应任何它认为重要的公告。所有的广播类继承自BroadcastReceiver基类。它是接受sendBroadcast()发送的意图(intents)的基类。注册广播有两种方式,一种用Context.registerReceiver()动态地注册这个类的实例,另一种通过AndroidManifest.xml中编写标签静态发布。当不需要广播时在Activity.onSaveInstanceState()中注销它。

主要有两种广播的类型:

1. 正常广播(由Context.sendBroadcast发送)是完全异步的。所有的广播接收者以无序方式运行,往往在同一时间接收。这样效率较高,但是意味着接受者不能使用结果或终止广播数据传播。

2. 有序广播(由Context.sendOrderedBroadcast发送)依次将广播传递给接收者。由于每个接收者依次执行,因此它可以持续传播到下一个接收器,也可以终止传播让它不会传递给其他接收者。

广播接收者不显示一个用户界面。然而,它们启动一个活动去响应收到的信息,或者使用NotificationManager去通知用户。例如放在一个持久的图标在状态栏,用户可以打开获取信息。

2.3.4.内容提供者(Content providers)

内容提供者(content provider)它是一个数据共享的机制,使得应用程序可以把自己的数据共享给其他应用。这些数据主要存储在文件系统中、本地SQLite数据库以及任何其他合理的方式。内容提供者继承ContentProvider 基类,应用程序并不是直接调用这个基类的方法。它使用ContentResolver对象来调用ContentProvider 中的方法。ContentResolver能与任何的ContentProvider 对象通信,它和内容提供者共同管理进程间的通信。

只有多个应用程序间共享一个应用程序的数据时才需要使用到内容提供者。例如,通讯录数据被多个应用程序使用,且必须将其数据存储在内容提供者(content provider)

中。否则,你可以直接使用SQLiteDataBase访问数据;当ContentResolver发出数据请求时,系统根据请求给定的URI的权限传递给内容提供者,内容提供者返回请求相应数据。

实现的方法主要如下:

·query(Uri,String[],String,String[],String) 返回数据给调用者

·insert(Uri,ContentValues) 插入数据到内容提供者

·update(Uri,ContentValues,String,String[]) 更新内容提供者已存在的数据

·delete(Uri,String,String[]) 从内容提供者中删除数据

·getType(Uri) 返回内容提供者中的MIME 类型数据

2.4.A ndroid NDK工具

NDK全称:Native Development Kit。

1、NDK是一系列工具的集合。

·NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并自动打包so和java,与应用同步打包为apk。NDK对开发者有着很大的帮助 [14]。

·NDK集成GCC交叉编译器,而且提供相应的mk文件隔离机制,开发人员在编译时只需修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。

·NDK自动地将Java和so应用打包在一起,极大地减轻了开发人员的打包工作。

2、NDK提供了一份稳定、功能有限的API头文件声明。

Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)[15]。

3.FFmpeg流媒体平台介绍与研究

3.1.F Fmpeg简介

FFMPEG是一个集录制、转换、音/视频编解码功能为一体的、完整的开源解决方案。FFMPEG 的开发基于Linux操作系统,也可在大多数操作系统中编译和使用。FFMPEG支持MPEG、DivX、MPEG4、AC3、DV、FLV等40多种编码,A VI、MPEG、OGG、ASF等90多种解码。

图 3-1 FFmpeg logo

ffmpeg项目是由下面几个部分组成:

ffmpeg视频文件转换命令行工具,同时它也支持实时电视卡抓取和编码的视频文件。

ffserver基于HTTP、RTSP,用于实时广播的流媒体服务器。

ffplay结合SDL和FFmpeg库开发的一个简单的媒体播放器。

libavcodecs 是一个包含所有FFmpeg音视频编解码器的库。

libavformat是一个包含所有的普通音视频格式的解析器和产生器的库。

3.2.F Fmpeg 的编译与运行

由于本论文的技术研究主要windows系统环境下,所有本文主要阐述在windows 下的FFmpeg编译操作。操作如下:

1、下载yasm的exe文件,下载后重命名为yasm.exe,放到MinGW安装目录的bin 目录下。需注意的是,若没有上一步的操作,在后面编译过程中,可能会提示找不到yasm命令。在汇编加速部分需要用到yasm,若禁用了汇编加速,会影响编译加速的运行效率。

2、下载ffmpeg,可在https://www.doczj.com/doc/9611733056.html,/download.html下载,下载解压到后某处待命。

3、安装了linux环境Cygwin后,进入Cygwin的命令行,进入ffmpeg的解压目录。

4、使用configure命令配置ffmpeg的编译参数。个人的配置的参数如下:

./configure --enable-shared --enable-gpl --enable-version3 --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --enable-w32threads --disable-network --enable-memalign-hack --disable-everything --enable-decoder=h264 --enable-decoder=mpeg2video --enable-parser=h264 --enable-encoder=mpeg2video --disable-debug

5、输入make进行编译。

6、编译完成后,make install进行安装部署。

当没有修改过msys的安装路径事,安装后所生成的文件都会在“C:\msys\1.0\local”目录下;生成的动态库在“msys目录\local\bin”目录下;链接库文件在“msys目录\local\lib”目录下的,*.dll.a为动态库需要的链接文件,*.a为纯静态库(不依赖dll);将扩展名修改为.lib就可使用。

4. 流媒体播放器应用分析

4.1. 系统功能需求分析

系统功能结构图

根据前期较长时间的需求调研,分析出了本论文设计的流媒体播放器总体功能需求,下图是播放器的功能结构图:

图 4-1 系统功能结构图

本播放器主要有三个功能点组成,媒体播放功能、媒体文件管理和系统设置功能,下面是各个功能用例说明:

1. 媒体播放功能

a) 开始:开始播放暂停或停止的媒体文件。

b) 停止:停止正在播放的媒体文件。 Android 流媒体播放器功能框架

媒体播放

媒体文件管理 系统设置 播放 暂停 停止 本地媒体展示

网络媒体展示

版本更新

睡眠时间设置

上一首 下一首 历史播放展示 媒体文件删除 媒体文件编辑 关于软件

网络切换

媒体文件搜索

c)暂停:暂停正在播放的媒体文件。

d)快进:跳跃至当前播放帧的前一小段进行播放。(跳帧播放)

e)快退:跳跃至当前播放帧的后一小段进行播放。(跳帧播放)

f)上一首:播放当前媒体文件后面一个媒体文件。

g)下一首:播放当前媒体文件的前面一个媒体文件。

h)播放模式设置:设置当前媒体的播放顺序,如:顺序播放,随机播放等。

2.媒体文件管理

a)媒体文件搜索:可扫描网络服务器或手机本地存储中的所有可支持的音视

频文件,并按设定的规则分类(如歌手、专辑名称等)

b)本地媒体展示:显示在手机内存或SD卡进行搜索后的所有流媒体文件。

c)网络媒体展示:显示从网络中获取的流媒体文件或实时视频流。

d)历史播放展示:展示本地记录播放过的流媒体文件或视频流。

e)媒体文件编辑:修改流媒体文件名称。

f)媒体文件删除:删除当前流媒体文件。

3.系统设置

a)版本更新:对应用版本进行自动或手动更新。

b)睡眠时间设置:定时关闭Android流媒体播放器。

c)网络切换:设置当前的网络,切换2G、3G或wifi网络类型。

d)关于软件:显示Android流媒体播放器的简介、版本信息及开发团队。

4.2. 系统整体结构需求分析

a)界面方面

界面布局合理,美观,功能区域符合操作习惯,色彩搭配和谐自然

b)内容方面

主要体现手机本地与网络中的音视频文件列表数据。

c)安全性方面

使用流媒体的数据加密方式,防止非法用户截取数据包操作。

d)运行环境要求

硬件:Android系统手机(客户端)

软件:Android操作系统

e)开发环境

JDK 1.6、Eclipse 、Android SDK 2.3 、ADT-0.9.7

f)其他

根据具体情况适当用其他辅助工具(如:第三方控件、Photoshop等工具)对系

统的界面进行美化和布局,以达到更好的效果。

4.3. 系统业务流程分析

下面将根据播放器需求主要三个模块来阐述播放器的UI设计。

4.3.1.媒体播放模块业务流程

1.媒体播放模块业务流程说明

媒体文件有效性判断:进入媒体播放界面,首先检查播放的媒体文件是否存在SD卡中,若存在,开始正常播放媒体文件,否则退出媒体播放界面,并提示用户无此文件。

在媒体播放过程中,界面上有几个可操作的按钮提供用户操作,如“播放/暂停”、“上一首”、“下一首”、“停止”、“全屏”等按钮。

播放/暂停:“播放”与“暂停”功能合为一个按钮进行操作,当媒体文件正在播放时,此时按钮表示“暂停”功能,反之,则表示“播放”功能。

上一首/下一首:点击“上一首”或“下一首”按钮时,系统会判断媒体文件在SD卡中位置是否已到最顶或最低,若是如此,则不能生效功能并提示用户文件位置状况;播放过程中若有来电或点击home键意外退出应用,系统将暂停当前媒体播放,当再次进入应用时可直接显示媒体播放界面,在先前进度上继续播放;

退出界面:点击手机“返回键”,将退出媒体播放界面。

2.媒体播放模块业务流程图

相关主题
文本预览
相关文档 最新文档