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 主流芯片体系架构
5、设备以及系统要求

  • 系统要求:Android 2.3 (API 9) 及其以

6、混淆

为了保证正常使用 SDK ,请在 proguard-rules.pro 文件中添加以下代码:

  1. -keep classcom.pili.pldroid.player.** { *; }
  2. -keep classcom.qiniu.qplayer.mediaEngine.MediaPlayer{*;}


7、导入SDK

SDK 主要包含 demo 代码、 PLDroidPlayer jar 包,以及 sdk 依赖的动态库文件。

将 SDK 文件导入您的工程:


Android实现流播放视频控件,实现秒播,显示网速和加载进度

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 工程,集成后的工程示例如下:

Android实现流播放视频控件,实现秒播,显示网速和加载进度


8、修改 build.gradle

双击打开您的工程目录下的 build.gradle,确保已经添加了如下依赖,如下所示:


拷贝
  1. <com.pili.pldroid.player.widget.PLVideoTextureView
  2. android:id="@+id/PLVideoTextureView"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:layout_gravity="center" />
初始化:

如果采用 PLVideoView 的话,初始化的方法如下:

PLVideoView mVideoView = (PLVideoView) findViewById(R.id.PLVideView);

如果采用 PLVideoTextureView 的话,初始化的方法如下:

PLVideoTextureView mVideoView = (PLVideoTextureView) findViewById(R.id.PLVideoTextureView);

关联播放控制器

Demo 里面提供了一个播放控制器示例,MediaController,您可以随意修改满足定制化需求,将该控制器控件关联到 PLVideoView 或者 PLVideoTextureView的方法如下:

  1. MediaController mMediaController = new MediaController(this);
  2. mVideoView.setMediaController(mMediaController);

设置加载动画

PLVideoView 和 PLVideoTextureView 提供了设置加载动画的接口,在播放器进入缓冲状态时,自动显示加载界面,缓冲结束后,自动隐藏加载界面,设置方法如下:


拷贝
  1. View loadingView = findViewById(R.id.LoadingView);
  2. mVideoView.setBufferingIndicator(loadingView);
该 loadingView 可以是任意的 Android View 视图对象。

设置播放状态监听器

PLVideoView 和 PLVideoTextureView 都提供了丰富的播放状态消息回调,您可以通过 setXXXListener 接口实现各种消息状态的获取,示例如下:


拷贝
  1. mVideoView.start();
  2. mVideoView.pause();
  3. mVideoView.stopPlayback();

基本上集成指南就这些,这里只介绍一个,还有另一个PLMediaPlayer 

大家可以自己去看文档,这里有的介绍的不是很清楚的话请见谅,可以去这个地址看官网文档,我就是自己看的文档集成的!然后下载的demo看着demo中代码修改的!

地址:<a> https://developer.qiniu.com/pili/sdk/1210/the-android-client-sdk </a>

好了,今天就到这里了,希望对大家有所帮助!




<button title="" class="btn copybtn" data-toggle="tooltip" data-placement="top" container="body" data-original-title="拷贝代码" data-clipboard-text="" <com.pili.pldroid.player.widget.plvideoview"="" style="margin: 0px; font-style: inherit; font-variant: inherit; font-stretch: inherit; font-size: 12px; line-height: 1.42857; font-family: inherit; color: rgb(118, 118, 118); overflow: visible; cursor: pointer; padding: 5px 8px; white-space: nowrap; vertical-align: middle; touch-action: manipulation; user-select: none; background-image: none; border-width: 1px; border-style: solid; border-color: rgb(225, 225, 232); border-radius: 0px 4px; position: absolute; background-color: rgb(255, 255, 255); right: -2px; top: -1px;">