继越狱、刷榜之后,寄生于苹果系统、打着第三方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
每天学习累了,看些搞笑的段子放松一下吧。关注最具娱乐精神的公众号,每天都有好心情。
如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。
欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号: