日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用iOS SDK上傳文件

文件上傳是指將媒體文件(本地文件或網絡文件)從客戶端上傳至點播存儲。在iOS端上,文件上傳通過上傳實例(VODUploadClient)完成。本文介紹如何使用iOS端上傳SDK完成媒體上傳。

前提條件

您已經集成視頻點播提供的iOS上傳SDK。具體操作,請參見集成iOS SDK

上傳流程

客戶端上傳SDK封裝了OSS上傳邏輯。在客戶端上傳媒體文件時,會直接將文件上傳到點播存儲(基于OSS),不會再經服務端進行中轉,故客戶端上傳必須進行鑒權,也就是需要您在應用服務器上部署授權服務以獲取上傳地址和憑證。目前客戶端上傳SDK支持兩種授權方式,兩種方式差異對比請參見憑證方式與STS方式對比,推薦使用憑證方式。

上傳地址和憑證方式上傳流程詳解

以集成點播服務端SDK獲取上傳地址和憑證為例,完整的上傳流程如下圖所示:客戶端SDK上傳憑證上傳流程

  1. 用戶在上傳應用服務器上部署授權服務(如集成點播服務端SDK)用于獲取上傳地址和憑證。

  2. 客戶端向上傳應用服務器發(fā)起請求獲取上傳地址和憑證。

  3. 上傳應用服務器向視頻點播服務發(fā)起請求獲取上傳地址和憑證。

  4. 點播服務返回上傳地址和憑證。

    說明

    點播服務在下發(fā)上傳地址和憑證時還會自動創(chuàng)建媒資信息,即媒體ID(MediaId),用于媒資生命周期管理或媒體處理。

    • 獲取音視頻上傳地址和憑證返回的VideoId即媒體ID。

    • 獲取圖片上傳地址和憑證返回的ImageId即媒體ID。

    • 獲取輔助媒資上傳地址和憑證返回的MediaId即媒體ID。

    • 請妥善保存媒體ID,作為媒資管理、音視頻播放、媒體處理等的輸入。

  5. 上傳應用服務器向客戶端下發(fā)上傳地址和憑證。

    說明

    下發(fā)地址和憑證即可,無需Base64解碼。

  6. 客戶端使用上傳地址和憑證初始化上傳實例。

  7. 客戶端構造上傳參數發(fā)起上傳請求。

  8. OSS服務返回上傳結果。

    說明

    上傳結果也可以通過提前配置回調接收上傳相關事件來監(jiān)聽。

STS方式上傳流程詳解

如需使用STS臨時授權方式(阿里云Security Token Service)訪問點播服務,請為RAM用戶創(chuàng)建角色并授予角色VOD相關權限。操作指引請參見使用STS臨時授權方案上傳視頻

使用STS方式上傳的完整的流程如下圖所示:客戶端STS方式上傳流程

  1. 用戶在上傳應用服務器上部署授權服務(如集成阿里云STS SDK)用于獲取STS臨時Token。

  2. 客戶端向上傳應用服務器發(fā)起請求獲取STS臨時Token。

  3. 上傳應用服務器向阿里云STS服務發(fā)起請求獲取STS臨時Token。

  4. 阿里云STS服務返回上傳地址和憑證。

  5. 上傳應用服務器向客戶端下發(fā)STS臨時Token。

  6. 客戶端使用STS臨時Token初始化上傳實例。

  7. 客戶端構造請求發(fā)起上傳請求。

  8. OSS服務返回上傳結果。

    說明

    上傳結果也可以通過提前配置回調接收上傳相關事件來監(jiān)聽。

上傳文件

在iOS端上傳文件的基本操作步驟如下:

  1. 獲取上傳地址和憑證或STS臨時Token,用于上傳授權。

    iOS上傳SDK支持以下兩種上傳授權方式,推薦使用憑證方式:

    執(zhí)行結果

    使用獲取到的上傳地址和憑證或STS臨時Token作為入參初始化上傳實例。

  2. 使用上傳憑證或STS臨時Token初始化上傳實例。

    初始化上傳實例分為聲明初始化回調和初始化上傳實例兩步。

    1. 聲明VODUploadClient屬性,不能是局部變量。

    2. 初始化上傳實例。請根據業(yè)務需求選擇用上傳地址和憑證方式或STS方式初始化上傳實例。

      • (推薦)上傳地址和憑證方式

        說明
        • 上傳地址和憑證方式調用init方法初始化。

        • 使用獲取的上傳地址和憑證初始化時無需設置,在開始上傳后觸發(fā)的OnUploadStartedListener回調中調用setUploadAuthAndAddress: uploadAuth:uploadAddress:方法進行設置。

        • 當token超時,會觸發(fā)OnUploadTokenExpiredListener回調,需要調用resumeWithAuth方法,設置新的上傳憑證繼續(xù)上傳。

        展開查看代碼

        //創(chuàng)建VODUploadClient對象
        self.uploader = [VODUploadClient new];
        //weakself
        __weak typeof(self) weakSelf = self;
        //setup callback
        OnUploadFinishedListener FinishCallbackFunc = ^(UploadFileInfo* fileInfo, VodUploadResult* result){
            NSLog(@"upload finished callback videoid:%@, imageurl:%@", result.videoId, result.imageUrl);
        };
        OnUploadFailedListener FailedCallbackFunc = ^(UploadFileInfo* fileInfo, NSString *code, NSString* message){
            NSLog(@"upload failed callback code = %@, error message = %@", code, message);
        };
        OnUploadProgressListener ProgressCallbackFunc = ^(UploadFileInfo* fileInfo, long uploadedSize, long totalSize) {
            NSLog(@"upload progress callback uploadedSize : %li, totalSize : %li", uploadedSize, totalSize);
        };
        OnUploadTokenExpiredListener TokenExpiredCallbackFunc = ^{
            NSLog(@"upload token expired callback.");
            //token過期,設置新的上傳憑證,繼續(xù)上傳
            [weakSelf.uploader resumeWithAuth:`new upload auth`];
        };
        OnUploadRertyListener RetryCallbackFunc = ^{
            NSLog(@"upload retry begin callback.");
        };
        OnUploadRertyResumeListener RetryResumeCallbackFunc = ^{
            NSLog(@"upload retry end callback.");
        };
        OnUploadStartedListener UploadStartedCallbackFunc = ^(UploadFileInfo* fileInfo) {
            NSLog(@"upload upload started callback.");
            //設置上傳地址和上傳憑證
            [weakSelf.uploader setUploadAuthAndAddress:fileInfo uploadAuth:`upload auth` uploadAddress:`upload address`];
        };
        VODUploadListener *listener = [[VODUploadListener alloc] init];
        listener.finish = FinishCallbackFunc;
        listener.failure = FailedCallbackFunc;
        listener.progress = ProgressCallbackFunc;
        listener.expire = TokenExpiredCallbackFunc;
        listener.retry = RetryCallbackFunc;
        listener.retryResume = RetryResumeCallbackFunc;
        listener.started = UploadStartedCallbackFunc;
        //init with upload address and upload auth
        [self.uploader init:listener];
      • STS方式初始化上傳實例

        說明
        • STS方式調用init方法初始化,通過接口setKeyId:accessKeySecret:secretToken:expireTime:listener:傳入臨時STS憑證。

        • 當token過期時,觸發(fā)OnUploadTokenExpiredListener回調,需要調用resumeWithToken: accessKeySecret: secretToken: expireTime方法,設置新的STS繼續(xù)上傳。

        展開查看代碼

        //創(chuàng)建VODUploadClient對象
        self.uploader = [VODUploadClient new];
        //weakself
        __weak typeof(self) weakSelf = self;
        //setup callback
        OnUploadFinishedListener FinishCallbackFunc = ^(UploadFileInfo* fileInfo,  VodUploadResult* result){
            NSLog(@"upload finished callback videoid:%@, imageurl:%@", result.videoId, result.imageUrl);
        };
        OnUploadFailedListener FailedCallbackFunc = ^(UploadFileInfo* fileInfo, NSString *code, NSString* message){
            NSLog(@"upload failed callback code = %@, error message = %@", code, message);
        };
        OnUploadProgressListener ProgressCallbackFunc = ^(UploadFileInfo* fileInfo, long uploadedSize, long totalSize) {
            NSLog(@"upload progress callback uploadedSize : %li, totalSize : %li", uploadedSize, totalSize);
        };
        OnUploadTokenExpiredListener TokenExpiredCallbackFunc = ^{
            NSLog(@"upload token expired callback.");
            //token過期,設置新的STS,繼續(xù)上傳
            [weakSelf.uploader resumeWithToken:`STS Key Id` accessKeySecret:`STS Key Secret` secretToken:`STS Secret Token` expireTime:`STS Expire Time`];
        };
        OnUploadRertyListener RetryCallbackFunc = ^{
            NSLog(@"upload retry begin callback.");
        };
        OnUploadRertyResumeListener RetryResumeCallbackFunc = ^{
            NSLog(@"upload retry end callback.");
        };
        OnUploadStartedListener UploadStartedCallbackFunc = ^(UploadFileInfo* fileInfo) {
            NSLog(@"upload upload started callback.");
        };
        //init
        VODUploadListener *listener = [[VODUploadListener alloc] init];
        listener.finish = FinishCallbackFunc;
        listener.failure = FailedCallbackFunc;
        listener.progress = ProgressCallbackFunc;
        listener.expire = TokenExpiredCallbackFunc;
        listener.retry = RetryCallbackFunc;
        listener.retryResume = RetryResumeCallbackFunc;
        listener.started = UploadStartedCallbackFunc;
        //set STS and listener
        [self.uploader setKeyId:`STS Key Id` accessKeySecret:`STS Key Secret` secretToken:STS Secret Token` expireTime:`STS Expire Time` listener:listener];
  3. 設置回調,用于接收上傳過程中關鍵節(jié)點的消息。

    設置VODUploadListener對象,該對象是上傳狀態(tài)的回調類,需要設置下列回調方法:

    展開查看代碼

    /**
     上傳完成回調
     @param fileInfo 上傳文件信息
     @param result 上傳結果信息
     */
    typedef void (^OnUploadFinishedListener) (UploadFileInfo* fileInfo, VodUploadResult* result);
    /**
     上傳失敗回調
     @param fileInfo 上傳文件信息
     @param code 錯誤碼
     @param message 錯誤描述
     */
    typedef void (^OnUploadFailedListener) (UploadFileInfo* fileInfo, NSString *code, NSString * message);
    /**
     上傳進度回調
     @param fileInfo 上傳文件信息
     @param uploadedSize 已上傳大小
     @param totalSize 總大小
     */
    typedef void (^OnUploadProgressListener) (UploadFileInfo* fileInfo, long uploadedSize, long totalSize);
    /**
     token過期回調
     上傳地址和憑證方式上傳需要調用resumeWithAuth:方法繼續(xù)上傳
     STS方式上傳需要調用resumeWithToken:accessKeySecret:secretToken:expireTime:方法繼續(xù)上傳
     */
    typedef void (^OnUploadTokenExpiredListener) ();
    /**
     上傳開始重試回調
     */
    typedef void (^OnUploadRertyListener) ();
    /**
     上傳結束重試,繼續(xù)上傳回調
     */
    typedef void (^OnUploadRertyResumeListener) ();
    /**
     開始上傳回調
     上傳地址和憑證方式上傳需要調用setUploadAuthAndAddress:uploadAuth:uploadAddress:方法設置上傳地址和憑證
     @param fileInfo 上傳文件信息
     */
    typedef void (^OnUploadStartedListener) (UploadFileInfo* fileInfo);
  4. 根據上傳的文件類型(音視頻或圖片)構造上傳參數。

    說明

    音視頻和圖片的上傳參數略有差異。目前客戶端不支持上傳輔助媒資。

    音視頻文件參數

    構造添加音視頻文件到上傳列表的上傳請求函數。

    展開查看代碼

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"視頻源文件的名稱" ofType:@"視頻源文件的格式,例如mp4"];
    VodInfo *vodInfo = [[VodInfo alloc] init];
    vodInfo.title = @"視頻上傳后的名稱";
    vodInfo.desc =@"視頻上傳后的描述";
    vodInfo.cateId = @(視頻的分類ID);
    vodInfo.tags = @"視頻標簽,例如sports";
    [self.uploader addFile:filePath vodInfo:vodInfo];

    VodInfo說明

    展開查看代碼

    //標題
    @property (nonatomic, copy) NSString* title;
    //標簽
    @property (nonatomic, copy) NSString* tags;
    //描述
    @property (nonatomic, copy) NSString* desc;
    //分類ID
    @property (nonatomic, strong) NSNumber* cateId;
    //封面url(完整的URL https://)
    @property (nonatomic, copy) NSString* coverUrl;

    添加文件后,SDK會將待上傳文件封裝為UploadFileInfo對象,具體結構如下:

    展開查看代碼

    //文件本地路徑
    @property (nonatomic, copy) NSString* filePath;
    //endpoint
    @property (nonatomic, copy) NSString* endpoint;
    //bucket
    @property (nonatomic, copy) NSString* bucket;
    //object
    @property (nonatomic, copy) NSString* object;
    //VodInfo
    @property (nonatomic, strong) VodInfo* vodInfo;
    說明

    如果需要對相冊內的視頻進行上傳,那么通過選擇器得到的選中視頻的絕對路徑,作為上傳的filepath進行上傳。

    圖片文件參數

    展開查看代碼

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"圖片源文件的名稱" ofType:@"圖片源文件的格式,例如jpg"];
    VodInfo *imageInfo = [[VodInfo alloc] init];
    imageInfo.title = @"圖片上傳后的名稱";
    imageInfo.desc =@"圖片上傳后的描述";
    imageInfo.cateId = @(圖片的分類ID);
    imageInfo.tags = @"圖片標簽,例如sports";
    [self.uploader addFile:filePath vodInfo:imageInfo];
  5. 開始上傳。

    1. 調用start開始上傳。

      [self.uploader start];

      該方法調用后,會觸發(fā)OnUploadStartedListener回調。如果通過上傳地址和憑證方式上傳,需要在該回調方法中設置上傳地址和憑證。代碼如下:

      [weakSelf.uploader setUploadAuthAndAddress:fileInfo uploadAuth:weakSelf.uploadAuth uploadAddress:weakSelf.uploadAddress];
    2. 文件開始上傳后,OnUploadProgressListener回調開始同步上傳進度。

      回調參數包括已上傳文件大小uploadedSize和總文件大小totalSize

    3. 文件上傳成功后,OnUploadFinishedListener回調會返回上傳文件信息UploadFileInfo和上傳結果VodUploadResult

      VodUploadResult包含以下屬性:

      @property (nonatomic, copy) NSString* videoId;
      @property (nonatomic, copy) NSString* imageUrl;
      說明

      videoId只在STS方式上傳視頻成功后才有返回值,imageUrl只在STS方式上傳圖片成功后才有返回值。如果使用上傳地址和憑證方式上傳,videoIdimageUrl不會返回,相應的值在請求上傳地址和憑證時就可以獲取到。

執(zhí)行結果

  • 視頻上傳成功后會返回videoId作為視頻ID,拿到videoId之后需要獲取播放地址進行播放。更多信息,請參見獲取播放地址播放

  • 圖片上傳完成后會返回imageUrl,開啟URL鑒權后imageUrl會有過期時間。更多信息,請參見配置URL鑒權

隊列管理

VODUploadClient支持添加多個文件順序上傳,并且提供了以下方法管理上傳隊列:

說明

盡管VODUploadClient支持多文件上傳,如果使用上傳憑證和地址方式上傳,每個文件還是需要單獨設置。基于多文件上傳代碼復雜度的考慮,建議只添加單文件上傳。

  • 從隊列中刪除上傳文件,如果待刪除的文件正在上傳中,則取消上傳并自動上傳下一個文件。

    - (BOOL)deleteFile:(int) index;
  • 清空上傳隊列,如果有文件在上傳,則取消上傳。

    - (BOOL)clearFiles;
  • 獲取上傳文件隊列。

    - (NSMutableArray<UploadFileInfo *> *)listFiles;
  • 將文件標記為取消,文件仍保留在上傳列表中。如果待取消的文件正在上傳中,則取消上傳并自動上傳下一個文件。

    - (BOOL)cancelFile:(int)index;
  • 恢復已取消的上傳文件,并自動開始上傳。

    - (BOOL)resumeFile:(int)index;

上傳控制

  • 停止上傳,如果有文件正在上傳中,則取消上傳。

    - (BOOL)stop;
    說明

    停止上傳后如需恢復上傳,請調用resumeFile恢復待上傳文件,或者清空隊列后重新添加文件上傳。

  • 暫停上傳。

    - (BOOL)pause;
  • 恢復上傳。

    - (BOOL)resume;

回調處理

  • 上傳失敗

    上傳失敗時,會觸發(fā)OnUploadFailedListener回調。在該回調方法中,可以通過codemessage查看具體原因,并在頁面上提示。更多錯誤碼信息,請參見錯誤碼表OSS錯誤碼

  • 憑證過期處理

    上傳憑證或STS過期,會觸發(fā)OnUploadTokenExpiredListener回調。在該回調方法中,可以向AppServer重新請求新的上傳憑證或STS,并調用以下方法繼續(xù)上傳。

    • 重新設置上傳憑證

      - (BOOL)resumeWithAuth:(NSString *)uploadAuth;
    • 重新設置STS

      - (BOOL)resumeWithToken:(NSString *)accessKeyId
              accessKeySecret:(NSString *)accessKeySecret
                  secretToken:(NSString *)secretToken
                   expireTime:(NSString *)expireTime;
  • 超時處理

    上傳超時,會觸發(fā)OnUploadRertyListener回調并自動重試。在該回調方法中,可以在頁面上給予提示或者調用stop方法停止上傳。此外,可以設置maxRetryCount屬性,指定最大重試次數。超時重試可以繼續(xù)上傳時,會觸發(fā)OnUploadRertyResumeListener回調并恢復上傳。

高級設置

VODUploadClient支持上傳轉碼、超時重試、設置緩存文件夾位置、斷點續(xù)傳、分片上傳、設置點播服務地域等高級設置。具體示例如下:

上傳轉碼

/**
 上傳文件到服務端是否轉碼,默認值YES。指定視頻轉碼生成的格式請參見:音視頻轉碼。
 */
@property (nonatomic, assign) BOOL transcode;

超時重試

/**
 最大超時重試次數,默認值INT_MAX
 */
@property (nonatomic, assign) uint32_t maxRetryCount;
/**
 超時時間
 */
@property (nonatomic, assign) NSTimeInterval timeoutIntervalForRequest;

設置緩存文件夾位置

/**
 緩存文件夾位置
 */
@property (nonatomic, copy) NSString * recordDirectoryPath;

斷點續(xù)傳

/**
 是否記錄上傳進度(斷點續(xù)傳),默認值YES
 */
@property (nonatomic, assign) BOOL recordUploadProgress;

分片上傳

/**
 分片大小,默認值1024 * 1024
*/
@property (nonatomic, assign) NSInteger uploadPartSize;

設置點播服務地域

/**
 vod region,默認值"cn-shanghai"
 */
@property (nonatomic, copy) NSString *region;