Android直播播放器+弹幕使用总结
今日科技快讯
继越狱、刷榜之后,寄生于苹果系统、打着第三方iOS助手类旗号的新手段正在崛起。这是一种不同于越狱的渠道,它无需越狱,不破坏苹果上的软件包,只是在软件上面打开一个口子,叠加一个支付账户出口,绕开苹果账户系统。借助于它们,很多游戏、工具软件沾到了苹果的“荣光”,正在闷声发大财。但是苹果公司对此却有心无力。
作者简介
本篇是 小河马 的第二篇投稿,分享了他学习开源播放器的过程。希望能对大家有所帮助。
小河马 的博客地址:
http://www.jianshu.com/u/14354bcb0e09
介绍
现在有很多的开源播放器,首选肯定是B站的
ijkplayer
https://github.com/Bilibili/ijkplayer
本文所选的是基于 ijkplayer 封装的开源播放器
JieCaoVideoPlayer
https://github.com/lipangit/JieCaoVideoPlayer
弹幕使用的也是B站的开源项目
https://github.com/Bilibili/DanmakuFlameMaster
JieCaoVideoPlayer 默认提供了基本的UI界面,但是肯定满足不了每个人的界面要求,所以我们就需要在 JieCaoVideoPlayer 上简单的封装一下。首先新建一个 HVideoPlayer类 继承 JCVideoPlayerStandard:
JCVideoPlayerStandard 对一些基本的界面操作以及页面逻辑做了封装,我们只需要继承这个类,然后自定义自己的布局。如果有你不需要的控件就隐藏,删除可能会报错。重写 init方法 初始化一些你自定义的控件和按钮的点击事件。
JieCaoVideoPlayer 是通过 setUp方法 来初始化播放器参数,所以我们也需要来重写这个方法来初始化我们自己的一些参数
需要注意一点的就是播放器器全屏,这里修改了 FULLSCREEN_ORIENTATION 参数为 ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE 使播放器点击全屏后强制全屏并且是横屏的,默认情况点击全屏后是竖屏的,并且根据重力感应调整屏幕方向。需要注意的是使用播放器的Activity需要设置为竖屏
android:screenOrientation="portrait"
否则调用横屏后整个 Activity 会整个横屏。
需要注意播放器横屏后会创建一个新的播放器实例和当前的播放器不是同一个实例,也就是说点击全屏后会重新初始化当前类,并重新调用 setUp方法。那怎么拿到前面小屏模式下一些必须的参数呢?查看下 JCVideoPlayer 全屏的源码:
可以看到在全屏的时候重新创建了 JCVideoPlayer 的实例,并且调用了 setUp方法 传入了 url 以及全屏,后面这个 objects 是干嘛的呢?查看源码:
可以看到这个 objects 是在父类的 setUp 中赋值的,说明我们在调 setUp 传入的 objects 会相应的传入全屏播放器实例中,这也就有了上面的代码
默认的 objects 的第一个参数是标题,后面就可以传递自己的一些字段,比如我们在全屏实例中需要回调一些方法,就要将这些接口传到全屏播放器示例中,否则在全屏中使用这些字段会报空指针。
在 setUp 中如果当前是全屏那么我们需要去加载弹幕,currentScreen 字段是当前的状态,如果是全屏就显示弹幕否则就隐藏弹幕相关的东西。关于弹幕库的使用可以参考郭神的文章:
http://blog.csdn.net/guolin_blog/article/details/51933728
这里我就不再细讲了。
在当直播流异常或者的或者网络异常我们需要做一些操作,但 JCVideoPlayer 并没有提供这方面的回调。又只有发扬我们的探索精神去探索源码了。
在流异常或者网络异常会打印 onError 日志,所以找到了这个方法,这下就简单了重写这个方法就行了
默认播放上下有一个工具栏,在3秒后会自动隐藏,可是我们不需要自动隐藏可以重写这个方法
可以通过代码的方式自动开始播放,如果在播放就暂停播放
jcVideoPlayer.startButton.performClick();
默认的 JieCaoVideoPlayer 还支持重力感应进入全屏,只需要在 Activity 中加入如下代码:
JieCaoVideoPlayer 还支持浮层小窗播放,能在 ListView、ViewPager 和 Fragment 等多重嵌套模式下全屏工作,源码的类大部分方法都是 public 需要什么重写就行了。
使用
在Acitivity中生命周期中加入对播放器的管理:
还可以添加 UserAction 对播放器的各种状态监听
最后效果如下:
demo 中的直播流不太稳定大家可以替换成自己觉得稳定的直播流,或者换成一个视频也可以。有什么问题欢迎交流!
本文项目地址:
https://github.com/Hemumu/HLiveDemo/tree/master
更多
每天学习累了,看些搞笑的段子放松一下吧。关注最具娱乐精神的公众号,每天都有好心情。
如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。
欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号:
Android直播播放器+弹幕使用总结相关推荐
- android弹幕视频播放器,Android直播播放器 弹幕使用总结
今日科技快讯作者简介 本篇是 小河马 的第二篇投稿,分享了他学习开源播放器的过程.希望能对大家有所帮助. 小河马的博客地址:http://www.jianshu.com/u/14354bcb0e09介 ...
- Android 直播 播放器 IJK播放器低延时120ms
基于上一篇文件rtmp推流<推流文章地址传送门>,需要解码播放器 ,由于是直播 所以需要延时优化到极致,采用播放器也是ijk开源播放器直接修改,目前测试1080p+音频延时效果如下图: 在 ...
- 腾讯云直播-Web 直播播放器 1.0
功能介绍 腾讯云视频直播播放器 Web SDK 解决方案,通过灵活的接口,快速同自有 Web 应用集成,以实现桌面应用播放功能,同时 SDK 提供在 Web 端上传视频的能力. 该 SDK 所播放的文 ...
- Vitamio打造自己的Android万能播放器
前言 虽然Android已经内置了VideoView组件和MediaPlayer类来支持开发视频播放器,但支持格式.性能等各方面都十分有限,这里与大家一起利用免费的Vitamio来打造属于自己的And ...
- 跨平台低延迟的RTMP/RTSP直播播放器设计实现
开发背景 2015年,当我们试图在市面上找一款专供直播播放使用的低延迟播放器,来配合测试我们的RTMP推送模块使用时,居然发现没有一款好用的,市面上的,如VLC或Vitamio,说白了都是基于FFMP ...
- Web直播播放器1.0——腾讯sdk网页直播播放器
https://www.qcloud.com/document/product/267/5704 功能介绍 腾讯云视频直播播放器Web SDK解决方案,可帮助腾讯云视频用户直接使用经过验证的视频播放能 ...
- 直播页面5:项目中的直播播放器框架GSYVideoPlayer
直播页面5:项目中的直播播放器框架GSYVideoPlayer 一.github地址 二.代码 0.快手官网获得直播地址 1.xml布局 2.java代码 一.github地址 https://git ...
- Android音视频学习系列(七) — 从0~1开发一款Android端播放器(支持多协议网络拉流本地文件)
系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...
- 使用Vitamio打造自己的Android万能播放器(2)—— 手势控制亮度、音量、缩放
前言 本章继续完善播放相关播放器的核心功能,为后续扩展打好基础. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://over1 ...
最新文章
- 选一线一张床还是二线一套房
- 如何在DataFrame 中优雅的增加一行,一列
- JVM的常用配置参数
- mysql 保留5位小数_小猿圈分享-MySQL保留几位小数的4种方法
- NVisionXR_iOS教程十 —— 加载视频控件
- 如何运用大数据进行信贷审批?
- 洛谷P1079 Vigenère 密码
- 【Linux】15 张 Vim 速查表奉上,帮你提高 N 倍效率!
- VS C# string 字符查找 寻找指定字符
- 将本地项目上传到码云仓库
- html怎么修改网页背景色,CSS如何设置网页背景颜色、背景图片
- 电脑重装系统后如何把网站设为首页
- jscript php,PHP, JScript和VBScript函数和类的语法
- Python+Selenium+Appium环境搭建
- 甘肃省谷歌地球高程DEM等高线下载
- 洛谷P1080 [NOIP2012 提高组] 国王游戏
- Lua打印table的工具函数dump
- windows下apache简单配置php解释器
- ipvsadm命令总结
- mongodb linux版本下载
热门文章
- Spark 参数说明
- Spark入门官方文档
- es - elasticsearch - aggs - pipeline - derivative
- Date中比较两个日期的方法
- keras IMDB数据集学习
- Qt connect有第5个参数你知道吗?
- 统计学怎么求加权指数_指数 统计学试卷
- 虚拟机+Ubuntu18.04+ORB_SLAM3+ROS环境配置(配置环境的过程以及途中出现的错误,解决方法)
- 互联网通信基础与Ajax篇
- 使用基于phython的OpenCV库imwrite()保存tiff格式图像