毕业设计论文(7)

2019-06-17 19: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-


毕业设计论文(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:诸子百家年谱

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: