基于Android平台在线视频播放APP的设计与实现
发布时间:2021-01-13 11:15
随着移动互联网的飞速发展,人们的物质和文化生活水平不断提升,移动智能设备的价格变得更加便宜,越来越多的消费者在购买智能产品的选择上更青睐于Android系统的设备。在快节奏的生活中,智能设备扮演着重要的角色,不再仅仅是作为通信使用的工具,更多用途是在活中的方方面面,人们也更加倾向于利用零散的时间在移动设备端上观看在线视频娱乐,市场上的有许多在线视频播放器,但代码逻辑复杂,功能选项繁杂,页面内容过于冗余,用户在使用时非常不便捷,因而在手机上开发一款易操作使用、功能齐全、内容丰富、界面清晰的在线视频播放APP十分重要。本文从用户操作使用应用的角度出发,提出核心模块的需求分析,整体采用的是MVC构架,做到高内聚低耦合的设计原则,对不同的资源内容进行了具体的模块划分,整体采用View Pager加上Fragment来完成页面UI设计,结合性能更加高效的Recycler View来显示页面内容,对大量页面所产生的缓存数据优化处理,提高了设备运行时的性能。设计了多种自定义控件来完善页面显示的多样性,完成页面的繁琐内容具体显示。增加弹幕缓存池设计,使弹幕的显示更加高效。利用Ok Http和Retro...
【文章来源】:长江大学湖北省
【文章页数】:68 页
【学位级别】:硕士
【部分图文】:
轮播图效果图
第5章在线视频播放APP的实现35本在线视频播放APP出于能在更多的手机机型上运行的目的,ijkplayer软解码是基于ffplay基础上改的,而硬解码采取了MediaCodec的硬解码方式来对音视频解码[41],由video_thread、audio_thread两个解码线程进行,解码的功能封装在ffpipeline层里了,如果在打开硬件解码不成功,会自动切换至软解码。在FFmpeg音视频的解码是在对应的队列中来处理的[42],由于视频解码比音频稍微复杂,下面主要介绍视频解码,然后显示在Android设备上的基本流程。在read_thread中的packet_queue_put()将解码前的视频数据队列放入缓存区中,decoder_decode_frame将调用最先放入缓存队列中的packet,该方法中从还没开始解码的视频数据队列中取出一帧数据,送入decoder中进行解码,并将解码后的数据送到ffplay_video_thread中的pictq里,然后调用各自的解码函数得到frame,这样各种解码后的数据都获取到了。FrameQueue队列中储存的是解码后的视频资源数据,然后在read_thread中完成所有的任务,视频的显示功能是在video_refresh_thread中完成的,picturequeue把得到的frame加入到frame_queue队列里面,最后将帧画面绘制到设备的上显示,关于视频解码的主要流程如图5-4的流程图所示。图5-4视频资源解码流程图Figure5-4Videoresourcedecodingflowchart在同样的网络请求环境下,音、视频的数据是分开加载的,于是会出现不同步的现象,从时间上看两者在播放的时候上有一个错差。处理不同步主要方式基于音频的时间戳作为参考,在整体上的思路就是在获取到解码后的音视频资源数据后,如果视频播放快于这个时间戳,在播放下一帧时加一个延时时间以等待音
第5章在线视频播放APP的实现39publicbooleanonScroll(MotionEvente1,MotionEvente2,floatdistanceX,floatdistanceY){//滑动事件处理if(Math.abs(distanceX)>Math.abs(distanceY)){mMoveType=mMoveType.FastUpOrDown;}else{if(e1.getX()<getWidth()*1.0/3.0){//左边mMoveType=mMoveType.Volume;}elseif(e1.getX()>getWidth()*2.0/3.0){//右边mMoveType=mMoveType.Brightness;}}}图5-6音量、亮度手势调节效果图Figure5-6Volume,brightnessgestureadjustmenteffectdiagram(5)播放时,在进度条上显示该总的视频时长以及当前播放视频的时长,进度条的进度会跟随当前播放的时间变化刷新进度;setSecondaryProgress()来设置缓冲时的进度,能显示播放时自动缓冲进度条,在网络比较好的情况下,视频能提前预加载,以较暗的亮度在进度条上显示;拖动进度条seekBar,在屏幕中间显示拖动到的时间,在缓冲加载时显示“正在加载”的进度,图5-7为在视频播放时缓冲进度实现效果图,其中的主要代码如下。privatevoidupdateMediaControlView(){inttotal=mMediaControl.getDuration();//总时长intcurrentPosition=mMediaControl.getCurrentPosition();mTvCurrentTime.setText(stringForTime(currentPosition));mTvTotalTime.setText(stringForTime(total));mSeekBar.setProgress(currentPosition);//拖动播放
【参考文献】:
期刊论文
[1]6G移动通信技术展望[J]. 张平,牛凯,田辉,聂高峰,秦晓琦,戚琦,张娇. 通信学报. 2019(01)
[2]基于Android平台架构应用程序开发研究[J]. 张蓝春. 电脑编程技巧与维护. 2017(06)
[3]移动智能终端的普及对传统媒体的冲击[J]. 黄蔚. 知识经济. 2015(20)
[4]5G移动通信网络关键技术综述[J]. 赵国锋,陈婧,韩远兵,徐川. 重庆邮电大学学报(自然科学版). 2015(04)
[5]基于HttpClient的Android客户端的设计与实现[J]. 王超,闾陈莉,吴迪,项英杰. 计算机时代. 2014(03)
[6]基于Android的多线程处理技术[J]. 杨杰. 电脑知识与技术. 2013(18)
硕士论文
[1]基于JSON的加密及签名算法的安全性研究[D]. 何建.哈尔滨工业大学 2018
[2]Android系统源码中设计模式对应用开发的改进研究[D]. 朱毅坤.北京邮电大学 2017
[3]基于DLNA协议的ANDROID多媒体分享系统的设计和实现[D]. 杨乾.上海交通大学 2017
[4]面向嵌入式系统的音视频接收与同步播放系统实现[D]. 高树立.天津大学 2017
[5]基于XML的数据管理系统的设计与实现[D]. 高超.湖南大学 2016
[6]基于Android的即时微视频流客户端开发[D]. 钟正伟.贵州大学 2015
[7]基于Android平台的智能家居系统的设计与研究[D]. 王炼.武汉科技大学 2015
[8]基于云同步的视频推荐系统的系统实现[D]. 程娟.上海交通大学 2015
[9]基于Android平台的手势识别技术的研究与应用[D]. 毛晓洁.电子科技大学 2015
[10]基于MVC模式下Android手机游戏的研究与实现[D]. 罗璇.华南理工大学 2014
本文编号:2974775
【文章来源】:长江大学湖北省
【文章页数】:68 页
【学位级别】:硕士
【部分图文】:
轮播图效果图
第5章在线视频播放APP的实现35本在线视频播放APP出于能在更多的手机机型上运行的目的,ijkplayer软解码是基于ffplay基础上改的,而硬解码采取了MediaCodec的硬解码方式来对音视频解码[41],由video_thread、audio_thread两个解码线程进行,解码的功能封装在ffpipeline层里了,如果在打开硬件解码不成功,会自动切换至软解码。在FFmpeg音视频的解码是在对应的队列中来处理的[42],由于视频解码比音频稍微复杂,下面主要介绍视频解码,然后显示在Android设备上的基本流程。在read_thread中的packet_queue_put()将解码前的视频数据队列放入缓存区中,decoder_decode_frame将调用最先放入缓存队列中的packet,该方法中从还没开始解码的视频数据队列中取出一帧数据,送入decoder中进行解码,并将解码后的数据送到ffplay_video_thread中的pictq里,然后调用各自的解码函数得到frame,这样各种解码后的数据都获取到了。FrameQueue队列中储存的是解码后的视频资源数据,然后在read_thread中完成所有的任务,视频的显示功能是在video_refresh_thread中完成的,picturequeue把得到的frame加入到frame_queue队列里面,最后将帧画面绘制到设备的上显示,关于视频解码的主要流程如图5-4的流程图所示。图5-4视频资源解码流程图Figure5-4Videoresourcedecodingflowchart在同样的网络请求环境下,音、视频的数据是分开加载的,于是会出现不同步的现象,从时间上看两者在播放的时候上有一个错差。处理不同步主要方式基于音频的时间戳作为参考,在整体上的思路就是在获取到解码后的音视频资源数据后,如果视频播放快于这个时间戳,在播放下一帧时加一个延时时间以等待音
第5章在线视频播放APP的实现39publicbooleanonScroll(MotionEvente1,MotionEvente2,floatdistanceX,floatdistanceY){//滑动事件处理if(Math.abs(distanceX)>Math.abs(distanceY)){mMoveType=mMoveType.FastUpOrDown;}else{if(e1.getX()<getWidth()*1.0/3.0){//左边mMoveType=mMoveType.Volume;}elseif(e1.getX()>getWidth()*2.0/3.0){//右边mMoveType=mMoveType.Brightness;}}}图5-6音量、亮度手势调节效果图Figure5-6Volume,brightnessgestureadjustmenteffectdiagram(5)播放时,在进度条上显示该总的视频时长以及当前播放视频的时长,进度条的进度会跟随当前播放的时间变化刷新进度;setSecondaryProgress()来设置缓冲时的进度,能显示播放时自动缓冲进度条,在网络比较好的情况下,视频能提前预加载,以较暗的亮度在进度条上显示;拖动进度条seekBar,在屏幕中间显示拖动到的时间,在缓冲加载时显示“正在加载”的进度,图5-7为在视频播放时缓冲进度实现效果图,其中的主要代码如下。privatevoidupdateMediaControlView(){inttotal=mMediaControl.getDuration();//总时长intcurrentPosition=mMediaControl.getCurrentPosition();mTvCurrentTime.setText(stringForTime(currentPosition));mTvTotalTime.setText(stringForTime(total));mSeekBar.setProgress(currentPosition);//拖动播放
【参考文献】:
期刊论文
[1]6G移动通信技术展望[J]. 张平,牛凯,田辉,聂高峰,秦晓琦,戚琦,张娇. 通信学报. 2019(01)
[2]基于Android平台架构应用程序开发研究[J]. 张蓝春. 电脑编程技巧与维护. 2017(06)
[3]移动智能终端的普及对传统媒体的冲击[J]. 黄蔚. 知识经济. 2015(20)
[4]5G移动通信网络关键技术综述[J]. 赵国锋,陈婧,韩远兵,徐川. 重庆邮电大学学报(自然科学版). 2015(04)
[5]基于HttpClient的Android客户端的设计与实现[J]. 王超,闾陈莉,吴迪,项英杰. 计算机时代. 2014(03)
[6]基于Android的多线程处理技术[J]. 杨杰. 电脑知识与技术. 2013(18)
硕士论文
[1]基于JSON的加密及签名算法的安全性研究[D]. 何建.哈尔滨工业大学 2018
[2]Android系统源码中设计模式对应用开发的改进研究[D]. 朱毅坤.北京邮电大学 2017
[3]基于DLNA协议的ANDROID多媒体分享系统的设计和实现[D]. 杨乾.上海交通大学 2017
[4]面向嵌入式系统的音视频接收与同步播放系统实现[D]. 高树立.天津大学 2017
[5]基于XML的数据管理系统的设计与实现[D]. 高超.湖南大学 2016
[6]基于Android的即时微视频流客户端开发[D]. 钟正伟.贵州大学 2015
[7]基于Android平台的智能家居系统的设计与研究[D]. 王炼.武汉科技大学 2015
[8]基于云同步的视频推荐系统的系统实现[D]. 程娟.上海交通大学 2015
[9]基于Android平台的手势识别技术的研究与应用[D]. 毛晓洁.电子科技大学 2015
[10]基于MVC模式下Android手机游戏的研究与实现[D]. 罗璇.华南理工大学 2014
本文编号:2974775
本文链接:https://www.wllwen.com/kejilunwen/ruanjiangongchenglunwen/2974775.html