播放器:七牛播放器小记

播放器:七牛播放器小记

目前开源播放器很多,项目中采用了七牛播放器,再次小结一下

1. 版本迭代

最近几个版本更新,更多记录点我查看
在这里插入图片描述
GitHub:播放器地址
文档地址:官方SDK文档

2. 播放器特点

2.1 播放控件有2种方法可选

  • PLVideoView,基于 SurfaceView

  • PLVideoTextureView,基于TextureView

2.2 播放器参数

  • 软硬解自动切换

  • 变速播放

/**
 * 设置倍数播放
 * @param speed 倍数值,16 进制表示,高 4 位代表分子,低 4 位代表分母
 * 例如:0X00010002 表示 0.5 倍数,0X00040001 表示 4 倍数
 * 范围:0.1~32 倍数
 */
public boolean setPlaySpeed(int speed);

/**
 * 设置倍数播放
 * @param speed 倍数值,0.1 - 32
 */
public boolean setPlaySpeed(float speed);


  • 视频截图(captureImage视频截图,截图数据将会在 PLOnImageCapturedListener 中回调)
/**
 * Capture video image
 * @param delayTimeMs 截取调用此方法后相应毫秒后的视频画面,仅对点播流生效
 */
public void captureImage(long delayTimeMs);

  • 播放地址,可以是 /path/to/local.mp4 本地文件绝对路径,或 HLS URL,或 RTMP URL,所以是支持直播
  • 通过 setVideoArea 方法,播放视频的一部分区域。若所有参数均为 0,则不裁剪画面
/**
 * Set video area
 * @param topLeftX top left x
 * @param topLeftY top left y
 * @param bottomRightX bottom right x
 * @param bottomRightY bottom right y
 */
 public void setVideoArea(int topLeftX, int topLeftY, int bottomRightX, int bottomRightY);

3. 集成注意点

  1. 由于 Android 7.0 使用 BoringSSL 替换了 OpenSSL,一些依赖系统内建 OpenSSL 的程序在一些 7.0+ 的 ROM 里可能会崩溃。如果您的应用 targetSdkVersion >= 24,那么强烈推荐将 libopenssl.so 加入至 jniLibs 目录

  2. 集成播放器可设置预加载动画

View loadingView = findViewById(R.id.LoadingView);
mVideoView.setBufferingIndicator(loadingView);
  1. 画面预览模式
// 原始尺寸、适应屏幕、全屏铺满、16:9、4:3
mVideoView.setDisplayAspectRatio(PLVideoView.ASPECT_RATIO_ORIGIN);
mVideoView.setDisplayAspectRatio(PLVideoView.ASPECT_RATIO_FIT_PARENT);
mVideoView.setDisplayAspectRatio(PLVideoView.ASPECT_RATIO_PAVED_PARENT);
mVideoView.setDisplayAspectRatio(PLVideoView.ASPECT_RATIO_16_9);
mVideoView.setDisplayAspectRatio(PLVideoView.ASPECT_RATIO_4_3);

  1. 一个常见的场景是多个播放器实例并排播放,PLVideoTextureView 对此场景进行了专门优化,可以通过设置 PLVideoTexureView.setSplitMode() 进行处理
/**
 * Set split mode
 * @param mode the mode
 * @param preferredSplitWidth preferred width, in px
 * @param preferredSplitHeight preferred height, in px               
 */
public void setSplitMode(int mode, int preferredSplitWidth, int preferredSplitHeight)

/**
 * Disable split mode
 */
public void disableSplitMode() 

  1. 当播放完成,系统退出时,不要忘记调用 release 函数释放资源
mMediaPlayer.release();
  1. 功能设置相关几个参数
AVOptions options = new AVOptions();

public final static int MEDIA_CODEC_SW_DECODE = 0;
public final static int MEDIA_CODEC_HW_DECODE = 1;
public final static int MEDIA_CODEC_AUTO = 2;

// DNS 服务器设置
// 若不设置此项,则默认使用 DNSPod 的 httpdns 服务
// 若设置为 127.0.0.1,则会使用系统的 DNS 服务器
// 若设置为其他 DNS 服务器地址,则会使用设置的服务器
options.setString(AVOptions.KEY_DNS_SERVER, server);

// DNS 缓存设置
// 若不设置此项,则每次播放未缓存的域名时都会进行 DNS 解析,并将结果缓存
// 参数为 String[],包含了要缓存 DNS 结果的域名列表
// SDK 在初始化时会解析列表中的域名,并将结果缓存
options.setStringArray(AVOptions.KEY_DOMAIN_LIST, domainList);

// 解码方式:
// codec=AVOptions.MEDIA_CODEC_HW_DECODE,硬解
// codec=AVOptions.MEDIA_CODEC_SW_DECODE, 软解
// codec=AVOptions.MEDIA_CODEC_AUTO, 硬解优先,失败后自动切换到软解
// 默认值是:MEDIA_CODEC_SW_DECODE
options.setInteger(AVOptions.KEY_MEDIACODEC, codec);

// 若设置为 1,则底层会进行一些针对直播流的优化
options.setInteger(AVOptions.KEY_LIVE_STREAMING, 1);

// 快开模式,启用后会加快该播放器实例再次打开相同协议的视频流的速度
options.setInteger(AVOptions.KEY_FAST_OPEN, 1);

// 打开重试次数,设置后若打开流地址失败,则会进行重试
options.setInteger(AVOptions.KEY_OPEN_RETRY_TIMES, 5);

// 预设置 SDK 的 log 等级, 0-4 分别为 v/d/i/w/e
options.setInteger(AVOptions.KEY_LOG_LEVEL, 2);

// 打开视频时单次 http 请求的超时时间,一次打开过程最多尝试五次
// 单位为 ms
options.setInteger(AVOptions.KEY_PREPARE_TIMEOUT, 10 * 1000);

// 默认的缓存大小,单位是 ms
// 默认值是:500
options.setInteger(AVOptions.KEY_CACHE_BUFFER_DURATION, 500);

// 最大的缓存大小,单位是 ms
// 默认值是:2000,若设置值小于 KEY_CACHE_BUFFER_DURATION 则不会生效
options.setInteger(AVOptions.KEY_MAX_CACHE_BUFFER_DURATION, 4000);

// 是否开启直播优化,1 为开启,0 为关闭。若开启,视频暂停后再次开始播放时会触发追帧机制
// 默认为 0
options.setInteger(AVOptions.KEY_LIVE_STREAMING);

// 设置拖动模式,1 位精准模式,即会拖动到时间戳的那一秒;0 为普通模式,会拖动到时间戳最近的关键帧。默认为 0
options.setInteger(AVOptions.KEY_SEEK_MODE, 1);

// 设置 HLS DRM 密钥
byte[] key = {0x##, 0x##, 0x##, 0x##, 0x##, ……};
options.setByteArray(AVOptions.KEY_DRM_KEY, key);

// 设置 MP4 DRM 密钥
String key = "AbcDefgh";
options.setString(AVOptions.KEY_COMP_DRM_KEY, key);

// 设置偏好的视频格式,设置后会加快对应格式视频流的打开速度,但播放其他格式会出错
// m3u8 = 1, mp4 = 2, flv = 3
options.setInteger(AVOptions.KEY_PREFER_FORMAT, 1);

// 开启解码后的视频数据回调
// 默认值为 0,设置为 1 则开启
options.setInteger(AVOptions.KEY_VIDEO_DATA_CALLBACK, 1);

// 开启解码后的音频数据回调
// 默认值为 0,设置为 1 则开启
options.setInteger(AVOptions.KEY_VIDEO_DATA_CALLBACK, 1);

// 设置开始播放位置
// 默认不开启,单位为 ms
options.setInteger(AVOptions.KEY_START_POSITION, 10 * 1000);

// 请在开始播放之前配置
mVideoView.setAVOptions(options);

  1. 错误码的我觉得还是有必要贴张图
    在这里插入图片描述
  2. 播放首开时间过长,注意一下DNS 解析优化
  3. 版本迭代更新细节,可参考更新文档滑到页面底部查看
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初心一点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值