文档首页> > 上传SDK> 客户端上传SDK> iOS上传SDK

iOS上传SDK

分享
更新时间: 2019/04/26 15:58

前提条件

兼容性

支持的iOS系统版本:iOS8.3版本及以上。

安装SDK

  1. 添加库文件和头文件

    将vodUploadLib.a和vodUploadLib.h添加到工程。

  2. 设置工程

    1. info.plist添加ATS

    2. 添加libstdc++.tbd

    3. other linker flags 添加-ObjC

  3. 通过导入vodUploadLib.h头文件,对头文件中的方法进行调用,进行上传。

代码示例

大文件上传持续时间长,当上传过程中出现网络异常、程序崩溃等导致上传中断情况时,可以调用断点续传接口继续上传,断点续传是将文件分成若干段进行上传,当所有段上传完成时会合并成完整文件,完成整个文件上传。文件上传时断点续传接口将会自动记录当前上传进度信息,当发生异常中断时,不需要用户手动调用,再次上传时会从上次中断记录点继续上传,节省时间和流量成本。

//1.填入AK、SK等信息
/***
 参数说明:endPoint 点播服务节点地址,如点播服务的Endpoint当前为“vod.cn-north-1.myhuaweicloud.com”
 AK、SK、token 临时AK、SK、token,临时AK、SK、token需要由租户服务端调用服务端SDK获取
 g_bucketName 媒资所在的桶名
 g_objectKey 媒资所在的ObjectKey
 g_bucketName、g_objectKey 需要服务端调用创建媒资接口后获得并返回给客户端,详情需要参考点播服务端的创建媒资接口
 projectId 用户项目编号ProjectId,查看项目ID参考 "获取项目ID"章节
 ***/
NSString *SK = @"1IznCgRAql8dguSmJADmV4PcCtnVsDd7L3ZRRDUH";
NSString *AK = @"6BCGNLW8EHJPV6SJB7FS";
NSString *endPoint = @"https://vod.cn-north-1.myhuaweicloud.com";
NSString *bucketName = @"vod-bucket-31";
NSString *objectKey = @"38b29a7d2fc34bdbbce4f852aea367df/51cd66ecccb364b2b01265c99e067f90/233fa1344f97e4c810ab718ac21ba435.mp4";
NSString *projectId=@"38b29a7d2fc34bdbbce4f852aea367df";
NSString *token=@"gQpjbi1ub3J0aC0xjq6b9EbnV9vBjAL6RJKWcRJrzWLF-lMlseps4-3tkcbR715CcpigmvI1_VVlPmp8puFO_ujcfOqI2d9sBY9ZvFF6d6iWyrlVnXuMTnaBgnrb3Ox2ffTDapHwsbQIBg4LvHlA-e87IY6y7MWamaBNRd6_P9TsEDkkFMezsxeR2Q86XJ1X_sK466gqJyLhOFa4E_sFsXNjU3gm1gGPslbY6dz1QU8bHCmKU3E49UzTmDAUwfv3Xqefbl-Pqs-fQxWLiv8Q0zNJDcEyn4U5HIxl6mVaNELtZH84Ubb-HIsITn-W8rVEKmFP3UsO9XkiFanTmoeFeck0Byanuf-voeQVs9ih4C2efASRVMXa-MF3MCHUbDK_cx8CcLEfysDJJPrEEbf--7u7Rnik_FWZtNjq2ko4SnVE8WShGnRmD3MX1CPjDJNpG7oNUdtXTxgiTl-blUx72DAfQTfnRvID9jgRqtD7TuO-KKKnDQJYQzMI4MOOlMrp2xJQeV30Qaw0FakYcWhCB_-bOKF8Os2UNfok1Alf5QFlNC7tTy7QjkTR2qL997u3hKAI1LiwrpnwzivQwq67TLcQq2ZZkutTqptkh1OLYwodL7YoqlFMcU2Wjrd--b7UW7KeK0oODWABMHV6piFTkzBjfbWkyukb5QX-T9uLYCvwWh6mdQFmvfRsfM63CDoCLDUe1lcMieRjNibma1VdWCKJD_WZ93RLAq6WuKRCVQFvO-2YnmyBqm_TBtXy";

//2、创建并初始化vodUploadLib实例
/***
 功能:初始化
 参数:如上
 ***/
    vodUploadLib *vodUpload = [[vodUploadLib alloc] initWithEndPoint:endPoint SK:SK  AK:AK bucketName:bucketName objectKey:objectKey projectId:projectId token:token];

//3、设置代理并实现上传进度代理,可选实现错误码代理
//设置代理
vodUpload.delegateUploadVod = self;

/***
 
 功能:回调上传进度
 回调参数:prograss 上传进度(范围[0.0,1.0]),注意,此时只是文件上传成功,只有uploadCompletedCallback回调才是上传全部操作完成
 ***/
- (void)prograssCallback:(float)prograss
{
    self.uploadProgressView.progress=prograss;
}

/***
 功能:回调上传全部操作完成
 回调参数:无
 ***/
- (void)uploadCompletedCallback;
/***
 功能:回调错误信息
 回调参数:errorInfo 回调的错误信息,具体信息请到华为云OBS和点播错误码中查找,可选择实现
 ***/
- (void)errorCallback:(NSDictionary*)errorInfo
{
    NSLog(@"%@",errorInfo);
}

//4、开始上传
/***
 功能:开始上传
 参数:filePath 上传文件路径
 ***/
[vodUpload startUpload:_filePath];
说明:
  • 此处是断点续传示例,租户客户端在调用前需要从租户服务端获取媒资上传需要的bucket、objectKey、临时AK、SK、securityToken。
  • 除上述接口外,还可以设置段大小和并发线程数。
  • 客户端可以在初始化ObsConfig时设置分段大小以及并发数。但再次调用断点续传上传剩余段时设置分段大小无效,默认第一次设置的分段大小。
  • 断点续传前需要与第一次上传一致的bucket、objectKey、文件,否则默认为未上传过从第一段开始上传。
  • 断点续传时,只需重复上述步骤即可。
  • 待文件上传成功后,需要服务端调用点播确认媒资上传接口完成媒资的整个创建流程。

错误处理

在使用iOS SDK时,当服务端或者SDK端出错时,SDK会返回相应的异常信息。这些异常信息有两种,一种是和VOD进行交互获取临时授权时产生的错误,这种错误一般会以抛异常方式抛出,用户需要注意捕获。还有一种是上传过程中产生的错误,可以在调用上传接口的时候传入回调内部类,并在onError(Throwable th)中捕获处理。

API参考

接口

功能说明

参数说明

- (instancetype _Nullable )initWithEndPoint:(NSString*_Nullable)endPoint

SK:(NSString*_Nullable)SK

AK:(NSString*_Nullable)AK

bucketName:(NSString*_Nullable)bucketName

objectKey:(NSString*_Nullable)objectKey

projectId:(NSString*_Nullable)projectId

token:(NSString*_Nullable)token;

初始化

【请求参数】

  • endPoint:点播服务节点地址,如点播服务的Endpoint当前为“vod.cn-north-1.myhuaweicloud.com”,NSString类型。
  • AK、SK、token:是临时AK、SK、token,需要由租户服务端调用服务端SDK获取。请参考获取临时AK/SK/security Token,NSString类型。
  • bucketName:媒资所在的桶名,NSString类型。
  • objectKey:媒资所在桶的对象名,NSString类型。

    (bucketName、objectKey:需要服务端调用创建媒资接口后获得并返回给客户端,详情请参考点播服务端的创建媒资接口。)

  • projectId:用户项目编号,请参考获取项目ID/账号名,NSString类型。

【实现实例】

vodUploadLib *vodUpload = [[vodUploadLib alloc] initWithEndPoint:endPoint SK:SK  AK:AK bucketName:bucketName objectKey:objectKey projectId:projectId token:token];

-(void)setPartSize :(int)partSize;

设置每段大小

【请求参数】

partSize:段大小,int类型

段大小设置范围必须是在[5,5000]区间内,默认为5。

【实现实例】

[vodUpload setPartSize:1];

-(void)setMaxConcurrentUploadRequestCount :(int)maxConcurrentUploadRequestCount;

设置上传线程数

【请求参数】

maxConcurrentUploadRequestCount:上传一个文件最多可以支持几个段同时上传,int类型。

线程数设置范围建议[1,5],默认为3。

【实现实例】

[vodUpload setMaxConcurrentUploadRequestCount:1];

-(void)startUpload :(NSString*_Nullable)filePath;

开始上传

【请求参数】

filePath:上传文件路径,NSString类型。

【实现实例】

    _fileUrlZ = [[NSBundle mainBundle] URLForResource:@"test02.mp4" withExtension:nil];
    NSLog(@"%@",_fileUrlZ);
    _filePathZ =[_fileUrlZ.absoluteString stringByReplacingOccurrencesOfString:@"file://" withString:@""];

    vodUploadLib *vodUpload = [[vodUploadLib alloc] initWithEndPoint:endPoint SK:SK  AK:AK bucketName:bucketName objectKey:objectKey projectId:projectId token:token];
    vodUpload.delegateUploadVod = self;
    [vodUpload startUpload:_filePath];

@protocol UploadVodDelegate <NSObject>

@required

- (void)prograssCallback:(float)prograss;

- (void)uploadCompletedCallback;

@optional

- (void)errorCallback:(NSDictionary*_Nullable)errorInfo;

@end

实现代理()

【请求参数】

  • prograss:回调上传进度(范围是[0,1]),float类型。

    注意:此时只是文件上传成功,只有uploadCompletedCallback回调才是上传全部操作完成。

  • uploadCompletedCallback:回调上传相关全部操作完成。
  • errorInfo:回调的错误信息(可选),NSDictionary类型。

    具体信息请到华为云OBS和点播错误码中查找。

【实现实例】

/** 进度回调*/
- (void)prograssCallback:(float)prograss
{    
    self.uploadProgressView.progress=prograss;
}
/** 上传完成回调*/
- (void)uploadCompletedCallback
{    
    [self showMessage:@"上传成功"];
}
/** 错误信息回调 */
- (void)errorCallback:(NSDictionary*)errorInfo
{    
    NSLog(@"%@",errorInfo);
}
如果您喜欢这篇文档,您还可以:

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区