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
This is an old version of this page. You can view the most recent version or browse the 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 合规指南 云点播