毕业论文基于流媒体软件的设计与开发_第1页
毕业论文基于流媒体软件的设计与开发_第2页
毕业论文基于流媒体软件的设计与开发_第3页
毕业论文基于流媒体软件的设计与开发_第4页
毕业论文基于流媒体软件的设计与开发_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

河南大学物理与电子学院本科毕业论文编号:河南大学2015届本科毕业论文基于流媒体软件的设计与开发 论文作者姓名: 作 者 学 号: 所 在 学 院: 物理与电子学院 所 学 专 业: 网络工程 导师姓名职称: 耿涛 副教授 论文完成时间: 2015年5 月1日 目 录摘 要:10 前言11 流媒体介绍21.1 流媒体播放流程21.2 流媒体传输技术方面解决的问题31.3 流媒体的应用42 开发环境介绍42.1 Xcode开发平台42.2 服务器LeanCloud42.3 数据库sqlite352.4 系统架构53 软件设计与分析63.1 要解决的技术问题63.2 系统核心技术分析63.3 可行性分析63.4 要解决的软硬件要求63.5 软件功能73.6 系统流程图84 编码实现104.1 推荐页功能实现104.2 热门页功能实现104.3 发布页功能实现114.4 个人页功能实现134.5 下载页功能实现145 系统测试与运行195.1 测试的定义与目的195.2 测试环境195.3 测试的流程与云溪195.4 测试小结206 总结20参考文献2121基于流媒体软件的设计与开发(河南大学物理与电子学院,河南 开封,475004)摘 要: 本文主要研究基于流媒体软件的设计与开发。具体分析了软件设计与开发的流程以及流媒体相关技术。以流媒体软件的设计与开发详细讲述软件开发和软件的实现过程以及流媒体技术的使用。该软件面向二次元亚文化群体的移动端声音内容平台。具有分享声音、关注圈内明星用户最新动态、随身获取有趣的声音内容,并实时参与其中以及可以通过图片配合声音可以让你体会创作视频的成就。关键词:软件设计, 流媒体, Objective-C, iOSStreaming media software design and developmentZHAO PENG(School of Physics and Electronics, Henan University, Henan Kaifeng 475004, China)Abstract: This paper mainly studies based on streaming media software design and development. Software design and development process are analyzed in detail, and streaming media technology. With streaming media software design and development of bed and the implementation process of software development and software in detail, and the use of streaming media technology. The software for secondary yuan subculture groups of mobile voice content platform. With a sharing voice, attention circles star users the latest trends, had access to the voice of the interesting content, and involved in real-time, and can through the pictures with sound experience allows you to create video. Key words: Sortware design , Streaming media , Objective-C, iOS0 前言随着社会的发展与进步,手机的应用已与每个人都不可分开,相同手机软件也伴随而生,本软件主要是一款播放器,那么作为播放器软件当中最重要的是什么呢?一款好的播放器为当中之最。本课题主要研究了基于流媒体播放器的软件设计与开发,那么什么是流媒体呢?简单的来说就是你可以边下载边播放的一种技术。在流媒体技术还不成熟的时候,人们在播放视频的时候只有下载到本地后才能观看,这样浪费了大量的时间和精力,随着社会的发展,流媒体技术的成熟,用户可以边播边下载节省了大量的时间和精力,流媒体技术也得到了广泛的应用。在目前而言移动终端的发展让人惊叹,移动终端走人了家家户户,随之而来的是基于终端的软件也跟着火了起来,软件不想硬件是可见的,他是一个看的见摸不着的存在,在软件中可以实现强大的功能,随着互联网的发展,人们可以做到足不出户便知天下,这依赖于互联网的发展。互联网软件给人们的生活带来了便利1 流媒体介绍流媒体技术是一种专门用于网络多媒体信息传播和处理的新技术,该技术能够在网络上实现传播和播放同时进行的实时工作模式,相对于其他的一些音、视频网络传输和处理技术,流媒体比较成熟和使用,目前已经成为网上音、视频(特别是实时音视频)传输的主要解决方案。 流媒体与常规视频媒体之间的不同在于,流媒体可以边下载边播放。“流”的重要作用体现在可以明显的节省时间,由于常规视频媒体文件比较大,并且只能下载下来后才能播放,因此下载需要很长的时间,妨碍了信息的流通,流媒体的应用是近几年来Internet发展的产物,广泛应用于远程教育、网络电台、视频点播、收费播放等。 目前,制约流媒体宽带应用发展的关键在于互联网的服务质量,流媒体从理论上解决了大容量网络多媒体数据传输的实时性要求问题,但是由于大型分组交换网络中数据传输受到诸多因素的影响,网络的状况是不可靠的,其带宽、负荷等的变化难以满足流媒体宽带业务的实时性服务质量要求。并且常常造成播放卡壳、延迟、视频抖动剧烈,给使用者感官造成很大影响,所以解决好流媒体网络应用的服务质量问题对于流媒体宽带应用是极为重要的。(1) 流媒体播放流程流媒体播放之所以可以边播边看是由于在流媒体播放中存在3个缓存池,一边往缓存池中添加数据一边冲缓存池中取数据,而为什么是3个缓存池呢?因为3个缓存池可以做到循环利用,下面介绍下流媒体的播放流程如下图1所示。图1 流媒体播放流程(2) 流媒体传输技术方面解决的问题在网上进行流媒体传输,所传输的文件必须制作成适合流媒体传输的流媒体格式文件。用通常的格式存储的多媒体文件容量很大,若在现有窄带网络上传输则要花费很长的时间,如果遇网络繁忙,还会造成传输的中断。另外,通常格式的流媒体也不可以按照流媒体的传输协议进行传输。这里应该注意两点:其一是选择适当的压缩算法来进行压缩,这样生成的文件容量就会较小。其二是要向文件中添加流式信息。(3)流媒体的应用流媒传输体技术是在Internet媒体传播方面起到了重要作用,它方便了人们在全世界范围内的信息、情感交流,其中视频的点播、远程教育、视频会议、直播、网上新闻发布、网络广告等方面的应用也更加空前广泛。2 开发环境介绍 开发者在开发的过程中需要相应的开发环境,在iOS开发中由于苹果将开发环境都集成在了Xcode中,所有在开发中只需要按照好Xcode即可进行开发任务。(1) Xcode开发平台Xcode是苹果公司向开发人员提供的集成开发环境(非开源),用于开发Mac OS X,iOS的应用程序。3其运行于苹果公司的Mac操作系统下。不管你用C、C+、Objective-C或Java编写程序,在AppleScript里编写脚本,还是试图从另一个奇妙的工具中转移编码,你会发现 Xcode 编译速度极快。每次操作都很快速和轻松。(2) 服务器LeanCloudLeanCloud简单的来说就是一个第三方的SDK,为开发者提供了网络存储数据,其操作类似于数据库,它提供了一系列的方法给开发者,其中最基本就是上传数据,修改数据,删除数据,查找数据。自 2013 年 9 月发布以来,已经吸引了近万移动应用和开发者加入。LeanCloud提供 数据存储 、实时消息、消息推送 以及 统计分析 服务,全面涵盖移动应用开发的需求;全面支持 iOS、Android、web 等多个平台。帮助开发者摆脱繁重的后端开发负担,最大限度地缩短开发周期和加快迭代速度,在激烈的市场竞争中胜出。在 LeanCloud 上,数据存储是围绕 AVObject 进行的。每个 AVObject 都包含与 JSON 相兼容的键值对(key-value)数据。该数据不需要定义模式(schema),因此不用提前指定 AVObject 都有哪些键,只要直接设定键值对即可。(3) 数据库sqlite3SQLite作为一种嵌入式的关系型轻量级的数据库,在本软件设计中将使用第三方库FMDB。由于手机中嵌入了轻量级的数据库,所有在开发中使用SQLite。SQLite主要执行SQL语句,在本软件设计中主要执行增删改查的功能处理应用数据然后返回给客服端。(4) 系统架构iOS系统架构图如表2所示。表2 iOS系统结构iOS系统架构第一层Cocoa Touch第二层Media第三层Core Services第四层Core OS Layer核心操作系统层(Core OS Layer):包括内存的管理以及文件系统、电源的管理和一些其他的操作系统的任务。它能直接和硬件设备进行交互。包括以下这些组件:OS X Kernel Mach 3.0 BSDSocketsPower MgmtFile SystemKeychain CertificatesSecurityBonjour核心服务层(Core Services):我们可以通过它来访问IOS的服务。它包括以下这些组件:Collections Address Book NetworkingFile Access SQLiteCore LocationNet Services Threading PreferencesURL Utilities媒体层(Media):通过它我们能在程序中使用各种媒体文件,进行音频和视频的录制,图形绘制,以及制作基础的动画效果。它包括以下这些组件:Core Audio OpenGL Audio MixingAudio Recording Video Playback JPG,PNG,TIFFPDFQuartz Core AnimationOpenGL ES可触摸层(Cocoa Touch):为我们的应用开发提供了各种实用的框架,并且大部分与用户界面UI有关,本质上来说它负责用户在IOS设备上的触摸交互操作。它包括以下这些组件:Multi-Touch EventsCore MotionCameraView HierarchyLocalizationAlertsWeb Views Image Picker Multi-Touch Controls在Cocoa Touch层中的很多技术都是基于Objective-C语言的。Objective-C语言为iOS提供了像集合、文件管理、网络操作等支持。3 软件设计分析在做一款软件之前首先要对该软件进行分析与设计,设计做的是软件的原型图,分析做的是软件的可行性。在对软件做设计分析是主要有以下几个问题:(1)要解决的软硬件要求在做iOS开发的时候由于对软硬件要求相对来高,故要考虑到本身的经济能力,下面对iOS开发中的软硬件分析。表3 硬件需求手机电脑数据线WIFI数量苹果手机一台苹果电脑一台若干条信号良好表4软件需求PhotoshopXcode描述图片处理工具iOS开发工具(2)要解决的技术问题流媒体的播放需要相关的技术支持,图片的处理与美化,需要解决,还有就是在开发过程可能会遇到bug,这些都是问题。IOS开发,需要相关人员有一定的IOS开发经验。(3)系统核心技术分析在基于流媒体软件的开发过程中,视频的播放技术当然是核心技术,有一个很好的播放器,能够支持主流的视频格式,能够支持硬解和软解,能够适应大部分的屏幕。这些都是视频软件的核心技术。(4)可行性分析1 技术可行性分析对于本视频软件主要取决于本人是否有一定的IOS开发经验,是否有很强的代码编写能力,是否有对事务流程的分析能力。依据目前IOS的发展,视频的开发已经不是问题,本人的技术也能达到要求。因此,在技术上是可行的。2 经济可行性分析该软件是在Mac os系统电脑中开发的,一台电脑加上一部手机,数据线,鼠标器其他部件,都是符合我的经济水平的,加上自己的技术支持,都是处于消耗钱财比较低的,因此在经济上完全可行。(5) 软件功能本软件主要功能模块有:推荐页、热门页、广场页、上传页、个人页等。其中推荐页是为用户推荐优质的作品供用户浏览,热门页又分为2大板块,其一是日榜,经过相应的排名算法将一天内的作品按名次展示,另一个是周榜,顾名思义是将一周内优质的作品按名次展现,其中排名算法是对该作品的各个方面综合加权,广场页收集了软件中的各种标签,也叫标签系统,每个作品会挂到一个标签下,这样用户可以在广场页快速的找到对应标签的所有作品,上传页是提供给用户上传作品以及创作作品的,个人页是对用户的系统设置。(6) 系统流程图下面简单介绍一下软件系统流程:软件采用客服端-服务器模式。其中主要拨快分为三大模块,第一数据库模块,第二网络数据模块,第三是数据展现模块。下面简单介绍下软件系统流程。1 数据流程客服端上传数据到服务器端客服端将数据保存在本地数据库中,以便在没有网络的情况下是软件有操作。性。数据库客服端服务器客服端向服务器请求数据,将数据展现在客服端上。图 3 数据流程2 操作流程表 5 操作流程表本地数据库第三方登录服务器用户服务器 第三方登录 返回成功 登录成功后,请求用户信息 返回用户信息 用户浏览请求音频信息 返回音频信息 用户点击播放 用户点击收藏 查找本地数据库收藏 返回收藏信息 用户点击播放历史 查找本地数据库历史 返回播放历史信息图3.2用户下载音频基于本地数据库历史返回下载信息4 编程与实现(1)推荐页功能实现在推荐页中主要是通过接口从服务其中读取数据,将推荐的数据绑定到手机UI界面中。代码如下:AVQuery是一个查询对象,通过includeKey去包含查询的数据。AVQuery *hotQuery = hot query; hotQuery whereKey:visible equalTo:NSNumber numberWithInt:1; hotQuery addAscendingOrder:index; hotQuery includeKey:coverFile; hotQuery.cachePolicy = kAVCachePolicyNetworkElseCache; hotQuery findObjectsInBackgroundWithBlock:(NSArray *objects, NSError *error) /objects为查询返回的所有数据 里面装的全是AVObject对象;AVQuery是创建一个查询,通过where限制查询条件,最终返回我们需要查询的数据objects。当我们拿到数据后在本地对数据进行本地结构化处理后让后绑定到UI页面中最终展现给用户。(2) 热门页实现热门页的功能包括2部分:一部分是日榜,收集了用户最新上传已经播放量和点击量最高的做平。另一部分是周榜,展现来一周以来的作品受欢迎程度,即一周排行榜。代码实现如下:读取leanCloud数据:首先从缓存加载完成在从网络加载一遍并跟新缓存。这样的目的是防止在没有网络的情况下打开本软件一片空白产生不好的用户体验。 AVQuery *query = sound query;query whereKey:type equalTo:NSNumber numberWithInt:LongSoundType;if (SoundQueryTypePopularPlayer = soundQueryType) query includeKey:user; query includeKey:root; query includeKey:coverFile; query includeKey:soundFile; query includeKey:root.user; query includeKey:root.coverFile; query includeKey:root.soundFile; query.limit = limit;skip在这里是做分页使用的,由于数据量较大一次查询较为困难,古使用分页查询数据,skip为查询跳过的初始数量。 if (skip 0) query.skip = skip; if (orderFieldType = OrderFieldTypeRank1) query addDescendingOrder:rank1; query addDescendingOrder:createdAt; else if (orderFieldType = OrderFieldTypeRank2) query addDescendingOrder:rank2; query addDescendingOrder:createdAt; else if (orderFieldType = OrderFieldTypeDefault) query addDescendingOrder:createdAt; if (isLoadCache) query.cachePolicy = isLoadCacheQuery; else query.cachePolicy = isNotLoadCacheQuery; NSError _autoreleasing *error = nil; NSArray *array = query findObjects:&error; 在上述代码中我们可以看到很多的includeKey,它的作用就是我们在查询的时候如果查询的结果中还有其他的AVObject对象时,我们希望服务器也要将这些对象的数据返回给客服端。(3) 发布页功能的实现iOS开发中播放音乐可以使用MPMusicPlayerController类来实现,播放视频可以使用MPMoviePlayerController和MPMoviePlayerViewController类来实现,同时MPMediaPickerController 类可以用于从系统媒体库中选择媒体播放。这几个类都包含与MediaPlayer.framework框架中。-(void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollectionself.myMusicPlayer = nil;self.myMusicPlayer = MPMusicPlayerController alloc init;self.myMusicPlayer beginGeneratingPlaybackNotifications;NSNotificationCenter defaultCenter addObserver:self selector:selector(musicPlayerStatedChanged:) name:MPMusicPlayerControllerPlaybackStateDidChangeNotification object:self.myMusicPlayer;NSNotificationCenter defaultCenter addObserver:self selector:selector(nowPlayingItemIsChanged:) name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification object:self.myMusicPlayer;NSNotificationCenter defaultCenter addObserver:self selector:selector(volumeIsChanged:) name:MPMusicPlayerControllerVolumeDidChangeNotification object:self.myMusicPlayer;self.myMusicPlayer setQueueWithItemCollection:mediaItemCollection;mediaPicker dismissViewControllerAnimated:YES completion:nil;(4) 个人页功能实现在个人页中主要是一些软件的设置功能,其中包括分享功能、意见反馈、关于我们、消息推送、睡眠定时等功能。其中也有用户的一些个人信息展现的逻辑功能,包括用户关注列表、粉丝列表、作品列表、下载列表、动态列表等。1定时功能实现实现定时功能的原理是在应用程勋中启动一个定时器,在预定的时间后去执行某块代码,具体实现如下。_timer = NSTimer scheduledTimerWithTimeInterval:1.0 block:/timerRemain是定时的时间。 _timerRemain-; if (_timerRemain = 0) /关闭定时器 _timer invalidate; _timerTitleLabel.text = ; _isStartTimer = NO; _timerSwitchButton.selected = _isStartTimer;/关闭播放器 BWSoundManager sharedManager stop; NSNotificationCenter defaultCenter postNotificationName:stopSoundChangePlayerImage object:nil; else _timerTitleLabel.text = TimeUtil getTimeStrStyle3:_timerRemain; repeats:YES;2消息推送功能实现UIApplication sharedApplication registerForRemoteNotificationTypes: UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound;3清除缓存功能实现-(void)clearCacheNSArray*pathcaches=NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);NSString*diskCachePath=pathcachesobjectAtIndex:0;diskCachePath=NSStringstringWithFormat:%/com.hackemist.SDWebImageCache.default,diskCachePath;NSFileManager*fileManage=NSFileManagerdefaultManager;if(fileManagefileExistsAtPath:diskCachePath)NSError*error;fileManageremoveItemAtPath:diskCachePatherror:&error;if(error)SGInfoAlertshowInfo:缓存删除失败bgColor:UIColordarkGrayColorCGColorfgColor:UIColorwhiteColorCGColorinView:UIApplicationsharedApplication.keyWindowvertical:0.8;elseSGInfoAlertshowInfo:缓存删除成功bgColor:UIColordarkGrayColorCGColorfgColor:UIColorwhiteColorCGColorinView:UIApplicationsharedApplication.keyWindowvertical:0.8;(5) 下载功能实现在下载中我使用了FMDB第三方框架的数据库,在数据库使用中建立3张表分表记录了音频信息、多图信息、用户信息。表6 下载结构字段objectIdtitlesizelengthalbumObjectIdisFinishedcreatedAtsoundURL介绍主键,对应唯一的一个音频音频的标题音频的大小。单位为KB音频的播放时长,单位S音频对应的专辑的唯一标示objectId标志音频是否下载完成音频创建的时间音频封面图片的网络地址表7 音频信息字段objectIdsoundObjectIdstareTimeimageUrl介绍主键,对应了每一张多图多图对应的音频多图出现的时间图片的URL地址表8 多图信息表字段objectIdtitlealbumUsercoverURL介绍主键,专辑的唯一标识专辑的名字专辑作者专辑封面的网络地址在上述3个表中分表记录了音频信息,音频对应的专辑的信息以及音频对应的多图信息。由于使用了FMDB框架在实现增删改查时只需调用想要的方法即可实现具体代码实现如下。这里是ASIHttpRequest代理回调方法,在该方法中处理下载的数据,主要做的是本地结构化数据的存储已经处理该文件是否已经存在或已经下载逻辑。-(void)beginRequest:(FileModel*)fileInfo isBeginDown:(BOOL)isBeginDown for(ASIHTTPRequest *tempRequest in self.downinglist) /* 注意这里判读是否是同一下载的方法,asihttprequest 有三种url: url,originalurl,redirectURL 经过实践,应该使用originalurl,就是最先获得到的原下载地址 */ NSLog(%,tempRequest.url absoluteString); if(tempRequest.originalURL absoluteStringlastPathComponent isEqualToString:fileInfo.fileURL lastPathComponent) if (tempRequest isExecuting&isBeginDown) return; else if (tempRequest isExecuting&!isBeginDown) tempRequest setUserInfo:NSDictionary dictionaryWithObject:fileInfo forKey:File; / tempRequest cancel; self.downloadDelegate updateCellProgress:tempRequest; return; fileInfo.isFirstReceived=YES; NSFileManager *fileManager=NSFileManager defaultManager; NSData *fileData=fileManager contentsAtPath:fileInfo.tempPath; NSInteger receivedDataLength=fileData length; fileInfo.fileReceivedSize=NSString stringWithFormat:%ld,(long)receivedDataLength; NSLog(start down:已经下载:%,fileInfo.fileReceivedSize); ASIHTTPRequest *request=ASIHTTPRequest alloc initWithURL:NSURL URLWithString:fileInfo.fileURL; request.delegate=self; request setDownloadDestinationPath:fileInfo targetPath; request setTemporaryFileDownloadPath:fileInfo.tempPath; request setDownloadProgressDelegate:self; request setNumberOfTimesToRetryOnTimeout:2; / request setShouldContinueWhenAppEntersBackground:YES; / request setDownloadProgressDelegate:downCgress;/设置进度条的代理,这里由于下载是在AppDelegate里进行的全局下载,所以没有使用自带的进度条委托,这里自己设置了一个委托,用于更新UI request setAllowResumeForFileDownloads:YES;/支持断点续传 request setUserInfo:NSDictionary dictionaryWithObject:fileInfo forKey:File;/设置上下文的文件基本信息 request setTimeOutSeconds:30.0f; if (isBeginDown) request startAsynchronous; /如果文件重复下载或暂停、继续,则把队列中的请求删除,重新添加 BOOL exit = NO; for(ASIHTTPRequest *tempRequest in self.downinglist) if(tempRequest.url absoluteStringlastPathComponent isEqualToString:fileInfo.fileURL lastPathComponent ) self.downinglist replaceObjectAtIndex:_downinglist indexOfObject:tempRequest withObject:request ; exit = YES; break; if (!exit) self.downinglist addObject:request; NSLog(EXIT!-:%,request.url absoluteString); -(void)resumeRequest:(ASIHTTPRequest *)request NSInteger max = maxcount; FileModel *fileInfo = request.userInfo objectForKey:File; NSInteger downingcount =0; NSInteger indexmax =-1; for (FileModel *file in _filelist) if (file.isDownloading) downingcount+; if (downingcount=max) indexmax = _filelist indexOfObject:file; /此时下载中数目是否是最大,并获得最大时的位置Index if (downingcount=max) FileModel *file = _filelist objectAtIndex:indexmax; if (file.isDownloading) file.isDownloading = NO; file.willDownloading = YES; /中止一个进程使其进入等待 for (FileModel *file in _filelist) if (file.fileName isEqualToString:fileInfo.fileName) file.isDownloading = YES; file.willDownloading = NO; file.error = NO; /重新开始此下载 self startLoad;5 系统测试与运行(1) 测试的定义与目的测试是定义软件的功能,性能,以及稳定性。目的是完善软件的功能,性能以及稳定性。测试主要包括测试网络数据的加载,滑动事件,视频的播放。观看视频的历史记

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论