|
|
# 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查看。 |
|
|
\ No newline at end of file |