java createplayer_BiliBili: 基于ijkplayer+rxjava+retrofit,组件化思想,实现一个仿B站的Android客户端...

BiliBili

使用ijkplayer,实现一个仿B站的Android客户端。使用组件化的思想对项目进行拆分,目前分出两个组件,一个是网络请求组件,一个是视频播放组件。

扫码体验:

组件化实现方案

组件化使用的方案出自张华洋的文章:Android组件化方案

在gradle.properties中,有一个isModule值,为true时是组件化模式,为false为library。在业务组件的build.gradle中读取 isModule,代码如下:

if (isModule.toBoolean()) {

apply plugin: 'com.android.application'

} else {

apply plugin: 'com.android.library'

}

在 AndroidStudio 中每一个组件都会有对应的 AndroidManifest.xml,application和library使用的AndroidManifest.xml不同,所以要为组件开发模式下的业务组件再创建一个 AndroidManifest.xml,然后根据isModule指定AndroidManifest.xml的文件路径,让业务组件在集成模式和组件模式下使用不同的AndroidManifest.xml:

sourceSets {

main {

if (isModule.toBoolean()) {

manifest.srcFile 'src/main/module/AndroidManifest.xml'

} else {

manifest.srcFile 'src/main/AndroidManifest.xml'

}

}

}

组件功能介绍

ijkplayer组件(功能组件)

该组件是一个视频播放组件,在ubuntu16.04上集成编译了ijkplayer,支持rtsp和rtmp的视频直播推流。提供了一个自定义view,可以使用该view实现本地/网络视频的播放、暂停、快进、视频亮度、音量的调节。ijkplayer0.8.8下载地址

使用方式如下:

声明所需权限,用于播放网络视频和本地视频:

注意,如果横竖屏切换不想重新走一遍生命周期,还需要在表单中设置Activity的configChanges属性:

android:configChanges="orientation|keyboardHidden|screenSize" >

在布局中添加如下view:

android:id="@+id/simple_view"

android:layout_width="match_parent"

android:layout_height="180dp">

在Activity/Fragment中的oncreate方法里:

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_play)

//屏幕常亮

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)

/** 普通播放 start **/

var url = getIntent().getStringExtra("url");

simple_view

.setVideoUrl(url)

.setVideoTitle("这是标题")

.startPlay()

}

override fun onConfigurationChanged(newConfig: Configuration?) {

super.onConfigurationChanged(newConfig)

//横竖屏切换 显示/隐藏actionbar

var isPortrait = simple_view.onConfigurationChang(newConfig)

if (isPortrait) {

supportActionBar?.show()

} else {

supportActionBar?.hide()

}

}

override fun onBackPressed() {

simple_view.onBackPressed()

if (!simple_view.isPortrait){

supportActionBar?.show()

}else{

super.onBackPressed()

}

}

override fun onPause() {

super.onPause()

simple_view.onPause()

}

override fun onResume() {

super.onResume()

simple_view.onResume()

}

override fun onDestroy() {

super.onDestroy()

simple_view.onDestory()

}

common组件(功能组件)

common组件是基础库,添加一些公用的类;

网络请求、图片加载、工具类、base类等;

声明APP需要的uses-permission;

定义mvp架构实现网络请求

目前完成的功能

整体架构搭建

对b站客户端抓包,分析接口

主界面布局完成

完成直播播放页面

完成推荐视频的播放

视频弹幕获取

项目截图:

直播界面

聊天界面

个人信息popwindow

主播信息界面

粉丝榜

大航海

595d78a2bfe84c4a8c4e3425e19db17d.png

e426eea83079a78341af50a05787a1f9.png

ed4f31beae0434f2277a4dd3abbf9d1f.png

306c4a7b09d7c58e3c953107bde23992.png

de717dac3d2552e31e9c6d37d17e95f2.png

201da95ededa5abcd1416988be6b67f9.png

视频播放

视频评论

侧滑

分区

追番

webview

d96ef5bdfbcf734426e472100bfc5842.png

d6d49bbfb049963118df1862c9c36396.png

31906871d996b8c83b5d8d728bdba928.png

f652620d264652ac76452b7904ef214d.png

ba843a84b126f26ed1012abfdf4de994.png

141731efd9bae0272080f3b738065f47.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值