前言
前段时间公司的项目迭代,加入了上传视频的功能,老大经过调研后决定采用阿里云上传。在集成阿里云上传的过程中踩了了很多坑,在这里做个记录。如果有幸能帮助到你那是极好的,如果没能帮助到你也请轻喷,小生在此谢过了😊。
前期准备工作
- 导入第三方类库:
VODUpload.framework
、AliyunVideoCore.framework
、AliyunOSSiOS.framework
- SDK集成后,打开项目工程并修改以下配置:配置
Build Setting — Linking — Other Linker Flags
,添加-ObjC
。
上传流程
上传步骤
- 请求上传地址加凭证或STS,相关概念请参见相关文档。
- 初始化上传实例,实例化上传有两种方式:上传地址加凭证和STS方式。
- 回调设置,所有的上传状态包括进度,上传成功,上传失败,凭证过期都在这里进行处理。
- 添加上传文件进入上传列表,目前主要支持视频文件和图片文件的上传。
- 启动上传
- 回调处理
关键词解释
- 初始化SDK
初始化SDK分三种模式:1.明文设置模式(不推荐),2.STS鉴权模式(推荐),3.自签名模式 -
STS鉴权模式
- 上传方式
VOD
(短视频上传),OSS
(文件上传) - 上传成功的返回数据
VOD
上传返回视频id(字符串),OSS
上传返回文件名(字符串)
具体上传流程(通过STS鉴权模式的VOD上传)
-
App
向AppServer
发起获取STSToken
请求 -
AppServer
通过上传SDK向阿里获取STS临时凭证 -
AppServer
给App
返回STS临时凭证(AccessKeyId
、AccessKeySecret
、SecurityToken
、ExpriedTime
) - 添加视频信息
- 通过添加好的视频信息和本地的视频路径去阿里云服务器添加视频,只有添加视频成功才能开始上传
- 通过获取到的临时凭证开始上传视频
- 处理回调
阿里云上传回调
- 上传开始:
(^OnUploadStartedListener) (UploadFileInfo* fileInfo)
,fileInfo
中存放的是视频信息 - 上传进度:
(^OnUploadProgressListener) (UploadFileInfo* fileInfo, long uploadedSize, long totalSize)
,uploadedSize
为上传数据量,totalSize
为总文件大小 - 上传成功:
(^OnUploadSucceedListener) (UploadFileInfo* fileInfo)
- 上传完成:
(^OnUploadFinishedListener) (UploadFileInfo* fileInfo, VodUploadResult* result)
,result
存放了视频id或者文件(图片)的文件名 - 上传失败:
(^OnUploadFailedListener) (UploadFileInfo* fileInfo, NSString *code, NSString * message)
,code
为错误码,messgae
为错误信息 - 上传凭证过期:
(^OnUploadTokenExpiredListener) ()
在这个回调中重新获取上传凭证 - 重新获取凭证:
(^OnUploadRertyResumeListener) ()
这个回调表示重新获取上传凭证成功 - 重新上传:
(^OnUploadRertyListener) ()
这个回调表示重新开始上传
注意
-
ExpriedTime
表示的是临时凭证的过期时间,返回的是过期时间点的时间戳,不是有效时长 - 视频信息中视频标题和视频介绍为必填项,不能为空且不能为空格
- 上传视频有7个回调,swift中每个回调必须实现不然会crash
- 视频信息中的封面图地址本地图片路径,否则返回的封面图URL为空