更新记录
1.4.3(2024-09-19) 下载此版本
修复:【插件】安卓偶现视频播放到中间卡住或者从头开始播放 修复:【插件】安卓onPlayError无错误信息返回
1.4.2(2024-08-16) 下载此版本
修复:【插件】ios开启手势返回上一页,播放中播放器无法销毁
1.4.1(2024-06-05) 下载此版本
【修复】视频下载中杀掉app视频无法继续下载
查看更多平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:6.0 - 10.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | 适用版本区间:9 - 14 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
[TOC]
1.版本说明
版本 | 时间 | 版本说明 | |
---|---|---|---|
v1.0.0 | 2022.12.01 | 支持场景视频云点播基础播放功能,包括加密和非加密视频的播放,暂停,停止,跳转等功能;支持画中画、下载、知识点、视频截图、音视频模式切换、弹幕、投屏、选集;支持自定义流量统计;支持获取实时网速; | |
v1.0.3 | 2023.02.13 | 增加依赖库 CocoaLumberjack.framework | |
v1.0.4 | 2023.02.17 | 抽离公共库到单独组件 | |
v1.0.5 | 2023.03.10 | 支持实时用户日志上报 | |
v1.0.6 | 2023.03.28 | 修复:华为p30pro手机上拿不到视频时间 | |
v1.0.7 | 2023.04.01 | 修复:安卓端实时用户日志统计上报异常 | |
v1.0.8 | 2023.04.28 | 支持记忆清晰度选择、视频记忆播放; 修复:断网情况下华为手机进度条展示异常; 修复:首次打卡视频没有网速显示; 修复:小米平板无法下载视频; 修复:安卓切换音频播放日志上报两次的异常 |
|
v1.0.9 | 2023.06.01 | 支持后台播放; 播放器初始化支持免传apiKey; 离线视频支持连续播放; 修复:安卓投屏搜索不到设备;修复:部分安卓设备因权限问题导致无法下载视频 |
|
v1.1.0 | 2023.06.13 | 下载视频时支持选择清晰度; 播放器支持屏幕锁定 |
|
v1.1.1 | 2023.06.25 | 修复:IOS获取不到当前连接wifi名称; 修复: 安卓已下载视频断网后无法播放 |
|
v1.2.0 | 2023.10.27 | 新增:【插件】视频后台播放,手机控制中心支持播放状态控件 新增: 【demo】播放器支持设置视频logo 新增:【插件】支持指定默认播放清晰度 新增:【demo】播放器支持设置清晰度排序 新增:【demo】支持网络检测 修复:【demo】iOS端离线缓存视频播放,进入播放后快速点击返回到视频列表也还有声音,导致再次点击播放其他视频的时候,出现两个声音在播放 修复:【demo】安卓端离线下载视频播放横屏显示不全 修复:【demo】断网播放后仍显示有网速 |
|
v1.3.0 | 2024.03.19 | 新增:[插件] 支持分属不同账号视频批量下载 | |
v1.3.1 | 2024.04.25 | 修复: [插件] 安卓播放已下载视频时,待下载视频无法继续下载的问题 | |
v1.4.0 | 2024.05.08 | 新增: [插件] sdk升级 | |
v1.4.1 | 2024.06.04 | 修复: [插件] [demo]视频下载中杀掉app视频无法继续下载 | |
v1.4.2 | 2024.08.12 | 修复: [插件] ios开启手势返回上一页,播放中视频无法销毁 | |
v1.4.3 | 2024.09.09 | 修复:【插件】安卓偶现视频播放到中间卡住或者从头开始播放 | 修复:【插件】安卓onPlayError无错误信息返回 |
2.快速开始
基础播放器
播放器插件为component类型,仅可在nvue页面中使用。为纯播放器视图,开发者可自行实现状态控制部分的样式,也可以下载示例工程复用示例的播放器实现。
页面添加播放器视图组件
播放器视图组件名称为 CCView,可以通过视频id播放获得场景视频
在nvue页面中添加如下代码:
<CCView
ref="CCView"
class="cc-view"
@onCCViewInit="onCCViewInit"
@onPrepared="onPrepared"
@onCompletion="onCompletion"
@onBufferingUpdate="onBufferingUpdate"
@onBufferingStart="onBufferingStart"
@onBufferingEnd="onBufferingEnd"
@onLog="onLog"
@onPlayError="onPlayError"></CCView>
CCView默认无尺寸,需要自行添加样式设置宽高
API及回调通知的使用
在CCView组件上添加 ref="CCView", 即可通过this.$refs.CCView调用播放器丰富的API
例如开始播放视频
this.$refs.CCView.start();
在CCView组件上添加@xxx="xxx",即可定义回调事件,xxx为回调事件名称
例如自定义onPrepared视频准备就绪可播放回调
<template>
<CCView @onPrepared="onPrepared"></CCView>
</template>
<script>
// ...
methods: {
onPrepared() {
console.log('视频准备就绪');
}
}
</script>
设置播放信息(必要步骤)
在视图初始化通知事件onCCViewInit中调用设置播放信息API
methods: {
onCCViewInit() {
const options = {
videoId: this.videoId,
userId: this.userId,
apiKey: this.apiKey
}
this.$refs.CCView.setVideoPlayInfo(options);
}
}
视频下载
下载插件为独立的module类型, 需要在 App.vue中引入,并在onLaunch时初始化
使用下载插件
// APP.vue
const CCDownload = uni.requireNativePlugin('HD-CCView-CCDownload');
// 初始化
onLaunch: function () {
const { platform } = uni.getSystemInfoSync();
if (platform === 'android') {
CCDownload.init({
userId: this.userId,
apiKey: this.apiKey
});
} else {
CCDownload.initDownloadManager();
}
}
开始下载
Downloader.start(params); // 参数格式见下方API说明
监听下载状态更新
const globalEvent = uni.requireNativePlugin('globalEvent');
// ios监听下载进度更新
globalEvent.addEventListener('downloadProgressUpdate', (e) => {}
// android监听下载进度
更新globalEvent.addEventListener('onUpdate', (e) => {}
// android监听下载完成
globalEvent.addEventListener('onDownloadFinish', (e) => {}
投屏
投屏插件为独立的module类型, 需要在 App.vue中引入,并在onLaunch时初始化
使用投屏插件
// APP.vue
const CCProjection = uni.requireNativePlugin('HD-CCView-CCProjection');
//初始化
onLaunch: function () {
CCProjection.initProjectionScreen();
}
监听可用投屏设备
const globalEvent = uni.requireNativePlugin('globalEvent');
globalEvent.addEventListener('onDevice', (e) => {})
开始投屏
Projection.startPush(params); // 参数格式见下方API说明
实时网速
实时网速插件为独立的module类型,需要在App.vue中引入, 并在onLaunch时初始化
使用实时网速插件
// APP.vue
const CCNetSpeedModule = uni.requireNativePlugin('HD-CCView-CCNetSpeedModule');
// 初始化并开启网络检测
onLaunch: function () {
if (ios) {
CCNetSpeedModule.initInternetSpeed();
CCNetSpeedModule.speedStart();
}
if (android) {
CCNetSpeedModule.getNetSpeed();
}
}
监听实时网速
const globalEvent = uni.requireNativePlugin('globalEvent');
globalEvent.addEventListener('onNetSpeed', (e) => {})
3.API说明
基础播放器
1.设置播放信息
setVideoPlayInfo(JsonObject json,UniJSCallback callback)
1.作用
初始化播放信息
2.注意
无
3.参数
参数名 | 类型 | 说明 |
---|---|---|
JsonObject | JsonObject | 参数1:videoId(视频id) 参数2:userId(用户id) 参数3:apiKey (请求唯一标识) 参数4:customId (自定义流量统计标识, 非必须) |
callback | UniJSCallback | 回调(当前无作用) |
2.开始播放
start()
1.作用
开始播放
2.注意
如果设置了自动播放无需调用
3.参数
参数名 | 类型 | 说明 |
---|
3.暂停
pause()
1.作用
暂停播放
2.注意
3.参数
参数名 | 类型 | 说明 |
---|
4.停止
stop()
1.作用
停止播放
2.注意
3.参数
参数名 | 类型 | 说明 |
---|
5.释放资源
destroy()
1.作用
释放所有播放资源
2.注意
3.参数
参数名 | 类型 | 说明 |
---|
6.获取播放总时长
getDuration(UniJSCallBack callback)
1.作用
获取当前视频的总长度,单位:秒
2.注意
3.参数
参数名 | 类型 | 说明 |
---|---|---|
callback | UniJSCallBack | 返回总时间 |
7.获取当前进度
getCurrentPosition(UniJSCallBack callback)
1.作用
获取当前播放的进度,单位:秒
2.注意
3.参数
参数名 | 类型 | 说明 |
---|---|---|
callback | UniJSCallBack | 返回当前时间 |
8.跳转
seekTo(long msec)
1.作用
跳转到某一位置
2.注意
3.参数
参数名 | 类型 | 说明 |
---|---|---|
msec | Number | 要跳转的时间(秒) |
9.自动播放
setAutoPlay(boolean autoPlay)
1.作用
设置自动播放
2.注意
3.参数
参数名 | 类型 | 说明 |
---|---|---|
autoPlay | boolean | true播放/false不自动播放 |
10.获取自动播放状态
isAutoPlay(UniJSCallBack callback)
1.作用
获取自动播放
2.注意
3.参数
参数名 | 类型 | 说明 |
---|---|---|
callback | UniJSCallBack | true播放/false不自动播放 |
11.设置清晰度
setDefinition(JSonObject jsonObject)
1.作用
设置清晰度
2.注意
3.参数
参数名 | 类型 | 说明 |
---|---|---|
jsonObject | JSonObject | quality:清晰度,通过getDefinition获取 |
12.获取清晰度
getDefinition(UniJSCallBack callback)
1.作用
获取清晰度
2.注意
3.参数
参数名 | 类型 | 说明 |
---|---|---|
callback | UniJSCallBack | [{ "quality":10, "desp":"描述" } ] |
13.设置倍速
setSpeed(float speed)
1.作用
设置倍速
2.注意
3.参数
参数名 | 类型 | 说明 |
---|---|---|
speed | float |
14.获取标题
getVideoTitle(UniJSCallBack callback)
1.作用
获取标题
2.注意
3.参数
参数名 | 类型 | 说明 |
---|---|---|
callback | UniJSCallBack |
15.获取流媒体类型
getMediaType(UniJSCallBack callback)
1.作用
获取媒体类型
2.注意
3.参数
参数名 | 类型 | 说明 |
---|---|---|
callback | UniJSCallBack | 1.视频 2.音频 |
16 截图
getScreenShot()
1.作用
视频截图
2.注意
3.参数
参数名 | 类型 | 说明 |
---|
17 音视频切换
// 安卓
this.$refs.CCView.playModelChanged(this.isVideoMode)
// ios
this.$refs.CCView.playModelChanged(this.isVideoMode ? this.iosPlayModeData.radios[0] : this.iosPlayModeData.videos[0])
1.作用
切换音频或视频播放
2.注意
1 前提
需要先获取当前视频是否支持音频播放
安卓通过回调onPlayMode获取
ios通过 this.$refs.CCView.getVideoData(callback); 获取
2 参数
安卓传入参数true表示 切换到音频播放 ,false 表示切换到视频播放
ios传入上一步获取的音频列表的第一项,切换到音频播放,传入上一步获取的视频列表的第一项,切换到视频播放
3.参数
参数名 | 类型 | 说明 |
---|
18 弹幕初始化(ios)
this.$refs.CCView.barrageInit();
1.作用
初始化弹幕功能
2.注意
1. 仅ios需要调用
2. 在onPrepared中调用
3.参数
参数名 | 类型 | 说明 |
---|
19 设置弹幕视频id (ios)
this.$refs.CCView.setBarrageVideoId(id);
1.作用
设置弹幕视频id
2.注意
1. 仅ios需要调用
2. 在onPrepared中调用
3.参数
参数 | 类型 | 说明 |
---|---|---|
id | string | 视频id |
20. 发送弹幕
this.$refs.CCView.sendBarrageWithBarrage(params);
1.作用
发送弹幕
2.注意
3.参数
参数 | 类型 | 说明 |
---|---|---|
content | string | 弹幕内容 |
fc | string | 颜色 0xffffff (注意格式) |
pt | number | 弹幕时间点 (单位毫秒) |
21. 获取知识点数据 (ios)
this.$refs.CCView.getKnowledgeData(params, callback)
1.作用
获取知识点数据列表
2.注意
仅ios需要调用
3.参数
参数 | 类型 | 说明 |
---|---|---|
videoId | string | 视频id |
userId | string | 用户id |
callback | function | 返回值为知识点数据 |
22. 获取音视频数据 (ios)
this.$refs.CCView.getVideoData(callback);
1.作用
停止播放
2.注意
仅ios需要调用
返回数据调用 this.$refs.CCView.playModelChanged的时候作为参数用到
3.参数
参数 | 类型 | 说明 |
---|---|---|
callback | function | 返回值格式 ischange : true / false 是否支持音频播放 radios: [] 音频数据 videos:[] 视频数据 |
23. 获取视频地址
this.$refs.CCView.getPlayUrl(callback)
1.作用
获取视频地址
2.注意
调用投屏api时会作为参数用到
3.参数
参数 | 类型 | 说明 |
---|---|---|
callback | function | 返回值: string 视频地址 投屏时用到 |
24. 获取视频信息
this.$refs.CCView.getVideoInfo(callback)
1.作用
获取视频信息(默认清晰度等)
2.注意
3.参数
参数 | 类型 | 说明 |
---|---|---|
callback | function | 返回值: Object 视频信息 |
25. 指定视频播放清晰度
this.$refs.CCView.setVideoQuality(quality)
1.作用
设置播放清晰度
2.注意
在setVideoPlayInfo前调用,设置播放清晰度
3.参数
参数 | 类型 | 说明 |
---|---|---|
quality | init | 10 清晰 20 高清 |
26.回调说明
事件 | 触发时间 | 备注 |
---|---|---|
onCCViewInit | 视图初始化完成 | 在该回调中执行setVideoPlayInfo |
onPrepared | 视频准备就绪,可播放 | 在该回调中执行getVideoTitle等方法获取视频详细信息 |
onCompletion | 播放完毕 | |
onBufferingUpdate | 当前缓冲进度 | 返回值:e.detail.duration 缓存时长 |
onBufferingStart | 缓冲开始 | |
onBufferingEnd | 缓冲结束 | |
onPlayError | 播放错误 -10000 无法播放 |
返回值:视频播放异常信息 |
Knowledge (安卓) | 获取知识点数据 | 返回值:e.detail 知识点数据 |
acceptBarrageEvent | 接收弹幕数据 | 返回值:e.detail.barrageList 弹幕列表 |
barrageError | 弹幕异常 | |
sendBarrageSuccess | 弹幕发送成功 | |
sendBarrageError | 弹幕发送失败 | |
onPlayMode (安卓) | 是否支持音频播放 | 返回值:e.detail.playmode (0 为 支持音视频切换 |
onMenuPlay | 用户点击播放控件的播放按钮时触发 | |
onMenuPause | 用户点击播放控件的暂停按钮时触发 | |
onMenuPrevious | 用户点击播放控件的上一个按钮时触发 | |
onMenuNext | 用户点击播放控件的下一个按钮时触发 |
下载插件
1.初始化下载插件
// 安卓
CCDownload.init(JsonObject);
// ios
CCDownload.initDownloadManager();
1.作用
初始化下载插件
2.注意
App全局调用一次
3.参数
参数名 | 类型 | 说明 |
---|---|---|
JsonObject | JsonObject | 参数1:userId(用户id) 参数2:apiKey (请求唯一标识) |
2.开始下载
CCDownload.startWithDownload(JsonArray | JsonObj);
1.作用
开始下载
2.注意
安卓、ios参数格式有差异
3.参数
参数名 | 类型 | 示例 | 说明 |
---|---|---|---|
JsonArray(安卓) | Array | list.map(item => { return { userId: this.userId, apiKey: this.apiKey, verificationCode: this.verificationCode, videoId: item.videoId, verificationCode: this.verificationCode, downloadTitle: item.videoTitle definition: item.definition } } |
userId:用户Id apiKey:请求唯一标识 verificationCode: videoId:视频Id verificationCode: downloadTitle: 标题 definition:清晰度 |
JsonObj(ios) | Object | { userId: this.userId, apiKey: this.apiKey, verificationCode: this.verificationCode, videoIds: list.map(item => item.videoId) definitions: list.map(item => item.definition)} |
userId:用户Id apiKey:请求唯一标识 verificationCode: videoIds:视频id列表 definitions: 清晰度列表 |
3. 暂停下载
CCDownload.setDownloadPause(JsonArray | JsonObj)
-
作用
暂停下载
-
注意
1 安卓、ios参数格式有差异 2 ios的参数是 downloadProgressUpdate的返回值原样传入
-
参数
参数名 | 类型 | 示例 | 说明 |
---|---|---|---|
JsonArray(安卓) | array | { videoId: item.videoId } |
|
JsonObj (ios) | Obj | 为 downloadProgressUpdate 回调的返回值 |
4. 恢复下载
CCDownload.setDownloadResume(params)
1.作用
恢复下载
2.注意
3.参数 | 参数名 | 类型 | 示例 | 说明 |
---|---|---|---|---|
JsonArray(安卓) | array | { videoId: item.videoId } |
||
JsonObj (ios) | Obj | 为 downloadProgressUpdate 回调的返回值 |
5. 删除
CCDownload.setDownloadDelete(params);
1.作用
安卓:删除正在下载或暂停下载(除了下载完成)的视频
ios:删除所有状态的视频
2.注意
3.参数 | 参数名 | 类型 | 示例 | 说明 |
---|---|---|---|---|
JsonArray(安卓) | array | { videoId: item.videoId } |
||
JsonObj (ios) | Obj | 为 downloadProgressUpdate 回调的返回值 |
6. 删除已下载视频(安卓)
CCDownload.setDownloadFinishedDelete(params);
1.作用
删除已下载视频
2.注意
1. 仅安卓
2. 参数格式与删除下载中、暂停中视频有差异
3.参数 | 参数名 | 类型 | 示例 | 说明 |
---|---|---|---|---|
params(安卓) | object | { title: item.videoTitle, format: item.format } |
title: 视频title format:视频格式 |
7. 主动更新进度 (安卓)
CCDownload.update();
1.作用
触发安卓端 的globalEvent onUpdate
2.注意
1. 需要定时调用该方法,才能触发安卓的进度更新通知
3.参数
参数名 | 类型 | 说明 |
---|
8. 获取下载视频路径 (安卓)
CCDownload.getFilePath();
1.作用
告诉安卓端下载好的视频的路径
2.注意
在CCDownload.init前调用
9. globalEvent说明
事件 | 触发时机 | 备注 |
---|---|---|
downloadProgressUpdate(ios) | ios下载中进度变化通知 | 返回数据需要缓存,以供暂停、恢复、删除时作为参数 |
onUpdate(安卓) | 安卓监听下载进度 | 需要定时主动调用update方法,才会触发 |
onDownloadFinish(安卓) | 安卓监听下载完成 | 需要定时主动调用update方法,才会触发 |
投屏插件
1. 初始化
CCProjection.initProjectionScreen();
1.作用
投屏插件初始化
2.注意
1. 全局执行一次
3.参数
参数名 | 类型 | 说明 |
---|
2. 获取当前连接wifi名称
CCProjection.getConnectWifiName(callback)
1.作用
获取当前连接wifi的名称
2.注意
3.参数
参数 | 类型 | 说明 |
---|---|---|
callback | function | 返回值:当前wifi名称 |
3. 刷新设备列表
CCProjection.projectionScreenRefresh()
1.作用
刷新当前可用设备列表
2.注意
3.参数
参数名 | 类型 | 说明 |
---|
4. 开始投屏
CCProjection.startPush(params);
1.作用
开始投屏
2.注意
1. 安卓、ios参数有差异
2. 加密视频安卓不支持投屏播放、ios可提示使用airplay播放(加密视频格式为.pcm)
3.参数
参数 | 类型 | 说明 |
---|---|---|
playUrl | string | 视频地址 (通过getPlayUrl获取 |
device | obj | 设备信息 (在golbalEvent onDevice中获取 |
5.投屏暂停
CCProjection.pause();
1.作用
暂停投屏中的视频播放
2.注意
3.参数
参数名 | 类型 | 说明 |
---|
6. 投屏恢复
CCProjection.resume();
1.作用
恢复投屏中的视频播放
2.注意
3.参数
参数名 | 类型 | 说明 |
---|
7. 结束投屏
CCProjection.stopPush();
1.作用
退出投屏
2.注意
3.参数
参数名 | 类型 | 说明 |
---|
8. 设置音量
CCProjection.setVolume(volume);
1.作用
设置投屏音量
2.注意
3.参数
参数 | 类型 | 说明 |
---|---|---|
volume | Number | 投屏音量 |
9. 进度跳转
CCProjection.seek(position);
1.作用
投屏视频进度跳转
2.注意
3.参数
参数 | 类型 | 说明 |
---|---|---|
position | Number | 跳转时间点 (单位 毫秒) |
10. globalEvent说明
事件 | 触发时机 | 说明 |
---|---|---|
onDevice | 搜索到可用设备列表 | 返回值为可用设备列表 |
upnpSearchError | 搜索失败 | |
onProjectionPlay | 投屏开始 | |
connectError | 投屏失败 |
实时网速插件
1. 初始化(ios)
CCNetSpeedModule.initInternetSpeed();
1.作用
插件初始化
2.注意
1. 全局执行一次
3.参数
参数名 | 类型 | 说明 |
---|
2. 开始检测网速 (ios)
CCNetSpeedModule.speedStart();
1.作用
开始检测网速
2.注意
3.参数
参数名 | 类型 | 说明 |
---|
3. 停止检测网速 (ios)
CCNetSpeedModule.speedEnd();
1.作用
停止检测网速
2.注意
3.参数
参数名 | 类型 | 说明 |
---|
4. 获取实时网速 (安卓)
CCNetSpeedModule.getNetSpeed();
1.作用
获取实时网速,触发安卓端 的globalEvent onNetSpeed
2.注意
1. 需要定时调用该方法,才能触发安卓的网速更新通知
3.参数
参数名 | 类型 | 说明 |
---|
5. GlobalEvent说明
事件 | 触发时机 |
---|---|
onNetSpeed | 开始网速检测,获取到实时网速后 |