文件转码
  • 平台类型
  • 框架 / 引擎
  • iOS
  • Android
  • macOS
  • Windows
  • Linux
  • Web
  • 小程序

实现文件转码功能

更新时间:2020-11-02 18:15

1 功能简介

集成 SDK 完成后,要想使用 SDK 的功能。在初始化 SDK 后,创建文件实例对象 DocView ,再进一步调用 ZegoExpressDocs 提供的各项 API。

2 初始化 SDK

初始化之前需要先申请 AppID 及 AppSign,初始化时需要指定日志,数据,及缓存路径,并设置运行环境。

    ZegoDocsViewConfig * config = [ZegoDocsViewConfig new];
    config.appSign = appSign; //申请到的appSign
    config.appID = appID;//申请到的appID
    config.dataFolder = kZegoAppDCDataPath;//SDK相关数据目录
    config.isTestEnv = YES; //测试环境,根据申请的appid设置
    config.cacheFolder = [ZegoTools cachePath];//SDK相关缓存目录
    config.logFolder = kZegoAppDCDataPath;//SDK相关日志目录

    [[ZegoDocsViewManager sharedInstance] initWithConfig:config completionBlock:^(ZegoDocsViewError errorCode) {
         if (errorCode == ZegoDocsViewSuccess) {
             NSLog(@"初始化SDK 成功");
         } else {
             NSLog(@"初始化SDK 失败 %ld",errorCode);
         }
     }];

3 反初始化 SDK

调用 uninit 方法对 SDK 进行反初始化。

[[ZegoDocsViewManager sharedInstance] uninit];

4 上传文件

调用 upload 方法上传文件到服务器,文件上传分为上传 ZegoDocsViewUploadStateUpload 和格式转换 ZegoDocsViewUploadStateConvert 两个阶段。

  • 上传阶段:如果正常上传,会产生多次回调,每次都包含文件上传进度。例如当前上传 50%,则 infoMap 内容为 {"upload_percent":@(0.50)};当前上传100%,则 infoDictionary 内容为 {"upload_percent":@(1.00)}。当前上传100%,则 infoDictionary 内容为 {"upload_percent":@(1.00)}。
  • 格式转换阶段:如果转换成功,只产生一次回调,包含转换后的文件 ID。例如当前转换完成,则 infoDictionary 内容为 {"upload_fileid":"ekxxxxxxxxv"}。
//文件的绝对路径,可以根据iOS API 获得
//上传文件后转码后渲染模式类型,默认为ZegoDocsViewRenderTypeVector格式
    [[ZegoDocsViewManager sharedInstance] uploadFile:[url path] renderType:ZegoDocsViewRenderTypeVector completionBlock:^(ZegoDocsViewUploadState state, ZegoDocsViewError errorCode, NSDictionary * _Nonnull infoDictionary) {
    if (errorCode == ZegoDocsViewSuccess) {
            if (state == ZegoDocsViewUploadStateUpload) {
                // 上传中...
                if(upload_percent.intValue == 1){
                    // 转码中...
                }
            } else if (state == ZegoDocsViewUploadStateConvert){
                // 转换成功
            }
        } else {
            // 上传失败
        }
    }];

5 加载文件

此方式可能需要请求文件转码权限,如遇到加载失败的情况,请先查看错误码文档。可能的失败场景如下:

  1. 无加载文件转码所需权限。
  2. AppID & AppSign 与要加载的文件转码不匹配。
  3. 文件转码在正式环境而初始化的 SDK 在测试环境。
    // 1. init
    self.docView = [[ZegoDocsView alloc] init]; //初始化文件View
    self.docView.backgroundColor = UIColor.whiteColor; //设置文件View背景颜色
    [self.docView setDelegate:self]; //设置文件View 代理通知
    [self.view addSubview:self.docView]; //添加到自己需要展示的View 上

    //2.设置可视区域的Size
    self.docView.frame = CGRectMake(0, 0, 100, 100);

    //3.加载文件
    [self.docView loadFileWithFileID:@"fileID" //后台获取到文件ID
                             authKey:@"" //鉴权key。可以为空。根据你所申请环境是否需要鉴权填入。最好是通过后台获取 
                     completionBlock:^(ZegoDocsViewError errorCode) {

    }];

注意:如果想实现在文件上绘制以及多端联动功能,需要引入互动白板功能,详情查看 ZegoDocsView SDK

6 滚动翻页

调用 flipPage 对文件进行翻页。

  1. 滚动翻页针对动态 PPT 和非动态 PPT 做了两个对外接口。
  2. 跳转页面和当页步数都是以 1 为起始。
// 举例:非动态PPT 跳转到第3页。
[self.docView flipPage:3 completionBlock:^(BOOL isScrollSuccess) {
            NSLog(@"翻页结束");
        }];

// 举例:动态PPT 跳转到第2页,第4步。
[self.docView flipPage:2 step:4 completionBlock:^(BOOL isScrollSuccess) {
            NSLog(@"翻页结束");
        }];

7 文件缩放

调用 scaleDocsView 对文件进行缩放。

  1. 文件缩放需要指定缩放因子 scaleFactor,即缩小或放大的比例系数。
  2. ScaleOffset 代表了在缩小或放大后需要展示的区域的左起点。
[self.docsView scaleDocsViewWithScaleFactor:scaleFactor scaleOffsetX:scaleOffsetX scaleOffsetY:scaleOffsetY];

8 获取文件缩略图

调用 getThumbnailUrlList 获取文件缩略图。

  1. 获取当前文件缩略图列表,仅支持PDF ,PPT,动态PPT文件格式。
  2. 需要在文件加载成功后调用。
NSArray *thumbnailUrls = [self.docsView getThumbnailUrlList];

9 Excel 文件切换 sheet

Excel 文件如果存在很多个 sheet 页,可以使用下面的接口进行 sheet 页切换。Sheet下标,从 0 开始。

 [self.docView switchSheet:0];

10 动态 PPT 操作

动态 PPT(即文件类型为 ZegoDocsViewFileTypeDynamicPPTH5)的每一页可能会有很多 step,可以通过 nextStepWithCompletionBlock 和 previousStepWithCompletionBlock 方法进行动态 PPT 的上一步和下一步的操作。

//上一步
 [self.docViewFirst previousStepWithCompletionBlock:^(BOOL isScrollSuccess) {

            }];
//下一步
[self.docViewFirst nextStepWithCompletionBlock:^(BOOL isScrollSuccess) {

            }];