更新记录

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

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
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. 作用

    暂停下载
  2. 注意

    1 安卓、ios参数格式有差异
    2 ios的参数是 downloadProgressUpdate的返回值原样传入
  3. 参数

参数名 类型 示例 说明
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 开始网速检测,获取到实时网速后

隐私、权限声明

1. 本插件需要申请的系统权限列表:

1. 网络权限(INTERNET):请求服务器实现相关功能 2. 监听网络状态(ACCESS_NETWORK_STATE):监听网络状态改变实现断线重连的功能 3. 获取网络状态 (ACCESS_WIFI_STATE):获取网络状态来进行网络友好度提示 4. 蓝牙,获取蓝牙连接状态(BLUETOOTH):蓝牙耳机功能需要 5. 允许程序发现和配对蓝牙设备(BLUETOOTH_ADMIN):蓝牙耳机功能需要 6. 防止锁屏(WAKE_LOCK):防止屏幕自动关闭 7. 文件读写权限(WRITE_EXTERNAL_STORAGE、READ_EXTERNAL_STORAGE):文件读写

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

SDK名称: 获得场景视频云点播 收集内容: 设备相关信息(例如:设备型号、操作系统版本、唯一设备标识符等软硬件特征信息)、设备所在位置相关信息(例如:IP地址)、设备接入网络的方式和类型(例如:WiFi、4G网络等)。 用户信息:基于您使用获得场景视频服务而产生的用户访问记录、行为记录以及使用的SDK版本等。 收集目的: 用户行为及服务质量统计分析,并根据设备信息,在观看在线视频时进行网络调度调优,根据不同网络类型给用户提示等,提供更加刘畅的播放体验; 隐私协议内容地址:https://admin.bokecc.com/agreement.bo

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

作者未提供license.md

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问