TXVodDownloadManager.h 4.18 KB
//  Copyright © 2021 Tencent. All rights reserved.

#import <Foundation/Foundation.h>
#import "TXLiteAVSymbolExport.h"
#import "TXPlayerAuthParams.h"

/// @addtogroup TXVodPlayConfig_ios
/// @{

/**
 * 下载视频的清晰度
 */
typedef NS_ENUM(NSInteger, TXVodQuality) {
  ///原画
  TXVodQualityOD = 0,
  ///流畅
  TXVodQualityFLU,
  ///标清
  TXVodQualitySD,
  ///高清
  TXVodQualityHD,
  ///全高清
  TXVodQualityFHD,
  /// 2K
  TXVodQuality2K,
  /// 4K
  TXVodQuality4K,
};

/**
 * 下载错误码
 */
typedef NS_ENUM(NSInteger, TXDownloadError) {
  /// 下载成功
  TXDownloadSuccess = 0,
  /// fileid鉴权失败
  TXDownloadAuthFaild = -5001,
  /// 无此清晰度文件
  TXDownloadNoFile = -5003,
  /// 格式不支持
  TXDownloadFormatError = -5004,
  /// 网络断开
  TXDownloadDisconnet = -5005,
  /// 获取HLS解密key失败
  TXDownloadHlsKeyError = -5006,
  /// 下载目录访问失败
  TXDownloadPathError = -5007,
};

/**
 * 下载源,通过fileid方式下载
 */
LITEAV_EXPORT @interface TXVodDownloadDataSource : NSObject
/// fileid信息
@property TXPlayerAuthParams *auth;
/// 下载清晰度,默认原画
@property TXVodQuality quality;
/// 如地址有加密,请填写token
@property NSString *token;
/// 清晰度模板。如果后台转码是自定义模板,请在这里填写模板名。templateName和quality同时设置时,以templateName为v准
@property NSString *templateName;
@end

/// 下载文件对象
LITEAV_EXPORT @interface TXVodDownloadMediaInfo : NSObject
/// fileid下载对象(可选)
@property TXVodDownloadDataSource *dataSource;
/// 下载地址
@property NSString *url;
///时长
@property(nonatomic) int duration;
/// 文件总大小,单位:byte
@property(nonatomic) int size;
/// 已下载大小,单位:byte
@property(nonatomic) int downloadSize;
/// 分段总数
@property(nonatomic) int segments;
/// 已下载的分段数
@property(nonatomic) int downloadSegments;
/// 进度
@property(nonatomic) float progress;
/// 播放路径,可传给TXVodPlayer播放
@property NSString *playPath;
/// 下载速度,byte每秒
@property int speed;
@end

/// 下载回调
@protocol TXVodDownloadDelegate <NSObject>
/// 下载开始
- (void)onDownloadStart:(TXVodDownloadMediaInfo *)mediaInfo;
/// 下载进度
- (void)onDownloadProgress:(TXVodDownloadMediaInfo *)mediaInfo;
/// 下载停止
- (void)onDownloadStop:(TXVodDownloadMediaInfo *)mediaInfo;
/// 下载完成
- (void)onDownloadFinish:(TXVodDownloadMediaInfo *)mediaInfo;
/// 下载错误
- (void)onDownloadError:(TXVodDownloadMediaInfo *)mediaInfo
              errorCode:(TXDownloadError)code
               errorMsg:(NSString *)msg;
/**
 * 下载HLS,遇到加密的文件,将解密key给外部校验
 * @param mediaInfo 下载对象
 * @param url Url地址
 * @param data 服务器返回
 * @return 0:校验正确,继续下载;否则校验失败,抛出下载错误(SDK 获取失败)
 */
- (int)hlsKeyVerify:(TXVodDownloadMediaInfo *)mediaInfo url:(NSString *)url data:(NSData *)data;
@end

/// 下载管理器
LITEAV_EXPORT @interface TXVodDownloadManager : NSObject

/**
 * 下载任务回调
 */
@property(weak) id<TXVodDownloadDelegate> delegate;

/**
 * 设置 HTTP 头
 */
@property NSDictionary *headers;

/**
 * 全局单例接口
 */
+ (TXVodDownloadManager *)shareInstance;

/**
 * 设置下载文件的根目录。
 *
 * @param path 目录地址,如不存在,将自动创建
 * @warning 开始下载前必须设置,否则不能下载
 */
- (void)setDownloadPath:(NSString *)path;

/**
 * 下载文件
 *
 * @param source 下载源。
 * @return 成功返回下载对象,否则nil
 *
 * @warning 目前只支持hls下载
 */
- (TXVodDownloadMediaInfo *)startDownload:(TXVodDownloadDataSource *)source;

/**
 * 下载文件
 *
 * @param url 下载地址
 * @return 成功返回下载对象,否则nil
 *
 * @warning 目前只支持hls下载,不支持master playlist
 */
- (TXVodDownloadMediaInfo *)startDownloadUrl:(NSString *)url;

/**
 * 停止下载
 *
 * @param media 停止下载对象
 */
- (void)stopDownload:(TXVodDownloadMediaInfo *)media;

/**
 * 删除下载产生的文件
 *
 * @return 文件正在下载将无法删除,返回NO
 */
- (BOOL)deleteDownloadFile:(NSString *)playPath;

@end