互动白板
Web
动态与公告
更新日志
新手接入指南
产品简介
产品介绍
功能介绍
G1&G2
下载SDK和体验Demo
快速入门
接入互动白板
迁移指南
进阶教程
导入互动白板 SDK
房间状态
教具
工具栏配置
文档与页面
视角
图片与视频
录像回放
字体设置
白板推流
定制Toast
消息抄送
客户端接入
接入webview
通过 webview 使用白板
接入回放webview
高级功能
客户端文档转码
创建持久化房间
日志上报
客户端 API 参考
老版本
接入G1互动白板
通过webview接入G1互动白板

客户端文档转码

更新时间: 2022/10/10 15:26:47

3.4.0版本开始,白板的SDK中包含DocConverter.js。用户可以使用该文件在客户端上传,转码文档。

加载资源

DocConverter.js使用UMD格式打包。用户既可以直接在html文件中加载该脚本,也可以使用模块方式引入:

<!-- 引入方式一:直接挂载在全局对象上 -->
<!doctype html>
<html lang="en">
   <head>
       <meta charset="utf-8">
       <script src="./sdk/DocConverter.js"></script>
   </head>
   <body>
       <script>
           console.log(DocConverter)
       </script>
   </body>
</html>
//引入方式二:模块化加载
import DocConverter from './lib/DocConverter'

转码结果

文档转码分为静态转码与动态转码。动态转码仅适用于ppt, pptx等类型文件。静态转码适用于ppt, pptx, doc, docx, 以及pdf文件。

根据转码类型不同,转码返回的结果也不同。目前转码结果有:

  1. 动态转码: IDynamicDocParam
  2. 静态转码: IStaticDocParam, IStaticDocParamDeprecated
/**
 * transcodeFormat: 'h5'
 * 动态转码返回格式
 */
type IDynamicDocParam = {
    url: string;
    width: number;
    height: number;
    pageCount: number
}

/**
 * transcodeFormat: 'jpg' | 'png'
 * staticDocType: 'template'
 *
 * 3.6.1及以上版本中,静态转码返回格式。
 *
 * 若同一房间中,可能存在版本小于3.6.1的用户,则应该使用staticDocType: 'array'
 * 
 * 建议新客户,或者能够控制用户强制升级为新版本的老客户,使用staticDocType: 'template'
 */
type IStaticDocParam = {
    width: number
    height: number
    /**
     * 最终每一页的图片url计算方法为:将template中的`{index}`替换为offset + 页码(从0开始计算)
     *
     * 比如若template为: `https://www.baidu.com/{index}.png', offset为1,则静态文档前三页的图片为: 
     * https://www.baidu.com/1.png
     * https://www.baidu.com/2.png
     * https://www.baidu.com/3.png
     */
    template: string
    offset: number
    pageCount: number
} 

/**
 * transcodeFormat: 'jpg' | 'png'
 * staticDocType: 'array'
 *
 * 3.6.0及以下版本的转码格式。
 *
 * 若同一房间中,可能存在版本小于3.6.1的用户,则应该使用staticDocType: 'array'
 */
type IStaticDocParamDeprecated = {
    url: string;
    width: number;
    height: number;
}[]

如何使用

配置项

首先,创建一个转码配置对象。在该对象中设置转码的类型(静态、动态),以及转码返回的结果类型(staticDocType, 该参数仅对静态转码有效),以及转码各阶段的回调函数。

const config = DocConverter.createConfig({
    /**
     * 转码结果的格式。jpg和png为静态转码,支持pdf, ppt, pptx, doc, docx格式
     * h5为动态转码,支持ppt和pptx
     * 
     * 
     * 若transcodeFormat为: 'jpg'或者'png',则转码为静态转码
     * 
     * 若transcodeFormat为'h5', 则转码为动态转码
     */
    transcodeFormat: "jpg",
    /**
     * 默认为template
     * 如果该参数为array,则静态转码结果的格式为 IStaticDocParamDeprecated
     * 如果该参数为template, 则静态转码结果的格式为 IStaticDocParam
     *
     * 注意,只有白板3.6.1及以上支持IStaticDocParam。
     * 如果你的白板版本小于等于3.6.0,则你应该使用'array'
     * 如果你的白板版本大于等于3.6.1,则你应该使用'template'
     */
    staticDocType: 'template' | 'array',
    /**
     * 可选参数。查询转码进度间隔时间,默认为4s。该参数的单位为(ms)
     */
    checkTransProgressInterval: 5000,
    /**
     * 可选参数。转码服务器地址。默认为 https://vcloud.163.com/app/wboard
     * 该参数仅对私有化部署用户有用
     */
    transServiceUrl: "https://vcloud.163.com/app/wboard",
    onBeginUpload: (opt: {docId: string}) => {
        console.log(`开始上传, docId为: ${opt.docId}`)
    }
    onUploadProgress: (progress) => {
        console.log(`上传进度:${(progress * 100).toFixed(2)}%`)
    },
    /**
     * docUrl为文件的下载地址
     */
    onUploadComplete: (opt: {docUrl: string}) => {
        console.log('上传已完成', res)
    },
    onTransBegin: (opt: {
        taskId: number
    }) => {
        console.log(`转码开始,任务id为: ${opt.taskId}`)
    },
    onTransProgress: (progress) => {
        console.log(`转码进度:${(progress * 100).toFixed(2)}%`)
    },
    onError: (err) => {
        console.log('上传或者转码异常', err)
    },
    onTransComplete: (res: IStaticDocParam | IDynamicDocParam | IStaticDocParamDeprecated) => {
        console.log('转码已完成', res)
    }
})

创建转码任务

第二个参数用于鉴权,其中checksum的生成需要appsecret。为了安全考虑,该参数应该从服务器接口中获取,避免appsecret被泄漏。创建转码任务后,文档上传、转码过程将开始。

task = DocConverter.createTask(file: File, {
    checksum: string        //sha1(appsecret + nonce + curTime)
    nonce: string           //随机长度小于128位的字符串
    curtime: number         //当前UTC时间戳,从1970年1月1日0点0分0秒开始到现在的秒数
    appkey: 'fskkkkk'
}, config)

查询转码进度

在转码时,如果用户刷新了页面,可以通过createQueryTask查询转码进度。taskId为开始转码任务后,onTransBegin返回的参数。

该函数的config参数和createTask中的config参数一样。但是该config中的onBeingUpload, onUploadProgress, onUploadComplete回调函数不会被唤醒。

此外,注意对于同一次转码,使用createTask时的transcodeFormat必须和createQueryTask时一致,否则onTransComplete返回的结果将不正确。

task = DocConverter.createQueryTask(opt: {
    taskId: number
}, {
    checksum: string        //sha1(appsecret + nonce + curTime)
    nonce: string           //随机长度小于128位的字符串
    curtime: number         //当前UTC时间戳,从1970年1月1日0点0分0秒开始到现在的秒数
    appkey: 'fskkkkk'
}, config)

终止任务

task.abort()
此文档是否对你有帮助?
有帮助
我要吐槽
  • 加载资源
  • 转码结果
  • 如何使用
  • 配置项
  • 创建转码任务
  • 查询转码进度
  • 终止任务