Android-在线视频播放器实现
1 前言
在线视频播放
搜索
分类
全屏
评论列表
收藏数
分享数
分享
热门搜索词
清除缓存
每日图片
效果图如下:
以上四张效果图,仅仅展示了主页的UI,本想录制视频,但是都超过了大小限制,无法上传。
2 申明
以上效果图以及整个在线视频APP的代码,仅仅作为学习交流之用,不可用于任何商业之用,由此出现的任何问题与作者本人无关!
3 架构设计
3.1 模块化
整个APP的架构设计模块化开发,大的方向上设计四个模块,分别对应首页的四个fragment。
if (isNeedHomeModule.toBoolean()) {api project(':module_home')}if (isNeedChatModule.toBoolean()) {api project(':module_chat')}if (isNeedRecomModule.toBoolean()) {api project(':module_recom')}if (isNeedMeModule.toBoolean()) {api project(':module_me')}
以上四个模块作为APP的主要模块,四个模块之间不可直接交互应用,他们之间的交互全部通过ARouter路由进行。
在这四个模块之下,有lib_icon模块、lib_base模块、network模块,这三个模块为以上四个主要模块提供支持。
lib_icon模块提供整个APP的资源支持,公共资源均可以放在这里
lib_base模块提供主要代码级别的支持,主要基类,公用类等
network模块提供整个APP的网络请求支持
另外需要说明的是,上面的四个主要模块可以作为APP主要的入口,由此四个模块可单独运行测试,如果在APP体量特别大的情况下,能够单独运行,大大减小测试开发力度。这也是ARouter的一个好处。
3.2 MVP
public interface IView {}
public interface IPresenter {/*** destroy*/void destroy();
}
public abstract class BasePresenter<T extends IView> implements IPresenter {protected T iView;public BasePresenter(T iView) {this.iView = iView;}@Overridepublic void destroy() {iView = null;}
}
以上涉及IView接口扩展整个UI包括activity和fragment。
BasePresenter抽象类类实现UI相关的逻辑
举例欢迎页
public interface LaunchContract {interface LaunchView extends IView {/*** 设置首页图片* @param url string*/void showFlash(String url);/*** load launch fail*/void loadLaunchFail();}interface LaunchPresenter {/*** 获取图片*/void getImage();}}
欢迎页LaunchContract 接口包括了两个接口,这两个接口中声明了UI和presenter交互的接口,实现类中实现这两个接口即可,并且,view和presenter的交互只有以上声明的方法才能调用,这样逻辑清晰。
欢迎页实现类如下:
public class LaunchActivity extends BaseActivity implements LaunchContract.LaunchView {private static final int SLEEP_TIME = 6000;private static final int REQUEST_PERMISSION_SETTING = 99;@BindView(R.id.splash_root)ImageView mSplashRoot;private LaunchPresenter mLaunchPresenter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_launch);mUnBinder = ButterKnife.bind(this);mLaunchPresenter = new LaunchPresenter(this);requestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE);}@Overridepublic void showFlash(String url) {GlideUtil.Companion.showImage(LaunchActivity.this, mSplashRoot, url, new GlideUtil.Companion.ImageListener() {@Overridepublic void onFailed() {}@Overridepublic void onReady(@NotNull Drawable resource) {runAlphaAnim(resource);}});}....................................
}
LaunchActivity 类实现LaunchContract.LaunchView接口,声明LaunchPresenter对象
public class LaunchPresenter extends BasePresenter<LaunchContract.LaunchView> implements LaunchContract.LaunchPresenter {public LaunchPresenter(LaunchContract.LaunchView iView) {super(iView);}@Overridepublic void getImage() {}}
LaunchPresenter 类实现LaunchContract.LaunchPresenter接口
以上整个MVP的逻辑架构,将逻辑与UI分离,代码更加清晰。
4 开发环境
Java1.8
Kotlin
Android 28
Android build tools 28.0.3
Android Studio 3.5Gradle plugin tool version 3.1.0
Gradle 4.10.1
5 主要三方库
// a routerapi "com.alibaba:arouter-api:${rootProject.ext.arouter_api_v}"kapt "com.alibaba:arouter-compiler:${rootProject.ext.arouter_compile_v}"// fast jsonapi "com.alibaba:fastjson:${rootProject.ext.fast_json_v}"// retrofitapi "com.squareup.retrofit2:retrofit:${rootProject.ext.retrofit_v}"api "com.squareup.retrofit2:converter-gson:${rootProject.ext.retrofit_v}"// butter knifeapi "com.jakewharton:butterknife:${rootProject.ext.butter_knife_v}"kapt "com.jakewharton:butterknife-compiler:${rootProject.ext.butter_knife_v}"// leak canarydebugApi "com.squareup.leakcanary:leakcanary-android:${rootProject.ext.leakcanary_v}"releaseApi "com.squareup.leakcanary:leakcanary-android-no-op:${rootProject.ext.leakcanary_v}"debugApi "com.squareup.leakcanary:leakcanary-support-fragment:${rootProject.ext.leakcanary_v}"// rxjavaapi "io.reactivex.rxjava2:rxjava:${rootProject.ext.rxjava_v}"api "io.reactivex.rxjava2:rxandroid:${rootProject.ext.rxandroid_v}"api 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'//android event busapi "org.simple:androideventbus:${rootProject.ext.android_event_bus_v}"// event busapi "org.greenrobot:eventbus:${rootProject.ext.eventbus_v}"//glideapi("com.github.bumptech.glide:glide:${rootProject.ext.glide_v}") {exclude group: "com.android.support"}annotationProcessor "com.github.bumptech.glide:compiler:${rootProject.ext.glide_v}"kapt "com.github.bumptech.glide:compiler:${rootProject.ext.glide_v}"api "com.android.support:multidex:${rootProject.ext.multidex_v}"api 'com.youth.banner:banner:1.4.10'api 'com.hyman:flowlayout-lib:1.1.2'api 'cn.jzvd:jiaozivideoplayer:7.0.5'api 'cn.carbs.android:ExpandableTextView:1.0.3'
代码就不公开了,想要源代码的同学,给我发邮件吧(nyyin@qq.com)
再次声明,代码仅仅学习之用,严禁商业之用~!
欢迎关注公众号:技术印象
Android-在线视频播放器实现相关推荐
- Android 在线视频播放器(Vitamio)
概述 Vitamio 是一款 Android 与 iOS 平台上的全能多媒体开发框架,全面支持硬件解码与 GPU 渲染,底层音视频解码原理基于FFmpeg开发.Vitamio 凭借其简洁易用的 API ...
- android在线视频播放器源码,请问谁有Android视频播放器简单源码
qq_岁月永恒_0 2018-12-18 10:51 package com.example.mp4; import java.io.IOException; import com.example.m ...
- 播放视频android学习笔记---44_在线视频播放器,网络视频解析器,SurfaceView 控件使用方法...
最近用使开辟的过程中涌现了一个小题问,顺便录记一下因原和法方--播放视频 44_在线视频播放器 ------------------------- 1.注意这里,在模拟器中,android2.2和an ...
- android学习笔记---44_在线视频播放器,网络视频解析器,SurfaceView 控件使用方法
44_在线视频播放器 ------------------------- 1.注意这里,在模拟器中,android2.2和android2.1视频是没有播放效果的,这个主要是因为模拟器的原因和程序代码 ...
- 实现在Android本地视频播放器开发
在Android本地视频播放器开发中的搜索本地视频章节中,我们能够搜索本地视频并且显示每个视频的图片.标题.时间长度,当然如果需要添加其他的例如视频的长度和宽度可以使用Video类中的方法,既然我们获 ...
- Android本地视频播放器开发--视频解码
在上一章Android本地视频播放器开发--SDL编译编译中编译出sdl的支持库,当时我们使用的2.0,但是有些api被更改了,所以在以下的使用者中我们使用SDL1.3的库,这个库我会传上源码以及编译 ...
- 基于android的视频播放器,基于Android的视频播放器的设计与实现-.doc
基于Android的视频播放器的设计与实现- 基于Android的视频播放器的设计与实现 中 文 摘 要 如今,随着基于Android的智能手机的,.因此,设计一个基于android手机的多功能播放器 ...
- android 编译 sdl,SDL编译 - Android本地视频播放器开发_Linux编程_Linux公社-Linux系统门户网站...
在上一章 Android本地视频播放器开发--ffmpeg解码视频文件中的音频(2)[http://www.linuxidc.com/Linux/2013-06/85955p5.htm]中使用Ope ...
- Android 节操视频播放器jiecaovideoplayer使用
Android 节操视频播放器jiecaovideoplayer使用 特点: 全屏时启动新Activity实现播放器真正的全屏功能 能在ListView.ViewPager和ListView.View ...
- Python+QT+Selenium制作在线视频播放器
最近突然想做一个视频播放器,可以在线看视频,关键还没用广告,不用会员,下面给大家介绍一下怎么制作 工具: Python Qt phantomjs 先给大家展示一下效果 下面上代码 导入库: from ...
最新文章
- IDEA一定要懂的32条快捷键
- 浅析企业网站排名低可能是哪些原因导致的呢?
- 为什么这个SQL Server DBA学习PowerShell--SQL任务
- netstat命令查看网络信息
- JavaScript 继承
- 教程-delphi的开源json库:superobject,用法简介
- css选择器([class*= icon-], [class^=icon-] 的区别)
- Smartmontools检测硬盘坏道
- 你所不知道的 CSS 滤镜技巧与细节
- 332.重新安排行程
- 小程序 做二维码带logo绘制二维码
- UWA学堂|逻辑代码模块
- Android之模仿微信登陆界面(一)
- java文件打包jar文件_如何把JAVA文件打包成jar文件
- SMS注册与接收短信
- 计算机毕业设计 SSMKTV点歌系统 音创ktv点歌系统 卡拉ok点歌系统Java Vue MySQL数据库 远程调试 代码讲解
- TIA博途V17中如何创建和使用VoT应用程序_Web功能
- android eclipse加密,Elliptic Curve Cryptography:在eclipse android中使用NFC发送加密消息
- 商业保理与 P2P 是如何结合运作的
- 《实用VC编程之玩转控件》第7课:ListBox 列表控件
热门文章
- Hi3518EV300芯片linux系统配置USB Camera功能
- 2018年最新python视频教程学习建议百度云分享
- ubuntu 刷新频率 如何查看_Ubuntu分辨率和刷新频率设置
- 计算机丢失系统文件如何找回,电脑引导文件丢失怎么办 引导文件丢失恢复方法...
- 计算机系统1 实验 LC-3 Nim游戏 子程序
- 云队友丨当代攒钱青年现状:没变富,先「变负」
- Electron 打包Mac安装包代码签名问题解决方案
- 用于商用微处理器的快速位收集、位分散和位置换指令(一)
- Linux 块设备层中的Multi-queue分析
- 计算机网络各层设备及功能讲解大汇总~