Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • V VOD_iOS_SDK
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 4
    • Issues 4
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Infrastructure Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • CCVideo
  • VOD_iOS_SDK
  • Wiki
  • 7.升级指南

Last edited by Han Ruisong Sep 24, 2020
Page history

7.升级指南

3.x.x 升级4.x.x 版本 升级指南

1.概述

为了提高用户体验,以及减少集成我们SDK的复杂度。从4.0.0版本开始,我们对SDK的业务逻辑,使用方式等作出了较大幅度的优化。若用户从3.x.x升级到4.0.0版本时,会出现一些使用方式上的差异,下面会具体介绍如何升级到新版。(4.0.0版本SDK统称新版,3.x.x版本SDK统称旧版)

2.SDK改动

2.1 数据获取及格式

为了简化用户对数据的获取方式,我们统一了SDK对于媒体数据的获取方式。

2.1.1 数据获取方式的变动

旧版中,对于视频播放时数据,是通过DWPlayerView对象的getPlayUrlsBlock回调来获取的播放数据。而视频下载时的数据,是通过DWPlayInfo对象来获取的。

新版中,我们对于视频获取的方式,统一通过DWPlayInfo对象来获取。

2.1.2 数据格式的变动

旧版中,获取到的数据都是NSDictionary对象,不能直观的看出都有哪些字段,以及字段的用途。

新版中,我们对数据格式进行了可视化,与媒体播放相关的数据全部都在DWVodVideoModel中,若想查看某一字段的具体用途,直接进入DWVodVideoModel.h中查看即可。

2.2 播放

新版中,我们优化了播放模块的结构,将原音频播放类(DWAudioPlayer)与视频播放的播放类(DWPlayerView)统一合并成了DWPlayerView。 为了适应数据格式的变化,修改了DWPlayerView中的部分方法及使用方式。

新版中,我们还提供了一套带皮肤的播放器(DWPlayerSkinView),以供用户快速的集成我们的播放功能。对于需要自定义UI的用户,依旧使用DWPlayerView即可。

2.3 下载

鉴于旧版的下载功能的使用方式比较复杂,对了方便用户集成我们的下载功能,我们对下载模块进行了重构。

新版中,DWDownloadSessionManager是下载管理类,所有对下载任务进行的操作都要通过此单例对象进行管理。为了减少集成复杂度,它维护了一个下载队列,内部包含了我们所有的下载任务(DWDownloadModel),用户不需要再对下载任务进行管理,本地化等操作,只需要获取我们的下载队列,进行数据展示即可。

注意: 若项目从旧版升级到新版以后,因下载模块业务逻辑的变化,会出现旧版的下载任务无法再新版中获取的问题。为了解决这个问题,在新版中,我们提供了一个方法,可以将旧版的下载任务过渡到新版本中。对于这个方法的具体含义以及使用事项,我们在4.开发指南中已经进行了详细的说明。

以下是具体的实现方式:

    //1。首先,需要获取到自己项目中的下载队列。
    NSArray * downingArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"downingArray"];
    NSArray * finishDicArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"finishDicArray"];

    //2。通过[DWDownloadSessionManager manager]的 migrateDownloadTask:。。。方法,将旧版的下载任务过渡到新版。
    //此方法中,loaclPath对于未完成的下载任务,必须传nil,downloadUrl对于未完成的下载任务,必须传入下载链接。其余属性根据自己项目中已保留的数据,尽量传入即可。  
    [downingArray enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        DWOfflineModel * model = [DWOfflineModel mj_objectWithKeyValues:obj];
        //未下载完成的视频   本地路径请务必传nil
        DWDownloadModel * downloadModel = [[DWDownloadSessionManager manager]
                                           migrateDownloadTask:nil
                                           DownloadUrl:model.playurl
                                           MediaType:model.mediatype
                                           Quality:model.definition Desp:model.desp
                                           VRMode:NO
                                           OthersInfo:@{@"title":model.videoId,@"imageUrl":@"icon_placeholder.png"}
                                           UserId:[DWConfigurationManager sharedInstance].DWAccount_userId
                                           VideoId:model.videoId
                                           TotalBytesWritten:已下载的文件大小
                                           TotalBytesExpectedToWrite:文件总大小];
        //如不开始下载,页面显示的进度根据totalBytesWritten,totalBytesExpectedToWrite参数决定。
        //如果以前没有存储此字段,继续开始下载即可获取到正确的数据。
//        if (downloadModel) {
//            //证明过渡成功,否则返回nil
//            [[DWDownloadSessionManager manager] resumeWithDownloadModel:downloadModel];
//        }
    }];
    
    [finishDicArray enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        DWOfflineModel * model = [DWOfflineModel mj_objectWithKeyValues:obj];
        
        NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString * documentDirectory = [paths objectAtIndex:0];
        NSString * localPath = [NSString stringWithFormat:@"%@/%@",documentDirectory,[model.videoPath lastPathComponent]];
        
        DWDownloadModel * downloadModel = [[DWDownloadSessionManager manager]
                                           migrateDownloadTask:localPath
                                           DownloadUrl:model.playurl
                                           MediaType:model.mediatype
                                           Quality:model.definition
                                           Desp:model.desp
                                           VRMode:NO
                                           OthersInfo:@{@"title":model.videoId,@"imageUrl":@"icon_placeholder.png"}
                                           UserId:[DWConfigurationManager sharedInstance].DWAccount_userId
                                           VideoId:model.videoId
                                           TotalBytesWritten:0
                                           TotalBytesExpectedToWrite:0];
    }];

    //3.下载任务过渡完成后,将原本地保存的下载数据删除掉即可。
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"downingArray"];
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"finishDicArray"];
    [[NSUserDefaults standardUserDefaults] synchronize];

2.4 加密模块(DWDrmServer)

新版中,我们对加密模块进行了封装,用户无需再关注此服务的使用,只要在后台启用了我们的加密服务,SDK会启动此模块,来播放加密的视频连接。

2.5 关于错误码(DWErrorCode)

为了帮助用户更好的排查出现的错误,我们在新版中,优化了错误码的使用以及含义。相比于旧版的使用方式,新版中的错误码更简洁、直观。具体代表的含义请详见4.开发指南。

3.Demo改动

新版中,我们对demo进行了重构,从目录结构,业务逻辑到最终的展示页面相比于旧版,都进行了较大幅度的改版。具体效果可下载我们的demo来查看。

3.1 目录结构的变动

鉴于旧版demo的目录结构比较杂乱,在新版中,我们重新对demo的目录结构按功能进行了划分。具体的结构在2.集成指南中,已经进行了详细的说明。

3.2 视频列表使用的变动

相比于旧版demo直接在代码中写入视频列表的方式,在新版中,提供了通过网络获取视频列表的方式。用户可以通过修改网络请求以及数据解析流程就可以替换视频列表,当然,对于旧版视频列表的使用方式,我们现在依旧是支持的。具体详细的使用方式请查看4.开发指南。

3.3 demoUI界面

由于旧版的demo页面不是很美观,我们的新版demo对界面进行了美化重构,具体实现的效果,请运行我们的新版demo查看。

Clone repository
  • 1.概述
  • 2.集成指南
  • 3.模块介绍
  • 4.开发指南
  • 5.更新日志
  • 6.常见问题
  • 7.升级指南
  • Home
  • iOS 合规指南 云点播