毕业设计论文
更新时间:2024-04-27 21:16:02 阅读量: 综合文库 文档下载
论文题目 姓 名
学 院
专 业
指导教师
备 注
基于Android的视频通话系统的设计与实现
吴洋
软件学院
软件工程
张艳升
2012 年 6 月10日
基于Android的视频通话系统的设计与实现
作者姓名:
吴洋
校内指导教师: 张艳升 校外指导教师: 单位名称: 软件学院专业名称:
软件工程
东 北 大 学 2012年6月
讲师
Design and Implementation of an Android-Based Video Calling System
by Wu Yang
Supervisor: Lecturer Zhang Yangsheng Associate Supervisor:
Northeastern University
June 2012
毕业设计(论文)任务书
毕业设计(论文)题目: 基于Android的视频通话系统的设计与实现 基本内容: 学习Java多媒体框架(JMF)的结构特点,了解其对实时传输协议(RTP)的支持,熟练的使用JMF来采集视频、压缩视频、传输视频、接收视频以及显示视频。分析基于安卓的视频通话系统的功能需求。研究基于安卓的视频系统的设计与实现技术。完成基于安卓的视频通话系统的总体设计与详细设计,实现端到端的视频通话。最后对所实现的功能进行测试和评价。翻译一篇与毕设内容相关的外文资料,译文汉字字数不少于4000字。 毕业设计(论文)专题部分: 题目: 基本内容: 学生接受毕业设计(论文)题目日期 第 1 周 指导教师签字: 2012年 3 月 2 日
东北大学毕业设计(论文) 摘要
基于Android的视频通话系统的设计与实现
摘 要
近年来,智能手机操作系统发展迅速,尤其是Android系统的迅猛发展已经将全球智能手机市场引领到了非常火爆的状态。随着手机社交网络、手机多媒体通信和手机游戏等应用程序不断被开发出来,各种基于智能手机操作系统的应用程序正在逐渐影响和改变人们的生活方式。实时视频流技术在可视电话、远程教育、视频点播等方面得到了广泛的应用。
本文设计并实现的基于Android的视频通话系统采用C/S架构,包括PC和手机两个客户端。手机端使用Android2.3操作系统。本系统共包含四个子系统:PC端接收子系统、发送子系统,Android端接收子系统、发送子系统。接收子系统实现数据接收、转码和呈现,发送子系统现实数据采集、编码压缩和数据发送。PC端基于JMF框架来实现,Android端使用Android Camera类及其相关类来实现。本文对国内外视频通话的研究情况以及今后的发展前景,对实现视频通话所涉及到的协议和相关技术进行了分析,在此基础上提出了一种可行的网络视频通话设计方案,并通过需求分析、详细设计、编码实现、单元测试以及集成测试等过程完成了本系统的设计与实现。
本系统实现了跨平台视频通话,使PC与Android之间的视频通话成为了可能,可以起到丰富人们日常生活交流和娱乐方式的作用。
关键词:Android,视频通话,JMF,PC,RTP/RTCP
-I-
东北大学毕业设计(论文) Abstract
Design and Implementation of an Android-Based
Video Calling System
Abstract
In recent years, the rapid development of smart phone operating system, especially Android system, has led the global smart phone market into explosion state. With some application such as mobile social networking, mobile media communications and mobile games being continually developed, a variety of application on smart phone operation systems are increasingly affecting and changing people’s lifestyles. The real-time video streams technology is used widely in such aspects as videophone, distance education and video on demand.
The system based on android uses c/s architecture. It includes two clients. One is on the Windows system, the other one is on the Android 2.3 system. There are four subsystems. Each of clients has a send subsystem and a receiver subsystem. The main function of the receiver subsystem is to receiver data from internet and decodes that data. After that, it will display that data as soon as possible. The main function of the send subsystem is to collect data from camera and then encodes the data. After that, the data will be sanded to the Internet. On the PC client, we use the JMF framework. One the Android client, we use Android API. This paper firstly introduces the research condition of the video call and development tendency. It analysis some technologies about the video calling system and comes up with a feasible plan. It introduces the video calling system about requirement analysis, detailed design, realize and testing.
This system achieves the cross-platform video calling. It becomes possible to make video calling between PC and Android and will enrich the people’s communication and entertainment in their daily lives.
Key words: Android, video call, JMF, PC, RTP/RTCP
-II-
东北大学毕业设计(论文) 目录
目 录
摘 要 ................................................................................................... I Abstract ................................................................................................ II 第1章 绪 论 ................................................................................... 1
1.1 课题概述 .................................................................................................................... 1
1.1.1 课题背景 .......................................................................................................... 1 1.1.2 课题的目的及意义 .......................................................................................... 1 1.2 国内外发展现状 ........................................................................................................ 2 1.3 研究内容 .................................................................................................................... 2 1.4 组织结构 .................................................................................................................... 3
第2章 相关技术 ............................................................................... 4
2.1 Java多媒体框架 ........................................................................................................ 4
2.1.1 JMF的功能...................................................................................................... 4 2.1.2 JMF中的数据源.............................................................................................. 4 2.1.3 JMF中的媒体播放器...................................................................................... 4 2.1.4 JMF中的媒体处理器...................................................................................... 5 2.1.5 JMF中的事件模型............................................................................................. 6 2.2 RTP/RTCP协议 ......................................................................................................... 6
2.2.1 RTP实时传输协议 .......................................................................................... 6 2.2.2 RTCP实时传输协议 ....................................................................................... 8 2.3 FFmpeg视频编解码技术 .......................................................................................... 9
2.3.1 FFmpeg简介 .................................................................................................... 9 2.3.2 组成 ................................................................................................................ 10 2.3.3 编码框架 ........................................................................................................ 10 2.3.4 解码框架 ........................................................................................................ 11 2.4 本章小结 .................................................................................................................. 12
第3章 系统分析 ............................................................................. 13
3.1 需求分析 .................................................................................................................. 13
3.1.1 系统总体需求 ................................................................................................ 13 3.1.3 用例分析 ........................................................................................................ 14
-III-
东北大学毕业设计(论文) 目录
3.2 系统运行环境与开发环境 ...................................................................................... 19
3.2.1 运行环境 ........................................................................................................ 19 3.2.3 开发环境 ........................................................................................................ 20 3.3 系统可行性分析 ...................................................................................................... 20
3.3.1 技术可行性 .................................................................................................... 20 3.4 本章小结 .................................................................................................................. 21
第4章 系统设计 ............................................................................. 22
4.1 概要设计 .................................................................................................................. 22
4.1.1 系统软件体系结构的设计 ............................................................................ 22 4.1.2 系统功能模块 ................................................................................................ 23 4.1.3 模块功能分析 ................................................................................................ 23 4.2.3 数据库设计 .................................................................................................... 29 4.2 本章小结 .................................................................................................................. 30
第5章 系统实现 ............................................................................. 31
5.1 功能子模块的实现 .................................................................................................. 31
5.1.1 硬件检测模块 ................................................................................................ 31 5.1.2 数据采集模块 ................................................................................................ 32 5.1.3 压缩编码模块 ................................................................................................ 33 5.1.4 数据发送模块 ................................................................................................ 34 5.1.5 数据接收模块 ................................................................................................ 36 5.1.6 解码模块 ........................................................................................................ 37 5.1.7 呈现模块 ........................................................................................................ 38 5.1.8 会话参与者管理模块 .................................................................................... 39 5.2 本章小结 .................................................................................................................... 40
第6章 系统测试 ............................................................................. 41
6.1 单元测试 .................................................................................................................... 41 6.2 集成测试 .................................................................................................................... 43 6.3 本章小结 .................................................................................................................... 44
第7章 结 论 ................................................................................. 45 参考文献 ............................................................................................. 46 致 谢 ................................................................................................. 47
-IV-
东北大学毕业设计(论文) 第1章 绪论
第1章 绪 论
1.1 课题概述
1.1.1 课题背景
随着移动通信网络与多媒体技术的飞速发展,很多智能手机以及其应用软件的产生和发展正在逐渐改变人们的生活方式和生活习惯。Android是Google公司于2007年11月5日发布的一款基于Linux内核的开放源代码的智能手机操作系统。由于其具有的开放性使得仟何厂商和个人都可以作为其开发者参与其中,Android在发布的随后几年中得到了迅猛的发展。包括设备生产商、芯片制造商、应用开发商及网络运营商在内的商业公司和组织,以及全世界的应用程序开发者都致力于开发出最新最具影响力的手机硬件及软件。
近年来,基于IP网络的语音及视频服务越来越多地进入人们的视线,也有越来越多的公司致力于开发VoIP和 Video Call的应用软件。如Skype公司的Skype软件,Apple公司的 Face Time软件等,不仅能为用户带来更全面的体验,而且也提升了自身产品的市场竞争力。人们不再局限于使用传统的电信网和移动网来拨打电话,而一部手机是否支持网络语音及视频实时通话功能也成为人们购买手机的一个考虑因素。在这一方面,Android之前推出的一系列操作系统版木都没能很好地适应多媒体实时通信的发展。这个问题一直持续到2010年12月7日,Google发布了代号为Gingerbread的Android 2.3操作系统。这一版本的操作系统相比之前的版本有了很多的改进,其中一部分就是对多媒体实时通信有了更好的支持。其中包括对VoIP及SIP的支持,以及对前置摄像头开发的支持,开发者已经可以根据现有的资源对Android系统进行二次开发,并做出应用性很强的即时视频通话软件。
1.1.2 课题的目的及意义
在Android多媒体应用开发领域,充斥着很多公司和个人开发者开发的多媒体播放器、手机Radio、手机电视和手机语音聊大等多媒体应用软件。但是成形的手机视频通话软件却不多见,本课题致力于对Android移动平台下的网络多媒体开发进行深入细致的研究和分析,并开发出一个可以在手机和PC之间进行高效的、稳定的视频通话的应用软件。
-1-
东北大学毕业设计(论文) 第1章 绪论
本课题力求实现以下目标:
(1) Android 2.3系统增加了对前置摄像头的开发许可。本课题要在充分研究并掌握Android平台的原理与软件开发的相关知识基础上,实现基于Android 2.3移动平台的实时视频通话。
(2) 本课题在Android端使用第三方开源RTP库Jlibrtp,使实时多媒体码流的发送和控制更方便。PC端使用成熟的Java多媒体框架JMF完成视频采集、编码、发送、接收、解码。
(3) 为了保证本系统的友好性,本课题致力于开发一套拥有友好用户界而与稳定用户数据后台支持的应用软件,尽量保证软件使用起来更方便。
随着无线网络的快速发展,手机+Wifi接入互联网的方式已经越来越普遍地为手机用户所使用。Wifi技术基于IEEE制定的802.11标准,不仅覆盖范围能达到接近100米,而且网络速率可以达到 1Mbps,这为基于移动终端的多媒体实时通信创造了良好的条件。基于Android记移动终端的视频通话系统的实现与优化,对于人们日常生活的交流和娱乐方式会有很重要的意义。
1.2 国内外发展现状
Google是Androd系统的创始者和发布者,但是并不是最先推出基于Android移动终端视频通话应用软件的。在2010年末的时候,一款搭载了Android操作系统的视频通话软件Fring便进入了人们的视线。Fring可以在两台使用了前置摄像头的Android手机上进行视频通话,并使用了自主研发的动态视频质量(DVQ)技术来保证服务质量。该技术利用当前网络带宽作为依据来调整视频编码比特率和帧速率,从而带来流畅清晰的视频体验。Google于2011年5月也正式在 GoogleTalk中加入了视频通话部分,使任意两个拥有Gmail账号的用户都可以使用搭载了 Android2.3操作系统版本以上的手机来进行视频通话[1]。另外,Yahoo也在其Messenger中加入了视讯通信的插件供用户下载使用。在国内,基于Wifi的免费视频通话软件并不多,而且对网络的适应性也不是很强。
1.3 研究内容
本课题一个涉及到两个客户端。PC端基于JMF框架,Android端基于Android 2.3并使用开源RTP传输框架Jlibrtp,在此基础上设计并实现了视频通话系统。本系统没有对网络NAT穿透,因此目前只能在局域网环境中进行视频通话。但只要搭载一个成型的NAT模块,系统即可在任何网络环境中进行视频通话。
-2-
东北大学毕业设计(论文) 第1章 绪论
(1) 研究并掌握了Android平台的原理与软件开发的相关知识,实现了对Android Camera的实时数据采集与回显,实现了应用于Android 2.3移动平台上基于RTP的视频通话系统。
(2) 深入研究并分析了第三方开源RTP/RTCP库Jlibrtp并应用于Android平台上。对于Java多媒体框架也有了深入的了解。
(3) 详细分析并设计了视频通话系统的框架以及各个功能模块之间的协同工作机制,并在此基础上开发了一套友好的应用软件界面,保证了用户数据后台支持,使软件使用起来更方便。
1.4 组织结构
本文分六个章节来进行介绍:
第1章 绪论。介绍了本课题的背景、目的、意义以及国内外的发展情况。 第2章 相关技术。介绍Java多媒体框架,重点介绍了RTP/RTCP传输协议的原理。 第3章 需求分析。通过用例的方式对基于Android的视频通话系统进行需求分析,包括功能性需求分析和非功能性需求分析,进而得出视频通话的用例模型。
第4章 系统设计。完成详细的功能设计,进行软件架构分析,对软件模块进行划分。包括视频采集、编解码、实时传输以及视频呈现等模块。附加了其它模块,如数据库操作,GUI等。
第5章 系统实现。完成需求分析提出的各个功能模块,实现了基于Android的视频通话系统。
第6章 系统测试。对各个功能模块编写基本的测试用例进行测试。 第7章 总结与展望。对工作做了简要的总结,并对后续工作提出了设想。
-3-
东北大学毕业设计(论文) 第2章 相关技术
第2章 相关技术
2.1 Java多媒体框架
Java Media Framework(JMF)是SUN和IBM共同开发的能够在Java应用程序和小应用程序中显示,获取多媒体数据的一套类的集合[2]。JMF API使Java程序员做到了以跨平台与设备无关的方式访问音、视频设备,提供了分布式应用环境下实时媒体回放技术,还定义了一系列API插件,允许高级开发人员和技术人员对其进行定制功能扩展,实现特殊的音、视频捕获、处理和回放效果。JMF支持大多数标准的媒体内容类型,如AIFF、AU、AVI、GSM、MIDI、MPEG、QuickTime、RMF和WAV。
2.1.1 JMF的功能
JMF的主要功能有:
(1) 在Java的应用程序和Applet中,播放各种媒体格式文件。 (2) 在Internet中播放流媒体数据。
(3) 可以在麦克风和数字摄像机的帮助下采集音频和视频数据, 并且将这些数据保存为多种格式的文件。
(4) 在Internet中发布自己的音、视频流。 (5) 用来制作实时的音、视频广播服务。
2.1.2 JMF中的数据源
JMF API可以同步播放来自各种数据源 (DataSource)的时基媒体,例如本地或网络数据文件等。数据源封装了媒体数据流、媒体的具体位置和用于传输媒体的协议,一个数据源一旦被获取,它将不能再用于传输其他媒体数据。 JMF API支持的两种类型的数据源是Pull数据源和Push数据源。
一个媒体播放器的数据源可以用一个JMF MediaLocator或一个URL来定位。MediaLcator是一个描述某媒体播放器显示的媒体数据的类,它类似于URL类,并可由URL类来构造。另外,JMF还支持数据源的合并,即可以将多个数据源合并成一个数据源,例如将视频数据源和音频数据源合并在一起作为一个多媒体数据源在网络中传输。
2.1.3 JMF中的媒体播放器
媒体播放器是JMF的一个基本功能,视频、音频等多媒体的表现都需要用到它的
-4-
东北大学毕业设计(论文) 第2章 相关技术
支持,媒体播放器的应用程序接口包括一个可视构件(VisualComponent)和一个控制面板构件(ControlPanelComPonent)。应用MediaPlayer类创建的对象或继承Javax.media包中的Player接口的其他类创建的对象即可实现媒体播放器,通过MediaPlayer类中提供的方法可以操作各种媒体数据的播放。
在JMF媒体播放器从启动媒体播放器到开始播放媒体数据的过程中,JMF中定义了6种工作状态,在正常情况下,JMF媒体播放器需要经历每种状态,然后才能开始播放媒体数据,以下是JMF中定义的6种工作状态。
(1) Unrealized状态:在该工作状态下,JMF媒体播放器己经被实例化,但并不知道需要播放的媒体数据的任何信息。
(2) Realizing状态:当调用realize()方法时,JMF媒体播放器的状态从unrealized状态变为Realizing状态,在这种状态下,JMF媒体播放器正在确定它需要占用的资源。
(3) Realized状态:在这种状态下,JMF媒体播放器已经确定了它需要占用的资源,并且也知道了需要播放的媒体数据的类型。
(4) Prefetching状态:当调用prefectch()方法时,JMF媒体播放器的状态从Realized状态变为Prefetching状态,在该状态下,JMF媒体播放器正在为播放媒体数据做一些准备工作,其中包括加载媒体数据,获得需要独占的资源等。
(5) Prefetched状态:当JMF媒体播放器完成了获取操作后就处于该状态。 (6) Started状态:当调用start()方法后,JMF媒体播放器进入该状态并播放媒体数据。 而要停止媒体播放器则调用stop()方法,还可以调用deallocate()方法来释放媒体播放器使用的独占资源。
2.1.4 JMF中的媒体处理器
在JMF API的Javax.media包中定义的Processor接口即为媒体处理器接口,它继承了Player接口,即它也是一种媒体播放器,继承Processor接口的对象除了支持Player对象支持的所有功能外,他还可以控制输入的多媒体数据流进行何种处理以及通过数据源向其他的Player对象或Processor对象输出数据[3]。
继承Processor接口的媒体播放器对象除了具有Player播放器的6种状态外,还包括如下两种新的状态,这两种状态是在Unrealized状态之后,Realizing状态之前的Configuring和Configured状态。
Configuring状态:当调用configure()方法后,Processor媒体播放器对象进入该状态。在该状态下,Processor媒体播放器对象链接到数据源并获取输入媒体数据的格式(类型)
-5-
东北大学毕业设计(论文) 第2章 相关技术
信息。
Configured状态:当完成数据源连接,获得输入数据格式的信息后,Processor媒体播放器对象就处于Configured状态。
2.1.5 JMF中的事件模型
为了使基于JMF API的应用程序知道媒体系统目前所处的状态,也为了让应用程序对处理媒体数据时出现的错误情况能够做出反应,JMFAPI使用了一种结构化的事件报告机制。当 JMFAPI对象需要报告目前所处的状态时,就产生一个MediaEvent事件,对每一种可以产生MediaEvent事件的JMF对象,JMFAPI都定义了一种相应的监听接口,为了接收MediaEvent消息,则需要实现相应的事件监听接口,并将该监听类注册给要产生消息的对象,通过继承MediaEvent事件可以产生许多JMF媒体播放器特有的事件,这些事件都是遵循JavaBeans事件模型标准的。
2.2 RTP/RTCP协议
2.2.1 RTP实时传输协议
实时传输协议RTP(Real time Transport Protocol):是针对Internet上多媒体数据流的一个传输协议, 由IETF作为RFC1889发布,现在最新的为RFC3550。RTP被定义为在一对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步。RTP的典型应用建立在UDP上,但也可以在TCP等其他协议之上工作。RTP本身只保证实时数据的传输,并不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,它依靠RTCP提供这些服务[4]。
RTP报文头格式如图2.1所示。
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|V=2|P|X| CC |M| PT | sequence number |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| timestamp |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| synchronization source (SSRC) identifier |+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+| contributing source (CSRC) identifiers || .... |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
图2.1 RTP报文头格式
以上域具体意义如下:
-6-
东北大学毕业设计(论文) 第2章 相关技术
版本(V):2比特,此域定义了RTP的版本,此协议定义的版本是2。(值1被RTP草案版本使用,值0用在最初\语音工具使用的协议中)。
填料(P):1比特,若填料比特被设置,此包包含一到多个附加在末端的填充比特,不是负载的一部分。填料的最后一个字节包含可以忽略多少个填充比特。填料可能用于某些具有固定长度的加密算法,或者在底层数据单元中传输多个RTP包。
扩展(X):1比特,若设置扩展比特,固定头后面跟随一个头扩展。
CSRC计数(CC):4比特,CSRC计数包含了跟在固定头后面CSRC识别符的数目。 标志(M):1比特,标志的解释由具体协议规定.它用来允许在比特流中标记重要的事件,如帧范围。规定该标志在静音后的第一个语音包时置位。
负载类型(PT):7比特,此域定义了负载的格式,由具体应用决定其解释。协议可以规定负载类型码和负载格式之间一个默认的匹配。其他的负载类型码可以通过非RTP方法动态定义。RTP发射机在任意给定时间发出一个单独的RTP负载类型,此域不用来复用不同的媒体流。
序列号(sequence number):16比特 每发送一个RTP数据包,序列号加一,接收机可以据此检测包损和重建包序列。序列号的初始值是随机的(不可预测),以使即便在源本身不加密时(有时包要通过翻译器,它会这样做),对加密算法泛知的普通文本攻击也会更加困难。
时间标志(timestamp):32比特,时间标志反映了RTP数据包中第一个比特的抽样瞬间。抽样瞬间必须由随时间单调和线形增长的时钟得到,以进行同步和抖动计算。时钟的分辨率必须满足要求的同步准确度,足以进行包到达抖动测量。时钟频率与作为负载传输的数据格式独立,在协议中或定义此格式的负载类型说明中静态定义,也可以在通过非RTP方法定义的负载格式中动态说明。若RTP包周期性生成,可以使用由抽样时钟确定的额定抽样瞬间,而不是读系统时钟。例如,对于固定速率语音,时间标志钟可以每个抽样周期加1。若语音设备从输入设备读取覆盖160个抽样周期的数据块,对于每个这样的数据块,时间标志增加160,无论此块被发送还是被静音压缩。时间标志的起始值是随机的,如同序列号。多个连续的RTP包可能由同样的时间标志,若他们在逻辑上同时产生,如属于同一个图像帧。若数据没有按照抽样的顺序发送,连续的RTP包可以包含不单调的时间标志,如MPEG交织图像帧。
同步源(SSRC):32比特,SSRC域用以识别同步源.标识符被随机生成,以使在同一个RTP会话期中没有任何两个同步源有相同的SSRC识别符。尽管多个源选择同一个SSRC识别符的概率很低,所有RTP实现工具都必须准备检测和解决冲突。若一个源改
-7-
东北大学毕业设计(论文) 第2章 相关技术
变本身的源传输地址,必须选择新的SSRC识别符,以避免被当作一个环路源。
有贡献源(CSRC)表:0到15项,每项32比特,CSRC列表识别在此包中负载的有贡献源。识别符的数目在CC域中给定.若有贡献源多于15个,仅识别15个。CSRC识别符由混合器插入,用有贡献源的SSRC识别符。例如语音包,混合产生新包的所有源的SSRC标识符都被陈列,以期在接收机处正确指示交谈者。
注意:前12个字节出现在每个RTP包中,仅仅在被混合器插入时,才出现CSRC识别符列表。
2.2.2 RTCP实时传输协议
实时传输控制协议RTCP(Real time Transport Control Protocol)负责管理传输质量,在当前应用进程之间交换控制信息,提供流量控制和拥塞控制服务。在RTP会话期间,各参与者周期性地传送RTCP包,包中含有已发送的数据包的数量、丢失的数据包的数量等统计资料,因此,服务器可以利用这些信息动态地改变传输速率,甚至改变有效载荷类型。RTP和RTCP配合使用,能以有效的反馈和最小的开销使传输效率最佳化,故特别适合传送网上的实时数据。
RTCP协议的功能是通过不同的RTCP数据报文来实现的,主要有如下几种类型: (1) SR(Sender Report)发送端报告,所谓发送端是指发出RTP数据报的应用程序或者终端,发送端同时也可以是接收端。
(2) RR(Receiver Report)接收端报告,所谓接收端是指仅接收但不发送RTP数据报的应用程序或者终端。
(3) SDES源描述,主要功能是作为会话成员有关标识信息的载体,如用户名、邮件地址、电话号码等,此外还具有向会话成员传达会话控制信息的功能。
(4) BYE通知离开,主要功能是指示某一个或者几个源不再有效,即通知会话中的其他成员自己将退出会话。
(5) APP由应用程序自己定义,解决了RTCP的扩展性问题,并且为协议的实现者提供了很大的灵活性。
RTCP数据报携带有服务质量监控的必要的信息,能够对服务质量进行动态的调整,并且能够对网络拥塞进行有效的控制。由于RTCP数据报采用的是组播方式,因此会话中的所有的成员都可以通过RTCP数据报返回的控制信息,来了解其他参与者的当前情况。
-8-
东北大学毕业设计(论文) 第2章 相关技术
例如在流媒体应用场合下,发送媒体流的应用程序将周期性地产生发送端报告SR,该RTCP数据报含有不同媒体流间的同步信息,以及已经发送的数据报和字节的计数,接收端根据这些信息可以估计出实际的数据传输速率。另一方面,接收端会向所有已知的发送端发送接收端报告RR,该RTCP数据报含有已接收数据报的最大序列号、丢失的数据报数目、延时抖动和时间戳等重要信息,发送端应用根据这些信息可以估计出往返时延,并且可以根据数据报丢失概率和时延抖动情况动态调整发送速率,以改善网络拥塞状况,或者根据网络状况平滑地调整应用程序的服务质量。
RTCP具有以下四个功能:
(1) 基本功能是提供数据传输质量的反馈.这是RTP作为一种传输协议的主要作用,它与其他协议的流量和阻塞控制相关.反馈可能对自适应编码有直接作用,但是IP组播的实验表明它对于从接收机得到反馈信息以诊断传输故障也有决定性作用。向所有成员发送接收反馈可以使\观察员\评估这些问题是局部的还是全局的。利用类似多点广播的传输机制,可以使某些实体,诸如没有加入会议的网络业务观察员,接收到反馈信息并作为第三类监视员来诊断网络故障.反馈功能通过RTCP发射机和接收机报告实现。
(2) RTCP为每个RTP源传输一个固定的识别符,称为标称名或CNAME。由于当发生冲突或程序重启时SSRC可能改变,接收机要用CNAME来跟踪每个成员。接收机还要用CNAME来关联一系列相关RTP会话期中来自同一个成员的多个数据流,例如同步语音和图像。
(3) 前两个功能要求所有成员都发送RTCP包,因此必须控制速率以使RTP成员数可以逐级增长。通过让每个成员向所有成员发送控制包,各个成员都可以独立地观察会议中所有成员的数目。
(4) 可选的功能是传输最少的会议控制信息,例如在用户接口中显示的成员识别.这最可能在\松散控制\的会议中起作用,在\松散控制\会议里,成员可以不经过资格控制和参数协商而加入或退出会议。RTCP作为一个延伸到所有成员的方便通路,必须要支持具体应用所需的所有控制信息通信。
2.3 FFmpeg视频编解码技术
2.3.1 FFmpeg简介
FFmpeg是一个集视频录制、转换和音视频编解码功能于一体的开源C代码库。FFmpeg最初的开发是基于Linux操作系统,但是经过编译和移植后也可以在人多数操作系统中使用。FFmpeg包含了丰富的视频编解码库,支持MPEG、DivX、MPEG-4、
-9-
东北大学毕业设计(论文) 第2章 相关技术
AC3、DV、FLV等40多种编码以及AVI、MPEG、OGG、Matroska、ASF等90多种解码。为了保证编解码质量和可移植性,FFmpeg里很多视频编解码的codec都是从头开发的[5]。
2.3.2 组成
FFmpeg开源库主要由以下一些子库组成[6]:
(1) libavformat:用于生成和解析各种音视频封装格式,配置和获取编解码器的信息和上下文结构。
(2) libavcodec:包含了所有的音视频编解码器。 (3) libavutil:包含了一些工具组件函数。
(4) libswscale:用于在不同的颜色空间进行转换和视频比例缩放等。 (5) libpostproc:用后期的效果处理。
(6) ffmpeg:提供了一些可以直接进行格式转换、编解码的工具。 (7) ffserve:一个HTTP多媒体即时广播服务器。
(8) ffplay:一个简单的用ffmpeg进行解析和解码的播放器。
2.3.3 编码框架
在使用FFmpeg库中的任何功能之前,都必须对FFmpeg进行注册,否则任何codec和format将无法使用,FFmpeg库中的初始化注册功能由av_register_all()函数来实现。第二步要根据所使用的编码格式申请FFmpeg中的编码器,可以使用两种方法来申请编码器,分别是根据编码器的CODEC_ID来申请和根据设置的文件名格式来申请,例如将CODEC_ID设置为CODEC_ID_MPEG4和将文件名后缀.mp4传入申请编码器的函数,都可以申请到MPEG_ 4格式的编码器。FFmpeg支持现有的大多数视频编码器,如MPEG_1、MPEG_2、MPEG_3、H.261、H.263等,但是目前FFmpeg还不支持H.264编码器,如需要H.264编码器,需要将其他的开源H.264库(如X264库)集成到FFmpeg中,本文不加赘述。
在申请好了编码器之后,需要对编码器的各种编码参数进行一些必要的设置以满足不同的要求。其中比较重要的参数有视频尺寸、编码比特率、运动估计算法、GOP大小和像素格式等。视频尺寸即视频的宽度和高度。编码比特率即码率,它决定了编码的质量和压缩率,编码比特率越大,采样率就越高,相应的编码质量也越高,但是压缩率会变小,即需要传送的数据量变大,反之,编码比特率越小,采样率就越低,相应的编码
-10-
东北大学毕业设计(论文) 第2章 相关技术
质量就越低,但是压缩率会变大,传送的数据量也会变小。运动估计算法可以有效地去除帧间的冗余,在传输视频时对于减少网络负载量具有非常重要的意义。GOP(Group of Pictures)大小是指以帧数来表示的一组连续画面的大小,在这组连续的画面所对应的帧中,只需要把第一帧作为I帧,其余帧都可以作为P帧或B帧。像素格式是指视频帧中的像素所使用的颜色空间格式,如YUV420P、YUV422P和RGB24等。在编码器准备就绪开始编码之前,还需要分配编码所需的内存空间,这些内存空间包括一帧原始视频图像大小的临时缓存区、一帧原始视频图像大小的图像存放区和一个输出缓存区,输出缓存区可以在不会发生数据溢出的前提下自行设定大小。
在前期的准备工作完成之后,就可以对视频序列进行编码了。编码的过程为:首先提取出视频序列的一帧,将这一帧图像拷贝到临时缓冲区中。然后利用月FFmpeg提供的sws_scale()方法将图像像素转换为之前设定的像素格式并存放在图像存放区中;最后使用FFmpeg的avcodec_encode_video()方法将这帧图像编码并存放在输出缓存区中等待发送。
当结束编码时,会将之前中请的FFmpeg中的资源和系统内存中的资源进行释放和回收,等待下一次开始编码。编码过程如图2.2所示。
初始化ffmpeg申请编码器视频编码设置编码器参数NY结束?释放资源分配编码缓存区 图2.2 使用FFmpeg编码过程
2.3.4 解码框架
本课题对FFmpeg的解码实现过程与编码过程大致类似,有点需要说明的是在分配待解码图像输入缓冲区的时候,所需申请的内存大小要比实际大一个尺寸,这个尺寸在FFmpeg中定义为FF_INPUT_BUFFER_PADDING_SIZE。这是因为有一些解码器在从输入缓冲区读取视频流的时候会以32位或64位为步长,这就有内存溢出的可能性。在输入缓冲区的后面加入一定长度的保护单元,可以避免这种情况的发生,对解码也不会产生影响。如果在分配输入缓冲区的时候忽略了这一点,将会导致无法解码出正确的图像
-11-
东北大学毕业设计(论文) 第2章 相关技术
数据的情况。解码过程如图2.3所示。
申请解码器NY申请解码器视频解码结束?释放资源申请解码器图2.3 使用FFmpeg解码过程
2.4 本章小结
本章对基于Android的视频通话系统关键技术进行了简单的介绍,并结合本系统介绍了各个技术在实际背景下的具体应用。第一节介绍了Java多媒体框架里在本应用中使用到的重要组件。第二节介绍了RTP/RTCP协议,包括RTP实时传输的原理。第三节介绍了本系统所使用的编解码器,并简单分析了其特点。本章内容是本课题的技术构成,也是本课题能够实现的关键。
-12-
东北大学毕业设计(论文) 第3章 系统分析
第3章 系统分析
系统分析在整个软件开发中有着至关重要的作用,只有通过实际的系统分析才能有更好更实用的系统设计,从而实现出令客户满意的软件产品[7]。本章主要介绍对视频通信系统的需求分析工作,系统的需求来源于项目组专业的需求分析人员与客户交流沟通所得。需求明确,来源可靠,是基于Android视频通话系统需求的一部分。通过详细分析客户需求,初步明确系统的功能性和非功能性需求,其中功能性需求主要通过用例图和详细的用例说明来描述。
3.1 需求分析
3.1.1 系统总体需求
基于Android的视频通话系统主要功能是实现Android系统和PC端之间的视频通话。根据需要本系统只是简单的点到点的视频传输,不需要中间服务器。因此本系统只包含两个客户端。PC端基于Windows操作系统。Android端基于Android 2.3操作系统。两个客户端之间的数据传输通过Wifi。从整体上来看每个客户端都分为两部分,发送端和接收端。由于这两个部分不存在任何联系,因此可以作为两个独立的模块来开发。发送端需要完成从摄像头和麦克风获得原始的数据,将数据编码压缩,然后再发送出去。接收端负责接收数据,将数据解码并显示出来。由于PC端和Android端情况不太一样,因此还需要考虑其它的因素。PC端硬件的复杂多样性,比如有的PC上没有摄像头,有的PC上有多个摄像头。因此必须考虑到硬件检测,并由用户来选择具体使用哪个。为了方便用户使用,在Android端使用SQLite数据库来保存IP地址和端口号。在视频过程中可以实现截屏功能来截取当前图像并保存供用户使用。图3.1为基于Android视频通话系统的运行架构图。
摄像头Wifi智能手机PC
图3.1 基于Android视频通话系统运行架构图
-13-
东北大学毕业设计(论文) 第3章 系统分析
3.1.3 用例分析
根据基于Android的视频通话系统的业务流程和执行过程可以进行相应的角色识别和用例分析。本系统的主要参与者就是视频通话的参与者。
根据以上分析,从而得到PC端的用例模型。整个PC端包含了三个用例,分别是选择硬件设备、开始视频通话、结束视频通话。其中选择硬件设备又包含了选择音频设备和选择视频设备。图3.2是PC端的用例图。
系统<
图3.2 PC端用例图
PC端选择硬件设备用例主要功能是让会话参与者来选择系统硬件设备。当系统启动时会自动进行硬件设备检测并返回检测结果。参与者跟据结果来选择具体使用哪些设备来进行下一步的视频通话。表3.1为选择硬件设备用例的用例规约。
表3.1 选择硬件设备用例
用例名称 用例ID 角色 用例说明 前置条件
选择硬件设备用例 UseCase1
视频通话PC端参与者
该用例主要功能是完成PC端参与者硬件选择功能 进入主界面 参与者动作
基本事件流
1.选择系统硬件设备,用户点击确定按
钮 无 无
开始硬件初始化成功
系统响应
2.系统响应点击事件,跳转至视频准备开始界面
其它事件流 异常事件流 后置条件
PC端视频通话用例是本系统的核心。主要功能是完成开始进行视频通话这一动作。
-14-
东北大学毕业设计(论文) 第3章 系统分析
当用户选择完硬件设备后,系统进入视频通话准备界面。用户点击开始按钮,进入开始视频通话。图3.2为开始视频通话用例。
表3.2 开始视频通话用例
用例名称 用例ID 角色 用例说明 前置条件
开始视频通话 UseCase2
视频通话PC端参与者
该用例主要功能是完成PC端视频通话功能 进入视频通话准备界面 参与者动作
基本事件流
1. 用户点击开始按钮
其它事件流 异常事件流 后置条件
无 无
开始视频成功,显示视频通话画面
系统响应
2.系统响应点击事件,系统开始进行视频通话
PC端结束视频通话用例主要功能用来结束视频通话。在视频通话中点击结束按钮来结束本次结束视频通话。结束视频通话用例如表3.3所示。
表3.3 结束视频通话用例
用例名称 用例ID 角色 用例说明 前置条件
结束视频通话 UseCase3
视频通话PC端参与者
该用例主要功能是完成PC端视频通话结束功能 正在进行进入视频通话 参与者动作
基本事件流
1.用户点击结束按钮
其它事件流 异常事件流 后置条件
无 无
视频通话成功结束
系统响应
2.系统响应点击事件,跳转至视频准备界面
Android端的用例图。包含了四个用例。分别是会话参与者管理、开始会话、视频截图、结束会话四个用例。会话参与者管理又分为添加会话参与者、删除会话参与者、修改会话参与者三个用例。图3.3为Android端用例图。
-15-
东北大学毕业设计(论文) 第3章 系统分析
系统增加会话参与者<
图3.3 Android端用例图
Android端视频通话用例主要任务是完成Android端的视频通话开始这一行为。为了完成视频通话,必须首先选择视频通话对象。然后点击连接按钮进行视频通话。开始视频通话用例如表3.4所示。
表3.4 视频通话用例
用例名称 用例ID 角色 用例说明 前置条件
视频通话 UseCase4
视频通话Android端参与者
该用例主要功能是完成Android端视频通话功能 进入主界面 参与者动作
基本事件流
1.用户点击下拉列表按钮 3.用户选择参与者 5.用户点击连接按钮 无
5.1若找不到该会话参与者,提示无法连接到该参与者 视频通话成功开始
系统响应
2.系统弹出会话参与者候选列表 4.系统选定该参与者 6.系统进入视频通话界面
其它事件流 异常事件流 后置条件
Android端结束视频通话主要用来结束本次视频通话。点击结束按钮来结束本次视频通话,同时释放系统资源。结束视频通话用例如表3.5所示。
表3.5 结束视频通话用例
用例名称 结束视频通话 -16-
东北大学毕业设计(论文) 第3章 系统分析
续表3.5 结束视频通话用例
用例ID 角色 用例说明 前置条件 基本事件流
1.用户点击结束按钮
其它事件流 异常事件流 后置条件
无 无
视频通话成功结束
2.系统结束视频通话,返回主界面
UseCase5
视频通话Android端参与者
该用例主要功能是完成Android端结束视频通话功能 进入视频通话界面 参与者动作
系统响应
Android端截图用例的主要功能是对当前视频画面进行截图并保存。点击保存按钮来保存当前截图。截图用例规约如表3.6所示。
表3.6 截图用例
用例名称 用例ID 角色 用例说明 前置条件 基本事件流
1.用户点击保存按钮
其它事件流 异常事件流 后置条件
无 无
图片成功保存
2.系统显示“保存成功”
截图 UseCase6
视频通话Android端参与者
该用例主要功能是完成Android端截图功能 进入视频界面 参与者动作
系统响应
Android端添加参与者用例主要功能是新增视频会话参与者。点击添加按钮来添加新的参与者。然后输入用户相关信息,最后点击保存。添加参与者用例如表3.7所示。
表3.7 添加参与者用例
用例名称 用例ID 角色 用例说明
添加参与者 UseCase7
视频通话Android端参与者
该用例主要功能是完成Android端添加会话参与者功能
-17-
东北大学毕业设计(论文) 第3章 系统分析
续表3.7 添加参与者用例
前置条件
进入主界面 参与者动作
基本事件流
1.用户点击添加按钮
3.用户添加参与者相关信息,点击确定按钮 无 参与者动作
4.1.1.1若未添加IP地址 4.1.2.1若未添加端口号
4.2.1.1若输入IP地址格式不正确 4.2.2.1若输入端口号格式不正确
后置条件
成功添加新的参与者
系统响应
4.1.1.2系统提示“必须添加IP地址” 4.1.2.2系统提示“必须添加端口号” 4.2.1.2系统提示“IP地址格式不正确” 4.2.2.2系统提示“端口号格式不正确” 系统响应
2.系统进入添加参与者界面
4.系统判断用户的输入是否合法,若合法,返回主界面,若不合法:输入信息为空,则进入4.1;输入信息格式不正确,则进入4.2
其它事件流 异常事件流
Android端修改参与者用例主要功能是修改参与者。点击修改按钮来修改参与者的相关信息,然后点击保存。修改参与者用例规约如表3.8所示。
表3.8修改参与者用例
用例名称 用例ID 角色 用例说明 前置条件
修改参与者 UseCase8
视频通话Android端参与者
该用例主要功能是完成Android端修改参与者功能 进入主界面 参与者动作
系统响应
2.系统弹出会话参与者候选列表 4.系统选定该参与者,回到主界面 6.系统进入修改参与者界面
8. 系统判断用户的输入是否合法,若合法,返回主界面,提示修改成功,若不合法:输入信息为空,则进入8.1;输入信息格式不正确,则进入8.2
基本事件流
1.用户点击下拉列表按钮 3.用户选择参与者 5.用户点击修改按钮
7.用户修改参与者相关信息
其它事件流 异常事件流
无 参与者动作
8.1.1.1若未添加IP地址 8.1.2.1若未添加端口号
8.2.1.1若输入IP地址格式不正确 8.2.2.1若输入端口号格式不正确
系统响应
8.1.1.2系统提示“必须添加IP地址” 8.1.2.1系统提示“必须添加端口号” 8.2.1.2系统提示“IP地址格式不正确” 8.2.2.2系统提示“端口号格式不正确”
后置条件
修改参与者成功
-18-
东北大学毕业设计(论文) 第3章 系统分析
Android端删除参与者用例主要功能是删除指定参与者。选定参与者,然后点击删除。删除参与者用例如表3.9所示。
表3.9 删除参与者用例
用例名称 用例ID 角色 用例说明 前置条件
删除参与者 UseCase9
视频通话Android端参与者
该用例主要功能是完成Android端删除参与者功能 进入主界面 参与者动作
基本事件流
1.用户点击下拉列表按钮 3.用户选择参与者 5.用户点击删除按钮 无 无
参与者删除成功
系统响应
2.系统弹出会话参与者候选列表 4.系统选定该参与者 6.系统提示删除成功,返回系统主界面
其它事件流 异常事件流 后置条件
3.2 系统运行环境与开发环境
3.2.1 运行环境
PC端运行环境如表3.10。
表3.10 PC端运行环境
CPU 内存 硬盘 网卡 操作系统 不低于Pentium III 1GHz 不低于256M 80G 100M Windows XP、Windows Vista、Windows 7 Android端运行环境如表3.11。
表3.11 Android端运行环境
CPU 内存 操作系统 不低于300MHz 不低于128M Android 2.3
-19-
东北大学毕业设计(论文) 第3章 系统分析
3.2.3 开发环境
系统开发硬件环境如表3.12。
表3.12 系统开发硬件环境
CPU 内存 硬盘 网卡 操作系统 不低于Pentium III 1GHz 不低于256M 80G 100M Windows XP、Windows Vista、Windows 7 系统开发软件环境如表3.13。
表3.13 系统开发软件环境
软件产品 Eclipse Android SDK Android NDK Cygwin Microsoft visual studio 版本描述 Indigo Service Release 1 16.0 8.0 1.7.5 2010 承担功能 编程工具 开发包 开发包 Linux平台 编程工具 3.3 系统可行性分析
3.3.1 技术可行性
本系统采用C/S架构,分为两个客户端,运行在两个不同的操作系统上——Windows和Android。因此采用不同的技术来实现。
PC端采用成熟的Java多媒体框架JMF。该核心框架支持不同媒体(如:音频输出和视频输出)间的时钟同步。它是一个标准的扩展框架,允许用户制作纯音频流和视频流。JMF技术提供了先进的媒体处理能力和编码支持,如M-JPFEG、H.263、MP3、RTP/RTSP(实时传送协议和实时流转协议)、Macromedias Flash、IBM的HotMedia和Beatniks的Rich Media Format (RMF)等[8]。JMF 2.1.1还支持广受欢迎的媒体类型,如Quicktime、Microsofts AVI和MPEG-1等。此外,JMF 2.1.1软件中包括了一个开放的媒体架构,可使开发人员灵活采用各种媒体回放、捕获组件,或采用他们自己的定制的内插组件。JMF提供了四种不同的专用版本,满足专业开发人员的各类需求,第一个是一个轻便型版本,它完全采用Java语言编写,适用于任何Java兼容系统。此外,开发人
-20-
东北大学毕业设计(论文) 第3章 系统分析
员还可选择分别适用于Solaris、Windows或Linux等操作系统的性能最优化软件包,以提高性能和能力。JMF框架从发布至今经历了好几代版本的更新,如今已近趋于稳定。应用JMF来进行多媒体开发能够使软件开发人员很容易、快速的为已有的各种程序和客户端Java小程序增添丰富的媒体功能,如流式视频、影像处理等各种应用领域。依托Java平台固有的优势,将“编写一次,处处运行”的能力扩展到了图像、影像和数字媒体等各种领域,从而大大缩减了开发时间和降低了开发成本。
Android端主要采用FFmpeg开源框架来实现视频的编解码。FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。FFmpeg是一个集视频录制、转换和音视频编解码功能于一体的开源C代码库。FFmpeg最初的开发是基于Linux操作系统,但是经过编译和移植后也可以在人多数操作系统中使用。FFmpeg包含了丰富的视频编解码库,支持MPEG、DivX、MPEG-4、AC3、DV、FLV等40多种编码以及AVI、MPEG、OGG、Matroska、ASF等90多种解码。依赖FFmpeg开源库能够高效快速的实现编解码[9]。
3.4 本章小结
本章对系统的原始需求进行了详细的描述,并将原始需求用UML中的用例图的方式描述出来,对每个用例进行了详细的介绍。接着介绍了系统的开发环境以及对系统可行性进行了分析。
-21-
东北大学毕业设计(论文) 第4章 系统设计
第4章 系统设计
本章在第三章对基于Android的视频通话系统详细明确的需求分析的基础上,重点明确系统的具体设计工作,包括框架设计,模块设计,功能设计,数据库的设计等。在系统设计方面主要通过框架图、类图、时序图以及表格来进行详细的描述。
4.1 概要设计
4.1.1 系统软件体系结构的设计
本系统在软件体系结构设计上主要分为多媒体I/O层、多媒体处理层、传输层、网络层等四个层次,如图4.1所示。
多媒体IO层视频系统多媒体对象处理层视频模块媒体采集编码传输音频模块媒体采集编码传输传输层RTP控制RTCP控制网络层UDP协议IP物理层
图4.1 软件体系结构
多媒体IO层:包含系统人机交互模块,主要提供各种媒体特定语义的输入输出、应用实体系统交互功能。
多媒体对象处理层:主要包含音、视频的处理模块,位于客户端,可以直接访问本地资源,如摄像头和麦克风。主要完成分布式多媒体处理功能的对象化封装,提供系统所需的编解码和各种媒体之间的同步控制等。
传输层:含RTP控制模块和RTCP控制模块,本层提供压缩媒体流的组包、解包、发送、接收功能,同时向下屏蔽网络资源,向上提供媒体传输接口[10]。
-22-
东北大学毕业设计(论文) 第4章 系统设计
4.1.2 系统功能模块
根据需求调研结果确定了基于Android的视频通话系统主要功能模块。一共包括八个功能模块,分别是硬件检测模块、数据采集模块、编码压缩模块、数据发送模块、数据接收模块、解码模块、呈现模块以及参与者管理模块。整个系统功能结构如图4.2所示。
基于Android的视频传输系统PC端Android端发送端硬件检测接收端发送端参与者管理接收端数据采集编码数据发送数据接收解码呈现数据采集编码数据发送数据接收解码呈现 图4.2 系统功能模块
4.1.3 模块功能分析
一个良好的软件系统依赖于稳定的系统平台,依赖于先进的技术基础,更依赖于系统的设计与架构。如果对系统的设计与架构既能让各个模块独立地完成各自的任务,又能让各个模块配合工作时得到最优化的执行效率,那么这个软件系统才称得上一个合格的系统[11]。
依据系统的功能需求分析,该系统由两个客户端组成——PC端和Android端。每个客户端又单独包含了若干个模块。在系统中,系统主模块与各个功能模块之间协同配合工作,分工明确,共同实现了本视频通话系统。图4.3描述了基于Android的视频通话系统的总体框架。
-23-
东北大学毕业设计(论文) 第4章 系统设计
无线网络数据发送模块数据接收模块视频编码模块视频解码模块数据采集模块系统UI模块后台数据支持模块 图4.3 系统总体框架
在系统中,系统主模块与各个功能模块之间协同配合工作,分工明确。对系统进行程序开发的过程中,系统各个模块在Android系统架构中的位置关系如图4.4所示。在Android系统架构的四层结构中,最底层 (Android Layer I)为各个硬件及其抽象层。最上层(Android Layer IV)为应用程序的软件实体,而本系统的各个功能模块主要集中在中间两层(Android Layer II and Android Layer III)中。
应用程序系统UI模块后台数据支持模块采集模块显示模块语音模块视频编码模块视频解码码模块数据发送模块数据接收模块摄像头Wifi听筒麦克风 图4.4 各个模块在Android系统架构中的位置关系
-24-
东北大学毕业设计(论文) 第4章 系统设计
下面详细介绍了各个模块的功能。
(1) 硬件检测:由于PC端电脑硬件配置不尽相同,因此在进行视频通话前对于硬件检测十分必要。本系统主要关注于视频采集设备和音频采集设备的情况。硬件检测模块在每次打开系统时都会运行。图4.5为硬件检测模块流程图。
视频设备检测音频设备检测选择设备初始化设备硬件检测模块通知数据采集模块 图4.5 硬件检测流程图
(2) 数据采集:根据所选择的设备来进行数据采集。采集后得到的数据一方面将将摄像头采集到的YUV420P像素格式的原始视频数据传给数据编码模块,另一方面将数据传送给UI线程。在系统运行时,系统UI模块首先会在创建时将视频预览窗口资源准备就绪,当所有资源创建成功后,系统UI会进入start模式,采集模块开始工作。首先是打开摄像头,获得摄像头使用权限。第二步设置采集的参数,包括帧率,视频尺寸等等。然后分配一个缓存区,防止溢出。第四步,设置预览窗口。所有准备工作完毕后就可以开始进行采集了。图4.6为采集模块内部流程图。
打开摄像头系统UI模块onCreate分配缓存区准备视频预览窗口onStart设置视频预览窗口设置采集参数数据采集模块开始采集设置回调入口onStop取消回调入口停止采集回调函数数据传送编码模块
图4.6 采集模块内部流程图
-25-
东北大学毕业设计(论文) 第4章 系统设计
(3) 编码:视频数据具有数据量大,冗余度高的特点。由于在网络中直接传送原始视频数据就需要非常大的带宽开销和网络负载量,实时视频传输等对网络延迟要求非常高的领域是无法满足这个要求的,这就需要在网络传输之前对视频数据进行一定程度的压缩。而视频数据冗余度高的特点恰恰允许对原始视频数据的压缩,即在发送端进行视频编码,相应地在接收端进行视频解码。
本系统采用H263视频编码格式。H.263是国际电联ITU-T的一个标准草案,是为低码流通信而设计的。但实际上这个标准可用在很宽的码流范围,而非只用于低码流应用,它在许多应用中可以认为被用于取代H.261。H.263的编码算法与H.261一样,但做了一些改善和改变,以提高性能和纠错能力。
视频编码模块主要使用FFmpeg库中的接口来实现自己的功能。在初始化阶段,使用av_register_all()方法来注册和初始化FFmpeg库。初始化完成后分别使用avcodec_find_encoder()方法和avcodec_open()方法来申请和扫开一个编码器,编码器的类型由传入的CODEC_ID确定。本系统使用了FFmpeg库中的H263编码器,它的CODEC_ID为CODEC_ID_H263。
编码器中请成功后需要对编码器的参数进行设置,并分配好编码所需的缓存区,这样视频编码模块的准备工作就完成了。数据采集模块会将YUV420P格式的原始视频数据传送至视频编码模块的原始视频缓存区,并通知视频编码模块进行视频编码。编码完成后的数据将传送给数据发送模块。当视频通话结束时会首先通知视频编码模块关闭解码器、释放掉之前分配的缓存空间并从FFmpeg注销。编码模块内部流程图如图4.7所示。
初始化FFmpeg申请编码器采集模块设置编码器参数视频编码模块原始视频缓存区编码关闭编码器释放资源注销FFmpeg视频缓存区发送模块 图4.7 采集模块内部流程图
-26-
东北大学毕业设计(论文) 第4章 系统设计
(4) 数据发送:数据发送模块在系统中的任务是从视频编码模块接收编码后的视频数据,将其封装为RTP包并经山UDP端口发送出去。数据发送模块内部流程如图4.8所示。
因特网一直主要用来提供可靠的数据传送服务,对数据的时延几乎没有什么限制。TCP/IP协议就像多目标广播这样的是为这种类型的交通设计的,而且工作得很好。然而像多目标广播这样的多媒体应用却具有不同的特性,因此就需要不同的协议来提供所需要的服务。
例如,如果你在接收来自因在实时播放因特网的声音、电视或者要求时延很小的其他数据时,使用TCP月P在实时播放过程中就可能会产生抖动或者是不能接受的抖动,使声音或者电视的质量明显下降。实时控制协议(Real-time Transport Protocol,RTP)、实时控制协议(Real-time Transport Control Protocol)就是为实时多媒体在网络上的应用而开发的协议。将压缩编码后数据进行封装。
JMF框架实现了RTP/RTCP实时传输协议。将数据加上RTP头部封装成RTP数据包并发送出去。Android端使用Jlibrtp库中的接口来实现自己的功能。当结束视频通话时,会注销本次RTP会话。图4.8为数据发送模块内部流程图。
数据发送模块设置RTP会话参数设置RTP传输参数创建RTP会话设置目的地址视频编码模块封包并发送数据RTP数据包无线网络注销RTP会话 图4.8 数据发送模块内部流程图
(5) 数据接收:对应于发送模块,数据接收模块在系统中的任务是监听本地UDP端口,当接收到网络发来的RTP数据包或RTCP控制包时,取出其中的视频数据并将数据按照相应的RTP协议解包拼凑成完整的数据帧,然后发送给解码模块进行进一步的处理。数据接收模块内部流程如图4.9所示。
-27-
东北大学毕业设计(论文) 第4章 系统设计
无线网络RTCP数据包数据接收模块设置RTP会话参数设置RTP传输参数创建RTP会话RTP监听接口设置目的地址视频数据存放区注销RTP会话RTP数据包RTCP监听接口视频解码模块
控制信息存放区图4.9 数据接收模块内部流程图
(6) 解码:解码模块的主要功能是将接收模块发送过来的数据解码还原后交给显示模块显示。视频解码模块的开始阶段和结束阶段与视频编码阶段基本相似,是由接收模块进行调度,使用FFmpeg库中的方法具体实现,这里不再赘述。解码模块内部流程图如图4.10所示。
视频解码模块初始化FFmpeg申请解码器接收模块设置解码器参数解码前视频缓存区解码后视频缓存区显示模块解码关闭解码器释放资源注销FFmpeg 图4.10 数据接收模块内部流程图
(7) 显示:将解码后的数据实时的显示出来。当系统运行时,系统系统UI模块首先会在Create模式中创建显示窗口资源,当所有资源都准备就绪之后系统UI进入Start模
-28-
东北大学毕业设计(论文) 第4章 系统设计
式。每当解码模块处理完数据时,它将会首先将这些数据传送至显示模块的待显示数据缓存区之中,然后向系统UI模块发出更新通知,系统UI收到这个通知后即会启动显示模块进行更新。显示模块首先会根据系统UI创建的视频显示窗口尺寸和待显示的视频尺寸来计算视频在显示窗口中的显示位置,最后显示视频画面。显示模块流程图如图4.11所示。
系统UI模块onCreate准备视频预览窗口显示视频画面onStart显示模块设置显示区域onStop解码模块待显示数据缓冲区 图4.11 显示模块内部流程图
(8) 会话参与者管理:会话参与者模块的主要功能是为了方便用户使用本软件进行视频。将IP地址和端口号保存到数据库里面,然后以列表的形式供用户选择。图4.12为会话参与者管理模块图。包括添加参与者、修改参与者、删除参与者、查找参与者四个功能。
会话参与者管理添加参与者修改参与者删除参与者查找参与者 图4.12 参与者管理模块
4.2.3 数据库设计
本系统使用SQLite数据库来实现数据的存储。SQLite作为一款轻型的数据库,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常
-29-
东北大学毕业设计(论文) 第4章 系统设计
的低,在嵌入式设备中,可能只需要几百K的内存就够了。作为移动设备,由于资源有限,SQLite无疑是最好的选择。
在Android端为了避免用户不厌其烦的输入IP地址和端口号,因此设计了一张表来保存其IP地址和端口号。在SQLite中创建数据库Video_Client。
数据库表tb_video_configs结构如表4.1所示。
表4.1 tb_video_configs
字段 _id ip port Name 类型 integer varchar(64) numeric varchar(32) 主键 Yes 外键 空值 No No No No 说明 ID ip地址 端口 名称 4.2 本章小结
本章对基于Android的视频通话系统的设计进行了详细的介绍。根据上一章系统分析做出的需求,确定了系统的各个模块,明确了各个模块的功能了。在此基础上完成了数据库的设计。
-30-
东北大学毕业设计(论文) 第5章 系统实现
第5章 系统实现
本章在上一章对基于Android的视频通话系统详细设计基础上,完成系统整体的实现。主要包括以下模块的实现:硬件检测、数据采集、压缩编码、数据发送、数据接收、解码、数据呈现、会话参与者管理。
5.1 功能子模块的实现
5.1.1 硬件检测模块
硬件检测是视频通话中必不可少的一个环节。视频通话是建立在硬件基础上的,因此在开始视频前必须进行视频检测。视频检测功能的实现是依赖JMF框架来实现的。硬件检测主要在CaptureDeviceDetector类中。其核心代码在detectCaptureDevices()方法中,核心代码如下。
public void detectCaptureDevices() { populateDeviceMap();
if (!hasDSoundCapture) { //判断是否存在Direct Sound捕获组件 autoDetectDSoundCapture(); //检测设备 }
if (!hasJavaSoundCapture) { //判断是否存在Java Sound捕获组件
autoDetectJavaSoundCapture(); //检测是否存在Java Sound捕获组件 }
String osName = System.getProperty(\ //获得系统名字 if (osName.contains(\
detectVFWCapture(); //检测是否存在VFM捕获组件 } else if (osName.contains(\ if (!autoDetectSunVideoCapture()) { autoDetectV4LCapture(); } }
}
//检测音频设备
private void autoDetectDSoundCapture() {
autoDetect(DIRECT_SOUND_AUTO_CLASS);
} //检测视频设备
private void autoDetectJavaSoundCapture() { autoDetect(JAVA_SOUND_AUTO_CLASS);
}
-31-
东北大学毕业设计(论文) 第5章 系统实现
5.1.2 数据采集模块
数据采集模块主要任务是对摄像头进行控制和读取,一方面将本方的视频预览画面传送到系统UI模块中,另一方面将摄像头采集到的YUV420P像素格式的原始视频数据传送到编码模块。
PC端的数据采集使用JMF框架的CaptureDeviceManager组件来进行。首先通过CaptureDeviceManager类使用查询机制和注册表来定位设备,然后将设备的信息放入CaptureDeviceInfo对象中返回。在CaptureDeviceInfo中包含了设备的相关信息。利用JMFUtils工具类中的initializeCaptureDataSource()方法获得数据采集的数据源。至此数据采集的准备工作就已经完成了。接下来需要做的就是利用得到的数据源来创建媒体处理器对象和媒体播放器对象。模块的核心代码如下:
CaptureDeviceInfo videoDevice = configPanel.getVideoDevice(); Format videoFormat = configPanel.getVideoFormat();
CaptureDeviceInfo audioDevice = configPanel.getAudioDevice(); Format audioFormat = configPanel.getAudioFormat(); try {
dataSource = createDataSource(videoDevice, videoFormat, audioDevice, audioFormat); //创建数据源对象
} catch (Exception e) {
if (dataSource == null) { dataSource = createDataSource(videoDevice, videoFormat, audioDevice, audioFormat); } }
DataSource cloneableDataSource = Manager.createCloneableDataSource(dataSource);//创建克隆数据源
DataSource processorDataSource = ((SourceCloneable)cloneableDataSource).createClone(); player = Manager.createRealizedPlayer(cloneableDataSource); //创建媒体播放对象 processor = Manager.createProcessor(processorDataSource); //创建媒体处理对象
processor.addControllerListener(new MyControllerListener(processor));//绑定媒体处理对象监听器
Android端的视频采集使用Google提供的API来实现。主要使用Android系统的Camera类、SurfaceView类和MediaRecorder类来实现。Camera类是控制摄像头的主要API。SurfaceView类用于向用户提供摄像头预览。MediaRecorder类用于录制视频。MediaRecorder的setOutputFile()可以将数据保存到本地文件,因此可以考虑创建一个LocalSocketServer。设置MediaRecorder的输出文件为LocalSocket.getFileDescritpor()。开启另一个线程来获得数据。核心代码如下。
if(videoLocalThread == null) {
videoReceiverSocket = new LocalSocket(); try { videoServiceSocket = new LocalServerSocket(\创建本地Socket videoReceiverSocket.connect(new LocalSocketAddress(\ //获得接收端的socket
-32-
正在阅读:
毕业设计论文04-27
四年级语文下册词语字帖09-03
钻井液工中级理论知识试卷03-27
把时间当做朋友03-18
我爱阅读作文350字06-21
膝关节损伤10-23
2016年高考数学选择题、填空题75分练01-06
审计学基础复习题及参考答案12-10
文艺部年终2022年工作总结通用例文08-03
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 毕业设计
- 论文
- 金蝶K3练习题
- 惠州市2014届高三4月模拟考试(文数)惠州一模
- XX反恐联勤联动工作机制
- 7.2力的测量
- 2018-2024年中国黄磷行业深度调研与投资战略研究报告目录
- 国际税法计算题及答案
- 2 地质构造及地质图
- 上课用1-从实验学化学2-化学物质及其变化
- 2018年养老院建设现状及发展趋势分析 (目录)
- oracle基础知识整理
- 商务谈判试卷及答案
- ABB机器人程序实例ROBOT studio 6.01(附带与工业相机网络通讯实
- 国际经济学习题 有答案 权威大学资料
- 2016-2022年中国电路板行业运营现状及十三五竞争战略分析报告
- 承发包工程及外来人员安全管理规定
- 济宁企业名单
- 戏曲鉴赏作业+期末考试答案
- 苍龙逐日1028(武功秘籍)
- 第五章受弯构件斜截面承载力计算题参考答案
- 关于开展“我的家园我维护” 园区绿化养护工作的通知(含草木养