该视频播放器基于Bilibili的开源项目ijkplayer做的,是在github上的demo基础上搭建了个播放界面,如果你之前有研究过这个demo代码,那你看这个库就非常简单了。至于还不知道ijkplayer这个开源库的话可以先去了解下,这应该是目前github最火的开源视频播放器了吧,网上对这个的介绍也很多这里就不讲这个了。

我从Bilibili客户端扒了好多图标来用,希望不要造成不好的影响,我也算个B站粉- -。下面先列一下目前集成的主要功能:

  1. 沉浸式全屏播放,隐藏状态栏和虚拟键如果有的话,用的时候有些需要注意的地方放后面说;
  2. 弹幕功能,包括发射弹幕和弹幕基本样式设置:大小、颜色和类型(顶部、底部和滚动弹幕),效果同Bilibili;
  3. 竖屏和横屏的切换,其实就是小屏和全屏的切换,提供了重力感应来切换竖横屏功能;
  4. 触屏控制,竖直方向左边控制亮度,右边控制声音,水平方向控制播放进度;
  5. 三指旋转缩放,当三个手指触屏时就可以进行视频界面的旋转缩放,效果同Bilibili;
  6. 视频源切换,可设置流畅、清晰、高清、超清和1080p等5种视频源;
  7. 视频宽高比例设置,包括16:9、4:3、视频内嵌填充界面和填充屏幕等4种;
  8. 记录上次播放进度的跳转功能;
  9. 其它的如截屏功能,电池电量显示,时间显示,播放常亮,跑马灯标题和锁屏处理;

Screenshot

动图显示比较慢,就传两张gif。

Usage

添加依赖:

// 在项目根 build.gradle 添加如下:
allprojects {repositories {...maven { url 'https://jitpack.io' }}
}// 添加依赖库:
dependencies {compile 'com.github.Rukey7:IjkPlayerView:{lastest-version}'
}

配置AndroidManifest.xml:

<activityandroid:name=".IjkPlayerActivity"android:configChanges="orientation|keyboardHidden|screenSize"/>

布局:

<com.dl7.player.media.IjkPlayerViewandroid:id="@+id/player_view"android:layout_width="match_parent"android:layout_height="200dp"/>

代码中调用方式如下:

public class IjkPlayerActivity extends AppCompatActivity {private IjkPlayerView mPlayerView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_ijk_player);setSupportActionBar(mToolbar);//   以下为配置接口,选择需要的调用Glide.with(this).load(IMAGE_URL).fitCenter().into(mPlayerView.mPlayerThumb);  // 显示界面图mPlayerView.init()              // 初始化,必须先调用.setTitle("这是个标题") // 设置标题,全屏时显示.setSkipTip(1000*60*1)  // 设置跳转提示.enableOrientation()   // 使能重力翻转.setVideoPath(VIDEO_URL)   // 设置视频Url,单个视频源可用这个.setVideoSource(null, VIDEO_URL, VIDEO_URL, VIDEO_URL, null) // 设置视频Url,多个视频源用这个.setMediaQuality(IjkPlayerView.MEDIA_QUALITY_HIGH)    // 指定初始视频源.enableDanmaku()      // 使能弹幕功能.setDanmakuSource(getResources().openRawResource(R.raw.comments))  // 添加弹幕资源,必须在enableDanmaku()后调用.start(); // 启动播放}@Overrideprotected void onResume() {super.onResume();mPlayerView.onResume();}@Overrideprotected void onPause() {super.onPause();mPlayerView.onPause();}@Overrideprotected void onDestroy() {super.onDestroy();mPlayerView.onDestroy();}@Overridepublic void onConfigurationChanged(Configuration newConfig) {super.onConfigurationChanged(newConfig);mPlayerView.configurationChanged(newConfig);}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (mPlayerView.handleVolumeKey(keyCode)) {return true;}return super.onKeyDown(keyCode, event);}@Overridepublic void onBackPressed() {if (mPlayerView.onBackPressed()) {return;}super.onBackPressed();}
}

如果你要使用固定全屏模式,可更改如下:

public class IjkFullscreenActivity extends AppCompatActivity {IjkPlayerView mPlayerView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mPlayerView = new IjkPlayerView(this);setContentView(mPlayerView);Glide.with(this).load(IMAGE_URL).fitCenter().into(mPlayerView.mPlayerThumb);mPlayerView.init().setTitle("这是个标题").alwaysFullScreen()            // 固定全屏.setVideoPath(VIDEO_URL) // 设置视频Url,单个视频源可用这个.start();}// ......
}

Other

影响沉浸式全屏播放的一些操作:

1. 不要使用 android:fitsSystemWindows="true" ,也不要用 SystemBarTint来着色状态栏;

2. 确保播放器处于除 ToolBar 外界面的顶部;

其他说明:
1. 我目前都是在自己手机荣耀6测的,可能不少异常我没能处理,如果使用有遇到问题可以和我说下,一起探讨;
2. 没有做直播功能,如果要弄的话我觉得还得重新搭个别的界面,现在代码里的UI东西已经有点多了,再整一起不太合适,以后有时间再研究;
3. 其实还有很多配置功能没加进去,比如视频和弹幕的设置,可参考Bilibili客户端,暂时不想加这些东西;

Github

项目地址:IjkPlayerView

错误说明

1、很多人反映点击视频播放的时候崩掉了,这里统一说明一下,错误大致这样:

这是因为android有分不同的CPU架构,比如armv7a、armv5、X86等等,当你使用so库的时候需要根据机型来选择对应版本,而我在视频播放那个库里只引用了‘tv.danmaku.ijk.media:ijkplayer-armv7a:0.6.2’ 这个库,应该大部分机型是这种架构,所以有的机型可能就跑不了,你可以根据你的机型来选择添加其他的,详情可以看B站的说明ijkplayer,比如:

64位的库要求SDK21以上,B站有更新版本,如果要用的时候记得统一后面的版本号。

2、还有一个视频播放的相关问题,就是如果你要播放其它的视频格式比如:MKV、AVI、RM等等,直接用也是播不了的,这个你需要重新编译ijkplayer去配置支持这些视频格式,具体编译方法看ijkplayer的指导说明吧,开启多种格式支持的话so就变很大了。如果你懒得编译的话我之前自己编译了一个armv7a的对应so库,你可以看这里ijkplayer-armv7a。库太大了其它版本就没传上去了,有需要在联系我吧。

基于ijkplayer的视频播放器,仿Bilibili客户端,集成沉浸式全屏、弹幕、触屏控制、视频源切换等功能相关推荐

  1. 基于 IjkPlayer 的视频播放器

    dkplayer 项目地址:dueeeke/dkplayer  简介:基于 IjkPlayer 的视频播放器,支持直播点播,悬浮窗播放,广告播放,边播边缓存:支持重力感应自动全屏:完美实现 ListV ...

  2. 基于IjkPlayer的视频播放器

    最近在GitHub上看到一款基于IjkPlayer的视频播放控件,觉得不错,所以就体验了一下. 它的功能挺强大的,主要有一下几点: 支持 边播边缓存,使用了AndroidVideoCache. 支持 ...

  3. rtsp协议_基于libVLC的视频播放器(支持RTSP协议)

    VLC Media Player是一款优秀的播放器,大多数多媒体开发人员都使用过.VLC是一款开源的.跨平台的.可扩展的.多媒体播放器.流媒体服务器及框架,可播放大多数多媒体文件,以及DVD.音频CD ...

  4. 基于android的视频播放器,基于Android的视频播放器的设计与实现-.doc

    基于Android的视频播放器的设计与实现- 基于Android的视频播放器的设计与实现 中 文 摘 要 如今,随着基于Android的智能手机的,.因此,设计一个基于android手机的多功能播放器 ...

  5. 50行代码实现的一个最简单的基于 DirectShow 的视频播放器

    本文介绍一个最简单的基于 DirectShow 的视频播放器.该播放器对于初学者来说是十分有用的,它包含了使用 DirectShow 播放视频所有必备的函数. 直接贴上代码,具体代码的含义都写在注释中 ...

  6. 基于UDP的效劳器端和客户端

    后面的文章中我们给出了几个TCP的例子,关于UDP而言,只需能了解后面的内容,完成并责难事. UDP中的效劳器端和客户端没有衔接 UDP不像TCP,无需在衔接形态下交流数据,因而基于UDP的效劳器端和 ...

  7. 最简单的基于libVLC的例子:最简单的基于libVLC的视频播放器

    最简单的基于libVLC的例子文章列表: 最简单的基于libVLC的例子:最简单的基于libVLC的视频播放器 最简单的基于libVLC的例子:最简单的基于libVLC的视频播放器(图形界面版) 最简 ...

  8. 最简单的基于 DirectShow 的视频播放器

    源程序下载链接:https://download.csdn.net/download/bmjhappy/11250669 50行代码实现的一个最简单的基于 DirectShow 的视频播放器 本文介绍 ...

  9. QT软件开发-基于FFMPEG设计视频播放器-解码音频(三)

    QT软件开发-基于FFMPEG设计视频播放器-CPU软解视频(一) https://xiaolong.blog.csdn.net/article/details/126832537 QT软件开发-基于 ...

最新文章

  1. Vue.js双向绑定的实现原理
  2. Spring Boot 实现接口幂等性的 4 种方案!还有谁不会?
  3. 哥们,你真以为你会做这道JVM面试题?
  4. 在疯狂的前端世界,为什么选择学习React
  5. spss process插件_SPSS教程:绘制调节效应图
  6. Centos下Nodejs+npm环境-部署记录
  7. 小球进盒子C语言,N个小球放进M个盒子算法-Go语言中文社区
  8. CentOS7安装 MySQL主从集群
  9. 【问题汇总】Ubuntu使用常见问题
  10. c++中的队列_C ++中的队列
  11. 分析Linux内核创建一个新进程的过程
  12. 2022年全国计算机二级Access数据库程序设计模拟试题及答案
  13. textfind:文本分析之词频分析-TF-IDF
  14. 成功背后(敬所有IT人)
  15. STM32 HAL库学习笔记4-SPI
  16. 计算机求职英语作文,英语作文_计算机专业大学毕业生求职信范文_沪江英语
  17. 配置Exchange 2010 服务器(一) 配置产品密钥及登录OWA时用户不需要输入域名称
  18. Windows Server 系统怎么显示桌面图标“这台电脑”。
  19. NMAP入门详细教程
  20. 页面内容,保存为TXT,下载到电脑

热门文章

  1. Redis 分布式锁进化史(解读 + 缺陷分析)
  2. 5个产品经理必须掌握的,小程序裂变案例
  3. Excel的发展历史
  4. python清除缓存的命令_python-操作缓存
  5. 安卓rxjava面试,15个经典面试问题及回答思路,已拿offer
  6. 基于Java方式如何实现数据同步
  7. Pytorch:使用官网提供数据集的相关参数设置,以CIFAR10为例进行说明
  8. FFmpeg HDR视频转SDR视频命令
  9. jso是什么意思_js中this什么意思
  10. java 地址反查邮编_地址查邮编示例代码