All Projects → lingxiaoplus → Bilibili

lingxiaoplus / Bilibili

Licence: agpl-3.0
基于ijkplayer+rxjava+retrofit,组件化思想,实现一个仿B站的Android客户端

Programming Languages

kotlin
9241 projects

Projects that are alternatives of or similar to Bilibili

Bilisoleil
An unofficial bilibili client for android --rxjava2+mvp+okhttp3+retrofit2+dagger2
Stars: ✭ 430 (+94.57%)
Mutual labels:  rxjava2, ijkplayer, retrofit2
Bilisoleil Kotlin
An unofficial bilibili client for android --kotlin+rxjava2+mvp+okhttp3+retrofit2+dagger2
Stars: ✭ 139 (-37.1%)
Mutual labels:  rxjava2, ijkplayer, retrofit2
Xsnow
💮基于RxJava2+Retrofit2精心打造的Android基础框架,包含网络、上传、下载、缓存、事件总线、权限管理、数据库、图片加载,基本都是项目中必用功能,每个模块充分解耦,可自由拓展。
Stars: ✭ 1,678 (+659.28%)
Mutual labels:  rxjava2, retrofit2
Nice Knowledge System
📚不积跬步无以至千里,每天进步一点点,Passion,Self-regulation,Love and Share
Stars: ✭ 137 (-38.01%)
Mutual labels:  rxjava2, retrofit2
Simpleapiclient
A configurable api client based on Retrofit2 and RxJava2 for android
Stars: ✭ 146 (-33.94%)
Mutual labels:  rxjava2, retrofit2
Armscomponent
📦 A complete android componentization solution, powered by MVPArms (MVPArms 官方快速组件化方案).
Stars: ✭ 1,664 (+652.94%)
Mutual labels:  rxjava2, retrofit2
Eve
Eve and Wall-e
Stars: ✭ 133 (-39.82%)
Mutual labels:  rxjava2, retrofit2
Dagger2
Kotlin Dagger2 example project
Stars: ✭ 145 (-34.39%)
Mutual labels:  rxjava2, retrofit2
Mvproute
Android Mvp模式迅速开发框架
Stars: ✭ 117 (-47.06%)
Mutual labels:  rxjava2, retrofit2
Fountain
Android Kotlin paged endpoints made easy
Stars: ✭ 175 (-20.81%)
Mutual labels:  rxjava2, retrofit2
Stepik Android
Android Application for Taking Open Courses on the Stepik Platform
Stars: ✭ 165 (-25.34%)
Mutual labels:  rxjava2, retrofit2
Awesome Wanandroid
⚡致力于打造一款极致体验的 http://www.wanandroid.com/ 客户端,知识和美是可以并存的哦QAQn(*≧▽≦*)n
Stars: ✭ 2,525 (+1042.53%)
Mutual labels:  rxjava2, retrofit2
Phoenix For Vk
Yet another VK client for Android
Stars: ✭ 131 (-40.72%)
Mutual labels:  rxjava2, retrofit2
Roomrxjava
Room with Rxjava Example
Stars: ✭ 130 (-41.18%)
Mutual labels:  rxjava2, retrofit2
Rxcore
开发框架基于RxJava2+Retrofit2
Stars: ✭ 135 (-38.91%)
Mutual labels:  rxjava2, retrofit2
Android Cnblogs
🔥🔥 博客园Android端开源项目,界面简洁清新。
Stars: ✭ 127 (-42.53%)
Mutual labels:  rxjava2, retrofit2
Httprequest
基于Retrofit2+RxJava2+OkHttp3的网络请求框架,可以完美的应用到组件化、MVP模式等项目中
Stars: ✭ 181 (-18.1%)
Mutual labels:  rxjava2, retrofit2
Redgram For Reddit
An Open-Sourced Android Reddit Client
Stars: ✭ 106 (-52.04%)
Mutual labels:  rxjava2, retrofit2
Rxapp
Stars: ✭ 108 (-51.13%)
Mutual labels:  rxjava2, retrofit2
Jbusdriver
这是去幼儿园的班车(滑稽
Stars: ✭ 2,056 (+830.32%)
Mutual labels:  rxjava2, retrofit2

BiliBili

转行了各位,所以这个项目大概率不会更新了。B站的有些接口更新了,B站官方之前的版本也不能用了,大家可以自己根据最新的版本抓包得到接口。

使用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下载地址

使用方式如下:

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

<uses-permission android:name="android.permission.INTERNET" />  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

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

<activity android:name=".PlayActivity"
                  android:configChanges="orientation|keyboardHidden|screenSize" >
</activity

在布局中添加如下view:

<com.bilibili.lingxiao.ijkplayer.widget.SimplePlayerView
            android:id="@+id/simple_view"
            android:layout_width="match_parent"
            android:layout_height="180dp">
    </com.bilibili.lingxiao.ijkplayer.widget.SimplePlayerView>

在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组件(功能组件)

  1. common组件是基础库,添加一些公用的类;
  2. 网络请求、图片加载、工具类、base类等;
  3. 声明APP需要的uses-permission;
  4. 定义mvp架构实现网络请求

目前完成的功能

  • 整体架构搭建
  • 对b站客户端抓包,分析接口
  • 主界面布局完成
  • 完成直播播放页面
  • 完成推荐视频的播放
  • 视频弹幕获取

项目截图:

直播界面 聊天界面 个人信息popwindow 主播信息界面 粉丝榜 大航海
视频播放 视频评论 侧滑 分区 追番 webview
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].