常显示本地文件及目录列表;点击网络文件列表选项是否正常显示远端流媒体服务器中流媒体文件列表。
表3.6 文件列表用例说明
Table 3.6 Use case instruction of file list
描述项目 描述内容 用例名称 文件列表管理 用例描述 打开播放器,选择文件列表查看按钮
选择本地文件列表选项,查看本地文件列表
选择网络文件列表选项,查看远端流媒体服务器中文件列表。
指定远端资源,输入远端资源网址,直接获取网络资源。 参与者 用户 前置条件 进入流媒体客户端系统 后置条件 查看到本地文件目录及文件结构
查看到远端流媒体服务器中文件列表
匹配到远端流媒体服务器中的指定音/视频文件
② 播放列表管理
该用例主要用于描述以智能的方式搜索出手机里面的所有视频文件。
表3.7 文件列表用例说明
Table 3.7 Use case instruction of intelligent search
描述要素 描述内容 用例名称 智能搜索 用例描述 播放器处于运行状态
点击主菜单中的Search选项
进入智能搜索框
输入想要搜索的视频文件的前几个字符,自动弹到匹配的文件名的地方。 参与者 用户 前置条件 播放器处于播放状态 后置条件 自动匹配到相应正确的视频文件名的地方
3.3 系统非功能需求
在对该系统功能需求进行详细分析的基础上,下面将从界面美观性、传输实时性、音/视频质量、编解码效率4个方面描述系统需具备的非功能需求。
① 界面美观性
系统的设计是为了满足用户的某些需求,为用户提供便利。因此,在系统设计实现时必须考虑到用户的体验,假如一个系统的易用性很差,那么即使该系统有再强大的功能也不能被用户接受,该系统只会是一无是处的。本该统的目的是为了给用户提供流畅的音/视频播放,那么就需要各功能模块配合密切,在界面设计上满足用户的习惯,做到界面美观、操作简单。
② 传输实时性
传输实时性对于该系统至关重要,传输的实时性强可以使音/视频播放更加流畅,不会出现音/视频停顿、丢包、乱序的现象,极大的提高用户体验。
③ 音/视频质量
音/视频的质量直接影响到用户观看音/视频的效果,如果图像的质量非常低下,用户根本无法看清屏幕中的图像,那么这个系统的设计必定是失败的。用户无法用其进行实时音/视频的观看,系统也不能达到预期的效果。
④ 编解码的效率
前面谈到了音/视频的质量,而与传输、播放质量相关的便是音/视频的编解码问题,根据技术分析,H.264音/视频编解码技术具有较好的编解码比率,因此本系统为保证流畅可用性,应具有高的编解码效率。
3.4 本章小结
本章主要分析了该流媒体客户端软件的功能需求和非功能需求,从整个系统的功能出发,描述了本人的设计工作部分--音/视频播放子系统的功能需求,并使用UML用例图进行了详细的需求分析,进一步明确了系统的需求,为下一步系统设计做好了铺垫。
4 基于Android平台的流媒体客户端软件设计
4.1 系统运行环境
该系统运行的软、硬件环境如表4.1所示。
表4.1 系统运行环境
Table 4.1 Runtime environment of the system
序号 参数名称 参数值 1 硬件环境 客户端:Android手机,带摄像头,支持网络。
服务器端:CPU 2.5HZ以上、内存4G、支持上网。 2 软件环境 客户端:Android 2.3以上系统,移植FFMPEG。
服务端:Linux系统,Wowza Media Server流媒体服务器、JRE环境、流媒体播放器等。 3 编译环境 选择Linux系统作为.so文件的编译环境,在进行Android编程时选用Eclipse集成开发环境并安装ADT(Android Development Tools,Android开发工具),运用Java语言进行编程。
在进行FFMPEG移植时需要用Android NDK进行交叉编译,
系统数据库选用内置的轻量级的SQLite数据库。
4.2 系统应用结构设计
该系统主要分为了音/视频采集子系统和音/视频播放子系统,当进行音/视频播放时,不管是播放本地文件还是网络流媒体文件,都需要先获取音/视频数据。前者是从本地获取,后者是从网络传输中获取。当获取到音/视频数据后,需要对音/视频数据进行解码,最后将解码后的数据展现给用户。
由于从本地获取的音/视频数据与从网络上获取的音/视频数据的存取方式不同,为保证上层的解码方式统一,需要对这些数据进行预处理以使其格式相同,方便上层采用相同的解码方式进行解码播放。
该系统在设计时采用分层设计模式,将系统分为三个层次:用户界面层、数据处理层和数据提取层。各层之间独立完成任务,降低了系统的耦合程度,增强了系统中各层次的可扩展能力。系统的分层结构如图4.1所示。
系统的最底层为数据提取层,主要负责提取音/视频数据,并交由给上层进行处理。获取数据的途径分为本地获取和网络获取。当从本地获取时,只需读取本地文件;当进行网络获取时,需要向流媒体服务器发出请求,由流媒体服务器将流媒体数据发送给客户端,客户端通过网络进行实时读取。从网络获取数据主要分为3个阶段:会话建立阶段、数据接收阶段和数据缓存阶段。在进行会话建立时采用的是RTSP协议,通过此协议可以在流媒体服务器与流媒体客户端之间建立媒体传输协商信息,包括音/视频数据类型、音/视频数据传输协议和端口、音/视频数据格式等。
数据处理层主要负责将数据提取层提取到的音/视频数据进行解码操作。然而,由于音/视频的来源不同,从本地读取的文件与从网络读取的流媒体文件所具有的格式不同,要想对他们进行统一的解码操作就得先对这些数据进行预处理。对于本地文件,需要按照其媒体格式获取音/视频信息及字幕等信息,然后按照帧放入解码缓冲区,等待对其解码操作;对于流媒体文件,需要先去除RTP包的头部信息,提取音/视频信息组成帧,并将其放入解码缓冲区,等待解码。
系统的最上层为用户界面层,主要负责与用户进行交互。用户在界面上对系统进行操作,例如播放本地文件、播放网络流媒体数据、对音/视频采取暂停、播放、快进、快退等操作。
图4.1 系统分层结构图
Fig. 4.1 The layer structure diagram of the system
4.3 系统网络拓扑结构
该流媒体客户端软件的网络拓扑结构如图4.2所示。
图4.2 系统网络拓扑结构
Fig. 4.2 The network topology of the system
该系统中流媒体数据主要通过Android手机通过录制等方式采集而来,通过无线网络传到服务器,最终由服务器将信号推送给流媒体服务器,流媒体服务器负责保存这些音/视频数据,并将拥有音/视频的信息发布到网上,供用户点击播放。 当流媒体客户端软件请求播放某条流媒体数据时,流媒体服务器将数据发送到客户端,并实时的播放音/视频数据。
4.4 音/视频播放模块设计
该模块采用多线程并发执行机制,首先由主线程进行系统初始化,然后启动音/视频数据接收线程、音/视频数据预处理线程和音/视频数据解码播放线程。图4.3展示了该模块的执行流程:
① 系统主线程进行系统初始化。
② 音/视频接收线程判断接收来源,若接收数据来源为本地文件,那么系统会
读取本地文件音/视频数据并解析,将解析后的数据放入缓冲区待下一步操作;若接收数据来源为网络流媒体数据,系统会读取流媒体服务器发来的音/视频数据。
③ 进行RTP解析,解析后将与本地文件解析相同格式的数据放入缓冲区,待
下一步统一操作。
④ 取出缓冲区的数据并进行解码,该系统采用FFMPEG解码H.264的编码,
并调用Android函数库将音/视频数据播放出来,供用户进行观看。
图4.3 音/视频播放执行流程
Fig. 4.3 The execute procedure of audio/video play
该模块主要分为数
上一篇:
基于Android平台的手机电子书阅读器设计
下一篇:
试论APP广告在手机中的应用