Android实现流播放视频控件,实现秒播,显示网速和加载进度
1、相信很多从事Android开发的朋友们肯定遇到过需要播放视频的功能,但是呢,Android自带的播放器VideoView大家忍不住想骂娘的感觉,那播放的速度,是在让人恶心,跟乌龟走路一样,慢死,但是网上也有很多朋友分享各种视频播放的控件,也有不错的,单大多是播放url地址的,对于服务器如果以流的形式来的话,感觉也会有些慢,不过也还过的去,我就遇到过,集成别人的,自己测试发现播放速度还行,结果到客户那里,人就手机半天播放不出来,人家不管,就说你这不行,怎么办呢?改吧。。。苦逼的日志,
2、经过我苦苦的寻找,终于找到一个不错的播放器,叫 Vitamio,也有很多小伙伴用过或者了解过,经过我一天的集成,终于在oppo手机上成功播放的流视频,这个Vitamio功能还是很强大的,但是呢,我在小米手机上测试,github官网上下载的demo居然不行,报错,闪退。怎么办呢?瞎捣鼓了近一天,也没搞出来怎么回事,放弃了!最后四处询问,终于找到一款不错的流播放器叫:PLVideoView ,下面详细介绍一下如果使用的!当然小伙伴们还可以去官网看文档。
地址为:<a> https://developer.qiniu.com/pili/sdk/1210/the-android-client-sdk </a>
3、七牛云直播: 它是一款专门用于直播的播放器,直播的话,肯定是流视频,这点也不是很懂,不细说了,这里是sdk的下载地址:https://github.com/pili-engineering/PLDroidPlayer/releases
这是官网的demo:https://github.com/pili-engineering/PLDroidPlayer
4、它的特性:
- [x] Android Min API 9
- [x] 支持 RTMP 和 HLS 协议的直播流媒体播放
- [x] 支持常见的音视频文件播放(MP4、mp3、flv 等)
- [x] 支持 MediaCodec 硬件解码
- [x] 提供播放器核心类
PLMediaPlayer
- [x] 提供
PLVideoView
控件 - [x] 提供
PLVideoTextureView
控件 - [x] 支持多种画面预览模式
- [x] 支持画面旋转(0度,90度,180度,270度)
- [x] 支持画面镜像变换
- [x] 支持播放器音量设置,可实现静音功能
- [x] 支持纯音频播放
- [x] 支持后台播放
- [x] 支持首屏秒开
- [x] 支持直播累积延时优化
- [x] 支持带 IP 地址的播放 URL
- [x] 支持设置封面
- [x] 支持软硬解自动切换
- [x] 支持 HTTPS 协议
- [x] 支持自动重连
- [x] 支持 H.265 播放
- [x] 支持七牛私有 DRM
- [x] 支持 mp4 本地缓存
- [x] 支持音视频数据回调
- [x] 支持自定义音视频渲染
- [x] 新增倍数播放功能(0.5x,1x,2x,4x 等)
- [x] 可高度定制化的
MediaController
- [x] 支持 ARM, ARMv7a, ARM64v8a, X86 主流芯片体系架构
- 系统要求:Android 2.3 (API 9) 及其以
6、混淆
为了保证正常使用 SDK ,请在 proguard-rules.pro 文件中添加以下代码:
- -keep classcom.pili.pldroid.player.** { *; }
- -keep classcom.qiniu.qplayer.mediaEngine.MediaPlayer{*;}
7、导入SDK
SDK 主要包含 demo 代码、 PLDroidPlayer jar 包,以及 sdk 依赖的动态库文件。
将 SDK 文件导入您的工程:
PLDroidPlayer SDK 支持 armv5、armv7、arm64 和 x86 多种 CPU 架构,目前市场上主流机型的 CPU 都采用的是 armv7 架构。您可以根据兼容性的需要,将 release 目录下的动态库,拷贝到您的工程对应的目录下,例如:armeabi-v7a 目录下的 so 则拷贝到工程的 jniLibs/armeabi-v7a 目录下。
由于 Android 7.0 使用 BoringSSL 替换了 OpenSSL,一些依赖系统内建 OpenSSL 的程序在一些 7.0+ 的 ROM 里可能会崩溃。如果您的应用 targetSdkVersion >= 24,那么强烈推荐将 libopenssl.so 加入至 jniLibs 目录。
同时,还需要将 pldroid-player-x.x.x.jar 包也拷贝到工程的 libs 目录下,具体可以参考 SDK 包含的 demo 工程,集成后的工程示例如下:
8、修改 build.gradle
双击打开您的工程目录下的 build.gradle
,确保已经添加了如下依赖,如下所示:
- <com.pili.pldroid.player.widget.PLVideoTextureView
- android:id="@+id/PLVideoTextureView"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_gravity="center" />
如果采用 PLVideoView
的话,初始化的方法如下:
PLVideoView mVideoView = (PLVideoView) findViewById(R.id.PLVideView);
如果采用 PLVideoTextureView
的话,初始化的方法如下:
PLVideoTextureView mVideoView = (PLVideoTextureView) findViewById(R.id.PLVideoTextureView);
关联播放控制器
Demo 里面提供了一个播放控制器示例,MediaController
,您可以随意修改满足定制化需求,将该控制器控件关联到 PLVideoView
或者 PLVideoTextureView
的方法如下:
- MediaController mMediaController = new MediaController(this);
- mVideoView.setMediaController(mMediaController);
设置加载动画
PLVideoView
和 PLVideoTextureView
提供了设置加载动画的接口,在播放器进入缓冲状态时,自动显示加载界面,缓冲结束后,自动隐藏加载界面,设置方法如下:
- View loadingView = findViewById(R.id.LoadingView);
- mVideoView.setBufferingIndicator(loadingView);
loadingView
可以是任意的 Android View 视图对象。设置播放状态监听器
PLVideoView
和 PLVideoTextureView
都提供了丰富的播放状态消息回调,您可以通过 setXXXListener
接口实现各种消息状态的获取,示例如下:
- mVideoView.start();
- mVideoView.pause();
- mVideoView.stopPlayback();
基本上集成指南就这些,这里只介绍一个,还有另一个PLMediaPlayer
大家可以自己去看文档,这里有的介绍的不是很清楚的话请见谅,可以去这个地址看官网文档,我就是自己看的文档集成的!然后下载的demo看着demo中代码修改的!
地址:<a> https://developer.qiniu.com/pili/sdk/1210/the-android-client-sdk </a>
好了,今天就到这里了,希望对大家有所帮助!