回放SDK

[TOC]

房间

概述

可获取直播间当前流类型信息、监听用户登录成功、失败

相关API

信息

当前流类型信息
window.on_cc_live_streaminfo = function(data){}

Windows平台 5.5.0开始支持,Mac平台5.6.0开始支持

返回值

{
    "time": 1000,  //  相对回放开始点的相对偏移量(毫秒)
    "type": 10  // 10: 摄像头, 20: 图片, 30: 插播视频, 40: 区域分享, 50: 桌面共享, 60: 自定义场景
}

用户

登录成功
window.on_cc_login_success = function(data){}

返回值

{
     template:{
        desc:"视频",  //模板描述信息
        name:"模板一",//模板名称
        type:"1"         //模板类型  (1:大屏模式 ,2:问答、视频、聊天 ,3:视频、聊天,4:文档、视频。聊天,5:视频、文档、问答、聊天,6:视频、问答

    },
     viewer:{
        id:"ae4dec",//  观看者id
        groupId:"1",// 观看者分组id
        name:"名称" // 观看者名称
    }
}
登录失败
window.on_cc_login_error = function(error){}

直播间配置

获取直播间配置
window.cc_get_room_setting = function(data){
    const { replay } = data
    consle.log(`直播间配置详情为:${replay.settings}`)
}

返回值详情

{
    "replay": {
        "name": "xxx", // 直播间名称
        "introSwitch": 1, // 回放简介开关; 1-开启, 0-关闭;
        "startTime": "xxxx-xx-xx xx:xx:xx", // 直播开始时间
        "endTime": "xxxx-xx-xx xx:xx:xx", // 直播结束时间
        "settings": {
            ...
            "replayHintSwitch": 1, // 回放提示语开关; 1-开启, 0-关闭;
            "replayHintContent": "欢迎收看xxx的回放", // 回放提示语内容(内容长度<=20个字符)
            ...
        }
    }
    ...
}

播放器

概述

可监听播放器加载完成、准备完成、播放开始、暂停、恢复、停止事件;可获取回放打点、跳转到指定时间播放、获取当前播放时间、获取视频总时长; 可监听讲师端启动区域分享/桌面共享的开始、结束事件 支持记忆上次观看时间

相关API

基本

播放器加载完成
window.on_cc_live_player_load = function () {}
播放器准备完成
window.on_cc_player_ready = function () {}
开始观看回放
window.on_cc_callback_play = function () {
  console.log('回放开始播放了')
}
播放开始

仅支持PC端

window.on_player_start = function () {}
播放暂停

仅支持PC端

window.on_spark_player_pause = function () {}
恢复播放

仅支持pc端

window.on_spark_player_resume = function () {}
播放停止

仅支持pc端

window.on_spark_player_end = function () {}
回放打点
window.on_cc_loadDotPointsData = function (data) {
    console.log(data)
}
data: [
    {
        time: 0 // s
        desc: 'xxxx'
    }
]
播放暂停
$.DW.play()
跳转到指定时间播放
$.DW.seek(time, status, callback)   // 跳转到指定时间播放,time单位为秒

参数说明

参数名称 参数类型 说明 是否必须
time Number 单位秒
status String 'play': 完成seek后播放回放
'pause': 完成seek后暂停回放
callback Function 完成seek后执行的回调函数
获取视频缩略图

回放生成缩略图需要联系客服开通 缩略图预览 权限 生成的回放缩略图是一张1600x900的大雪碧图,为10分钟的截图数据,6秒截一张图,每张小图大小160x90,共10行10列,需要使用css定位展示对应时间点小图

$.DW.getVideoPreview(time) // 获取指定时间的视频缩略图信息, time单位为秒

返回值说明

{
  "time": 100, // 请求缩略图的时间
  "videoPreviews": [
    {
      "url": "//img-test212.play.bokecc.com/comimage/FAA3DD658CB47E29/2023-11-24/F978EAA4B676690D9C33DC5901307461_thumbnail_000.jpg"
    },
    {
      "url": "//img-test212.play.bokecc.com/comimage/FAA3DD658CB47E29/2023-11-24/F978EAA4B676690D9C33DC5901307461_thumbnail_001.jpg"
    },
    {
      "url": "//img-test212.play.bokecc.com/comimage/FAA3DD658CB47E29/2023-11-24/F978EAA4B676690D9C33DC5901307461_thumbnail_002.jpg"
    }
  ], // 缩略图列表原数据
  "current": { // 请求时间点缩略图信息
    "url": "//img-test212.play.bokecc.com/comimage/FAA3DD658CB47E29/2023-11-24/F978EAA4B676690D9C33DC5901307461_thumbnail_000.jpg", // 雪碧图地址
    "width": 160, // 请求时间点缩略图宽度
    "height": 90, // 请求时间点缩略图高度
    "x": -960, // 请求时间点缩略图在雪碧图中定位x
    "y": -90 // 请求时间点缩略图在雪碧图中定位y
  }
}

示例

<div id="video-preview" class="video-preview">
    <div id="preview-image" class="preview-image"></div>
</div>
// 自定义进度控制条mousemove事件
barmousemove: function (e) {
    var thisX = (e || b.event).offsetX;
    var max = this.offsetWidth
    var percent = thisX * 100 / max;
    var previewSecond = parseInt($.DW.getDuration() * parseInt(percent) / 100)
    // 获取视频缩略图
    var videoPreviewData = $.DW.getVideoPreview(previewSecond)
    // 展示视频缩略图
    let videoPreviewLeft = 0
    if (videoPreviewData.videoPreviews.length !== 0){
        videoPreviewLeft = thisX - videoPreviewData.current.width / 2;
    }
    // 边界限制
    if (videoPreviewLeft < 0) {
        videoPreviewLeft = 0;
    }
    if (videoPreviewLeft > max - videoPreviewData.current.width) {
        videoPreviewLeft = max - videoPreviewData.current.width;
    }
    const videoPreviewDOM = document.querySelector('#video-preview')
    videoPreviewDOM.style.display = 'block';
    videoPreviewDOM.style.left = videoPreviewLeft + 'px';
    const previewImageDOM = document.querySelector('#preview-image')
    previewImageDOM.style.width = videoPreviewData.current.width + 'px'
    previewImageDOM.style.height = videoPreviewData.current.height + 'px'
    previewImageDOM.style.backgroundImage = "url('"+ videoPreviewData.current.url +"')"
    previewImageDOM.style.backgroundPosition = videoPreviewData.current.x + "px "  + videoPreviewData.current.y + "px";
}
获取当前播放时间
$.DW.getPlayerTime();   // 获取当前播放时间
获取当前播放时间,毫秒级
$.DW.getPlayerSecTime();   // 获取当前播放时间,毫秒级,保留小数点后3位
获取视频总时长
window.on_cc_live_player_load = function () { // 播放器加载完毕
    console.log($.DW.getDuration()); // 获取视频总时长
};
获取缓存
$.DW.getBuffer()
销毁
$.DW.destroy()
获取视频画面缩放比例
$.DW.getZScale()

仅支持Flash播放器

设置视频画面缩放比例
$.DW.setZScale()

number(0-1),仅支持Flash播放器

获取视频窗口比例
$.DW.getScale()

仅支持Flash播放器

设置视频窗口比例
$.DW.setScale()

("full", "scale43", "scale169", "original"),仅支持Flash播放器

打开设置面板
$.DW.openSettingPanel()

仅支持Flash播放器

控制条

视频控制条切换显示/隐藏状态
$.DW.isShowBar(tag)

参数说明

参数名称 参数类型 说明 是否必须
tag Number 0:显示控制条
1:隐藏控制条
默认为打开

全屏

回放视频切换全屏状态
$.DW.switchFullScreen(tag)

参数说明

参数名称 参数类型 说明 是否必须
tag Boolean true:进入全屏
false:退出全屏

音量

设置音量
$.DW.setVolume(volume)

参数说明

参数名称 参数类型 说明 是否必须
volume Number 取值范围 0 ~ 1
获取当前音量
$.DW.getVolume()

倍速

倍速播放
$.DW.playbackRate()

默认1.0 正常速度,倍速设置范围0.5~2倍速,仅支持H5播放器

音频播放

切换音视频模式播放
$.DW.onlyAudio(tag) // tag: true 为音频模式, false 为视频模式

切换音视频首先要 proton 打开 回放支持音频 权限 并且只对开启之后新生成的回放生效

快进快退

快进
$.DW.seekForward(time) // time: 20 // 前进的秒数 (正整数)
快退
$.DW.seekBack(time) // time: 10 // 后退的秒数 (正整数)

共享

开始分享流(区域分享/桌面共享)
window.on_cc_live_sharestream_start = (data) => {
    // ...
}

Windows平台 5.5.0开始支持,Mac平台5.6.0开始支持

返回值

{ 
    "time": 2000,  //  相对回放开始点的相对偏移量(毫秒)
    "type": 40  // 40: 区域分享, 50: 桌面共享 
}
结束分享流(区域分享/桌面共享)
window.on_cc_live_sharestream_end = (data) => {
    // ... 
}

Windows平台 5.5.0开始支持,Mac平台5.6.0开始支持

返回值

{ 
    "time": 3000,  //  相对回放开始点的相对偏移量(毫秒) 
    "type": 40  // 40: 区域分享, 50: 桌面共享 
}

截图

截图
$.DW.clipVideoImage()

该方法会截取视频图像,并且返回base64的视频图像的内容(目前只支持h5播放器)

跑马灯

视频显示跑马灯
$.DW.showMarquee(marquee)

示例

var marquee = $("#viewerMarquee").text();
$.DW.getMarquee = function(data) {
    // console.log('getMarquee 跑马灯数据', data)
    if (!!data) {
        marquee = data;
        return;
    }
    marquee = $("#viewerMarquee").text();
    $.DW.showMarquee(marquee);
};

记忆播放点

获取记忆播放时间点

播放器会默认记录视频上次观看到的时间点。同一浏览器打开同一回放资源,可从上次观看的时间点继续播放。

$.DW.getHistoryPlayTime();
设置记忆播放时间点

设置视频从指定的秒数开始播放。

$.DW.setHistoryPlayTime(second);

回放试看

获取回放试看时长
window.on_cc_player_freetime = function (time) {}

time单位为秒

监听回放试看结束
window.on_cc_player_freetime_end = function() {}

文档

概述

支持文档翻页、文档自适应、文档显示跑马灯

相关API

基本

当前分片文档翻页信息/ 文档缩略图
window.on_cc_callback_pages = function (pageData) {}

返回值

[{ 
    "time": 11,   // 图片时间 
    "url": "http://image.csslcloud.net/image/3CD4C4DF4DF8E0CB9C33DC5901307461/73D088D5AC02E6B1/0.jpg",  // 图片地址
    "docId": "73D088D5AC02E6B1",  // 文档id
    "docName": "英语.pptx",  // 文档名称
    "docNotes": "第一页有多个,这是第一个。", // 文档备注(需PPT中有备注信息,若无则没有该字段)
    "docTotalPage": 11,  // 文档总页数 
    "pageNum": 0,  // 当前页码
    "mode": 0  // 0: 静态文档 1: 普通动画 2: 极速动画
}]
翻页信息回调
window.on_cc_callback_pagechange = function (data) {}

返回值

{ 
    "docId": "xxxx",//当前页id 
    "docName": "Java.pdf",//当前页name 
    "docTotalPage": 105,//总页数 
    "pageNum": 0    //当前页索引值 
}
文档自适应

仅支持PC端

$.DW.docAdapt(true); // true为打开自适应,false为关闭,默认为关闭,

跑马灯

文档显示跑马灯
$.DW.showMarqueeDoc(marquee)

示例

var marquee;
$.DW.getMarquee = function(data) {
  if (!!data) {
    marquee = data;
    return;
  }
  marquee = $("#viewerMarquee").text();
};
window.on_cc_swf_loading_completed = function() { //需要播放器加载完毕再执行
  setTimeout(function() {
    var marqueeInfo = $.trim(marquee);
    $.DW.showMarqueeDoc(marquee);
  }, 1000);
};

聊天

概述

可获取直播过程中的聊天数据并展示

相关API

当前分片聊天信息
window.on_cc_live_chat_msg = function (data) {}

返回值

{ 
    "chatId":"23981",  //聊天消息id                         
    "status":"1",  //聊天消息状态 0:显示 1:不显示                            
    "userid": "7f3a0c7c496a4a2b86d8e51e358193fd",//发送聊天消息的用户ID   
    "username": "老张",//发送聊天消息的用户名称     
    "time": 20,//发送时间 
    "msg": "Hello World.",//聊天内容 
    "useravatar": "http://www.bokecc.com/static/cms/image/cc-video/navlogo-big.png", //发送者头像 
    "userRole": "student",//发送者角色(返回值是 string 或 number); 学生:"student"、4; 助教:"teacher"、2; 讲师:"publisher"、1 
    "groupId""111",  // 分组信息    
    "usercustommark": "" //用户自定义参数 
}
当前时间点聊天信息
window.on_cc_live_chat_msg_sync = function (data) {}
seek时间点之前的聊天数据
window.on_cc_seeked_chat_msg = function (data) {}
获取自定义表情列表
window.on_cc_chat_custom_emjio = (data) => {}

问答

概述

可获取直播过程中的问答信息并展示

相关API

当前分片提问信息
window.on_cc_live_qa_question = function (data) {
    const { value } = data;
}

返回值

{ 
    "action": "question", 
    "value": {       
        "id": "49CE0XF718D5AA52",//问题ID 
        "content": "我从哪里来?",//问题内容 
        "userId": "92aa0c1965d842ec9b443270f5734124",//提问者ID        
        "userName": "T",//提问者名称        
        "groupId""111", //分组信息 
        "userAvatar": "http://www.bokecc.com/static/cms/image/cc-video/navlogo-big.png",//提问者头像   
        "isPublish": 1//该问题是否已发布,1:已发布,0:未发布", 
    }
}
当前分片回答信息
window.on_cc_live_qa_answer = function (data) {
    const { value } = data;
}

返回值

{  
    "action": "answer",  
    "value": {        
        "questionId": "49CE0XF718D5AA52", //问题ID        
        "content": "石头里",//回答内容        
        "isPrivate": 1,//是否是私密回答,1:私密回答,0:公共回答         
        "userId": "71120e4cc905425f8da91945c7df2df6",//回答者用户ID 
        "userName": "孙悟空",//回答者名称      
        "groupId""111", //分组信息       
        "userAvatar": "",//回答者头像         
        "userRole": "回答者角色,teacher:助教,publisher:讲师"//回答者角色 
    }
}

互动

概述

可获取直播过程中的广播、随堂测数据并展示

相关API

广播

当前分片广播信息
window.on_cc_live_broadcast_msg = function (data) {}

返回值

{ 
    content: "大家好",//广播内容 
    time: 205 //广播时间 
}
同步显示广播信息
window.on_cc_live_broadcast_msg_sync = function (data) {
    const { content, time } = data
}

返回值

[{ 
    content: "大家好",//广播内容 
    time: 205 //广播时间 
}]

随堂测

获取随堂测信息
$.DW.getReplayPractice()
随堂测请求成功后回调
window.on_hdReplay_practice_info = function (data) {}

返回值

{ 
    success:true//是否成功 
    msg:"数据获取成功",//消息 
        errorCode:0,//错误码 0 表示正常 
            datas:{ 
                practiceInfo:[ 
                    { 
                        statistic:{ //统计数据 
                            id:"754251300D86E12B",//统计随堂测id 
                            type:1,//随堂测类型(判断:0,单选:1,多选:2)
                            status:1,//状态值 
                            answerPersonNum:100,//回答人数 
                            correctPersonNum:10,//回答正确人数 
                            correctRate:"10%",//正确率 
                            options:[ 
                                { 
                                    index:0, 
                                    id:"2715AA75469DCD54",//选项id 
                                    isCorrect:1,//是否正确选项(1:是   0:否)
                                    count:5,//此选项选择人数 
                                    percent:"5%"//此选项选择人数百分比             
                                } 
                                ...
                            ]//选项 
                        },
                        rank:{//排名 
                            id:"754251300D86E12B",//随堂测id 
                            ranking:[ 
                                { 
                                    viewerId:"29312",//观看者id 
                                    viewerName:"abc",//观看者名称 
                                    costTime:"22"//耗时 
                                } 
                                ...
                            ]        
                        }, 
                        base:{//基础信息 
                            id:"754251300D86E12B",//随堂测id 
                            type:1,//随堂测类型(判断:0,单选:1,多选:2)
                            status:1,//状态(正在发布:1  已停止:2)
                            publishTime:"2019-11-22 14:08:44",//发布时间 
                            recordId:"D2BBC2DeA",//回放id 
                            recordTime:20,//相对于回放开始时长 
                            stopRecordTime:30,//相对于回放开始停止时长 
                            closeRecordTime:40,//相对于回放开始关闭时长 
                            options:[//选项 
                                { 
                                    index:0,// 
                                    id:"2715AA75469DCD54",//选项id 
                                    isCorrect:1//是否正确(1:正确0:错误)
                                }
                                ...
                            ] 
                        } 
                    } 
                    ... 
                ] 
            } 
}

字幕

获取字幕信息

此功能依赖云点播字幕能力,需要开启云点播相关的权限。

1、vunion:开启:"音频转写" + "上传字幕" 权限(语音转写时长大于0);
2、admin后台:云点播开启"全局设置-语音转写设置"开关;
3、admin后台:云直播编辑字幕,入口:"直播间设置-回放管理-字幕"
字幕请求成功后回调
window.on_cc_video_subtitles = function (data) {}

返回值

{
    "subtitlemodel": 1,       // 字号是固定字号还是自适应,  1-自适应、0-固定字号
    "subtitlefontsize": 16,   // 默认字号
    "defaultVtt": 0,          // 默认字幕 vttList 的索引
    "vttList": [
        {
            "cssStyle": "font-family:微软雅黑,Microsoft YaHei; font-size:16px ;color:#666666; text-shadow:0px 0px 2px #000000; ", // 字幕样式,包含:font-family-字体、font-size-字号、color-字体颜色、text-shadow-文字阴影
            "vttName": "字幕1",  // 字幕名称
            "vttUrl": "https://1-material.bokecc.com/material/CDEBFAB2DCC10433/*****.vtt" // 字幕的远程文件地址
        },
        {
            "cssStyle": "font-family:微软雅黑,Microsoft YaHei; font-size:16px ;color:#666666; text-shadow:0px 0px 2px #000000; ",
            "vttName": "字幕2",
            "vttUrl": "https://1-material.bokecc.com/material/CDEBFAB2DCC10433/*****.vtt"
        }
    ]
}

备注与说明

关于回放数据分片策略的调整

重要提示:

本次更新为优化回放数据的响应速度,减少文档白屏时间,升级了回放数据的处理策略, 将回放数据进行静态化存储,回放数据将按照固定大小(约512kb)被分割为不同的分片,静态化存储为json文件。

分片加载策略:默认会请求第一个分片数据,其他分片会提前五分钟预加载,当seek播放时如果当前时间点的数据还未被请求则会触发该分片加载,请注意,如果seek时间跨度较大有可能出现跨分片的情况,此时只会处理seek时间点所在的分片

该策略主要影响以下响应事件,请重点关注

API Before After
on_cc_live_chat_msg 全部聊天信息 当前分片聊天信息
on_cc_live_chat_msg_sync 同步显示聊天信息(包括当前时间点之前未渲染的数据) 仅返回当前时间点聊天信息
on_cc_seeked_chat_msg seek时间点之前的聊天数据
on_cc_live_broadcast_msg 全部广播信息 当前分片广播信息
on_cc_live_qa_question 全部提问信息 当前分片提问信息
on_cc_live_qa_answer 全部回答信息 当前分片回答信息
on_cc_callback_pages 所有文档翻页信息 当前分片文档翻页信息
on_cc_callback_pages 所有文档缩略图 当前分片文档缩略图

升级指南

本次升级不会影响回放顺序播放的数据渲染,主要在seek播放时数据有可能会有些差异,如果针对seek操作时的数据渲染有时间排序要求,可参考以下建议:

1.针对要接收的数据增加本地数组存储,新增数据时判断其时间是否大于最后一条数据的时间,若小于则对本地数据进行排序处理,排序后再进行渲染。

2.如果聊天数据要求跟随进度条进度渲染需要同时注册on_cc_live_chat_msg_sync、on_cc_seeked_chat_msg,接收到on_cc_seeked_chat_msg数据时替换渲染数组,接收到on_cc_live_chat_msg_sync数据时追加到渲染数组中。

注:广播、文档翻页数据一般不会被分片

部分回调对推流客户端版本有要求

流类型详情回调(on_cc_live_streaminfo)、分享流开始回调(on_cc_live_sharestream_start)、分享流结束回调(on_cc_live_sharestream_end)的数据采集对推流客户端版本有要求,Windows平台 5.5.0开始支持,Mac平台5.6.0开始支持

userRole和fromuserrole对应关系

如下表:

unknow 未知角色
publisher 主讲
teacher 助教
host 主持人
student 学员(观众)

results matching ""

    No results matching ""