PLVVodDownloadManager

Objective-C

@interface PLVVodDownloadManager : NSObject

Swift

class PLVVodDownloadManager : NSObject

视频下载管理单例

  • 下载目录,默认为 Library/Caches/PolyvVodCache。修改下载目录后,上一个目录的离线视频将无法索引。

    Declaration

    Objective-C

    @property (nonatomic, copy) NSString *downloadDir;

    Swift

    var downloadDir: String! { get set }
  • 是否允许使用蜂窝移动网络进行下载,默认 YES

    Declaration

    Objective-C

    @property (nonatomic) BOOL allowsCellularAccess;

    Swift

    var allowsCellularAccess: Bool { get set }
  • 是否启用后台下载,默认 YES

    Declaration

    Objective-C

    @property (nonatomic) BOOL enableBackgroundDownload;

    Swift

    var enableBackgroundDownload: Bool { get set }
  • 添加任务后是否自动启动,默认 NO

    Declaration

    Objective-C

    @property (nonatomic) BOOL autoStart;

    Swift

    var autoStart: Bool { get set }
  • 保存的后台下载会话block

    Declaration

    Objective-C

    @property (nonatomic, copy) void (^)(void) backgroundCompletionHandler;

    Swift

    var backgroundCompletionHandler: (() -> Void)! { get set }
  • 完成所有下载回调

    Declaration

    Objective-C

    @property (nonatomic, copy) void (^)(void) completeBlock;

    Swift

    var completeBlock: (() -> Void)! { get set }
  • 单个视频下载完成回调

    Declaration

    Objective-C

    @property (nonatomic, copy) void (^)(PLVVodDownloadInfo *) downloadCompleteBlock;

    Swift

    var downloadCompleteBlock: ((PLVVodDownloadInfo?) -> Void)! { get set }
  • 下载错误回调

    Declaration

    Objective-C

    @property (nonatomic, copy) void (^)(PLVVodVideo *, NSError *) downloadErrorHandler;

    Swift

    var downloadErrorHandler: ((PLVVodVideo?, Error?) -> Void)! { get set }
  • 是否正在下载中

    Declaration

    Objective-C

    @property (nonatomic, readonly) BOOL isDownloading;

    Swift

    var isDownloading: Bool { get }
  • 允许同时下载的最大任务数,默认为1,最大为3

    Declaration

    Objective-C

    @property (nonatomic) NSUInteger maxRuningCount;

    Swift

    var maxRuningCount: UInt { get set }
  • Deprecated

    Use: downloadType Instead

    下载的文件类型,默认视频文件

    Declaration

    Objective-C

    @property (nonatomic) int fileType;

    Swift

    var fileType: PLVDownloadFileType { get set }
  • 下载模式类型,默认视频下载模式

    Declaration

    Objective-C

    @property (nonatomic) int downloadType;

    Swift

    var downloadType: PLVDownloadModeType { get set }
  • 多账号体系支持,默认NO

    Declaration

    Objective-C

    @property (nonatomic) BOOL isMultiAccount;

    Swift

    var isMultiAccount: Bool { get set }
  • 上一个版本视频存储目录,用于升级到多账号下载后,迁移单帐号本地视频到多账号系统的第一个下载账户

    Declaration

    Objective-C

    @property (nonatomic, copy) NSString *previousDownloadDir;

    Swift

    var previousDownloadDir: String! { get set }
  • ts 文件下载模式 。 默认CreateAllResumeOne初始化时创建所有ts片下载任务,然后逐个启动下载 设置CreateOneResumeOne 针对直播回放视频优化下载

    Declaration

    Objective-C

    @property (nonatomic) int taskCreateMode;

    Swift

    var taskCreateMode: PLVTaskCreateMode { get set }
  • PLVVodDownloadManager 共享的静态对象

    Declaration

    Objective-C

    + (instancetype)sharedManager;

    Swift

    class func shared() -> Self!

    Return Value

    PLVVodDownloadManager 共享的静态对象

  • 设置下载目录

    Declaration

    Objective-C

    - (BOOL)setDownloadDir:(NSString *)downloadDir
                skipBackup:(BOOL)skipBackup
                     error:(NSError **)error;

    Swift

    func setDownloadDir(_ downloadDir: String!, skipBackup: Bool) throws

    Parameters

    downloadDir

    设置的下载目录

    skipBackup

    是否忽略 iCloud 的备份

    error

    错误回调

    Return Value

    是否成功

  • 迁移已经缓存的视频数据

    Declaration

    Objective-C

    - (BOOL)moveDownloadVideoFromSourceDir:(NSString *)sourceDir
                                 toDestDir:(NSString *)destDir;

    Swift

    func moveDownloadVideo(fromSourceDir sourceDir: String!, toDestDir destDir: String!) -> Bool

    Parameters

    sourceDir

    被迁移的视频下载目录

    destDir

    目标视频下载目录(新目录)

    Return Value

    是否迁移成功

  • 添加至下载队列

    添加下载器,仅当 video 错误时,才会报错,quality 错误时,只会警告,并切换到最近的质量进行下载。

    Declaration

    Objective-C

    - (PLVVodDownloadInfo *)downloadVideo:(PLVVodVideo *)video quality:(id)quality;

    Swift

    func downloadVideo(_ video: PLVVodVideo!, quality: PLVVodQuality) -> PLVVodDownloadInfo!

    Parameters

    video

    PLVVodVideo 视频对象

    quality

    视频画质

    Return Value

    下载信息

  • 使用后台设置的默认画质添加至下载队列

    Declaration

    Objective-C

    - (PLVVodDownloadInfo *)downloadVideo:(PLVVodVideo *)video;

    Swift

    func downloadVideo(_ video: PLVVodVideo!) -> PLVVodDownloadInfo!

    Parameters

    video

    PLVVodVideo 视频对象

    Return Value

    下载信息

  • 下载音频文件(开通视频转音频服务才有此功能)

    Declaration

    Objective-C

    - (PLVVodDownloadInfo *)downloadAudio:(PLVVodVideo *)video;

    Swift

    func downloadAudio(_ video: PLVVodVideo!) -> PLVVodDownloadInfo!

    Parameters

    video

    PLVVodVideo 视频对象

    Return Value

    下载信息

  • 下载PPT 文件

    Declaration

    Objective-C

    - (void)downloadPPTWithVideo:(PLVVodVideo *)video
                      completion:(void (^)(PLVVodDownloadInfo *))completion;

    Swift

    func downloadPPT(with video: PLVVodVideo!, completion: ((PLVVodDownloadInfo?) -> Void)!)

    Parameters

    video

    PLVVodVideo 视频对象

  • 开始队列下载

    Declaration

    Objective-C

    - (void)startDownload;

    Swift

    func startDownload()
  • 停止队列下载

    Declaration

    Objective-C

    - (void)stopDownload;

    Swift

    func stopDownload()
  • 从指定视频开始下载,若达到并发数限制,则停止其他下载任务,优先下载指定视频

    Declaration

    Objective-C

    - (void)startDownloadWithVid:(NSString *)vid;

    Swift

    func startDownload(withVid vid: String!)

    Parameters

    vid

    视频vid

  • 开始指定vid视频下载,根据priority 参数执行不同的下载策略

    Declaration

    Objective-C

    - (void)startDownloadWithVid:(NSString *)vid highPriority:(BOOL)priority;

    Swift

    func startDownload(withVid vid: String!, highPriority priority: Bool)

    Parameters

    vid

    视频vid

    priority

    YES 当达到并发数限制,优先下载此视频;NO,当达到并发数限制,处于Preparing 状态

  • 从指定视频/音频文件开始下载 使用场景:同时下载视频/音频文件的客户

    Declaration

    Objective-C

    - (void)startDownloadWithVideoParams:(PLVVodVideoParams *)videoParams;

    Swift

    func startDownload(with videoParams: PLVVodVideoParams!)

    Parameters

    videoParams

    fileType 为音频,操作音频文件;为视频,操作视频文件

  • 停止下载指定视频

    Declaration

    Objective-C

    - (void)stopDownloadWithVid:(NSString *)vid;

    Swift

    func stopDownload(withVid vid: String!)

    Parameters

    vid

    视频vid

  • 停止下载指定视频

    Declaration

    Objective-C

    - (void)stopDownloadWithVid:(NSString *)vid autoNext:(BOOL)autoNext;

    Swift

    func stopDownload(withVid vid: String!, autoNext: Bool)

    Parameters

    vid

    视频vid

    autoNext

    是否自动开启下一个视频的下载

  • 停止下载指定视频/音频

    Declaration

    Objective-C

    - (void)stopDownloadWithVideoParams:(PLVVodVideoParams *)videoParams;

    Swift

    func stopDownload(with videoParams: PLVVodVideoParams!)

    Parameters

    videoParams

    fileType 为音频,操作音频文件;为视频,操作视频文件

  • 移除下载任务,并删除对应文件

    Declaration

    Objective-C

    - (void)removeDownloadWithVid:(NSString *)vid error:(NSError **)error;

    Swift

    func removeDownload(withVid vid: String!, error: NSErrorPointer)

    Parameters

    vid

    vid

    error

    错误回调

  • 移除音频/视频下载任务,并删除对应文件

    Declaration

    Objective-C

    - (void)removeDownloadWithVideoParams:(PLVVodVideoParams *)videoParams
                                    error:(NSError **)error;

    Swift

    func removeDownload(with videoParams: PLVVodVideoParams!, error: NSErrorPointer)

    Parameters

    videoParams

    fileType 为音频,操作音频文件;为视频,操作视频文件

    error

    错误回调

  • 移除所有下载任务,并删除对应文件,与已完成下载的视频无关

    Declaration

    Objective-C

    - (void)removeAllDownloadWithComplete:(void (^)(void *))completion;

    Swift

    func removeAllDownload(complete completion: ((UnsafeMutableRawPointer?) -> Void)!)

    Parameters

    completion

    删除任务后的回调

  • 获取所有下载任务信息(缓冲中,已缓存)

    Declaration

    Objective-C

    - (void)requestDownloadInfosWithCompletion:
        (void (^)(NSArray<PLVVodDownloadInfo *> *))completion;

    Swift

    func requestDownloadInfos(completion: (([PLVVodDownloadInfo]?) -> Void)!)

    Parameters

    completion

    完成回调

  • 获取所有缓存中视频信息(准备缓存,缓存中,缓存失败)

    Declaration

    Objective-C

    - (void)requstDownloadProcessingListWithCompletion:
        (void (^)(NSArray<PLVVodDownloadInfo *> *))completion;

    Swift

    func requstDownloadProcessingList(completion: (([PLVVodDownloadInfo]?) -> Void)!)

    Parameters

    completion

    完成回调,返回视频信息数组

  • 获取所有已缓存成功视频信息

    Declaration

    Objective-C

    - (NSArray<PLVVodDownloadInfo *> *)requestDownloadCompleteList;

    Swift

    func requestDownloadCompleteList() -> [PLVVodDownloadInfo]!

    Return Value

    下载完成的视频数组

  • 根据vid 获取视频下载信息

    Declaration

    Objective-C

    - (PLVVodDownloadInfo *)requestDownloadInfoWithVid:(NSString *)vid;

    Swift

    func requestDownloadInfo(withVid vid: String!) -> PLVVodDownloadInfo!

    Parameters

    vid

    视频vid

  • 根据videoParams 获取视频下载详细信息

    Declaration

    Objective-C

    - (PLVVodDownloadInfo *)requestDownloadInfoWithVideoParams:
        (PLVVodVideoParams *)videoParams;

    Swift

    func requestDownloadInfo(with videoParams: PLVVodVideoParams!) -> PLVVodDownloadInfo!

    Parameters

    videoParams

    视频/音频文件信息

工具方法

  • 删除指定视频 删除视频,会删除包含 vid 的所有离线资源(与下载任务无关)。

    Declaration

    Objective-C

    + (void)removeVideoWithVid:(NSString *)vid error:(NSError **)error;

    Swift

    class func removeVideo(withVid vid: String!, error: NSErrorPointer)

    Parameters

    vid

    视频id

    error

    错误回调

  • 删除本地ppt 数据 (与下载任务无关)

    Declaration

    Objective-C

    + (void)removePPTWithVid:(NSString *)vid error:(NSError **)error;

    Swift

    class func removePPT(withVid vid: String!, error: NSErrorPointer)

    Parameters

    vid

    视频id

    error

    错误回调

  • 删除指定视频/音频文件

    删除视频/音频,会删除包含 vid 的所有离线资源(与下载任务无关)。

    Declaration

    Objective-C

    + (void)removeVideoWithVideoParams:(PLVVodVideoParams *)videoParams
                                 error:(NSError **)error;

    Swift

    class func removeVideo(with videoParams: PLVVodVideoParams!, error: NSErrorPointer)

    Parameters

    videoParams

    fileType 为音频,操作音频文件;为视频,操作视频文件

    error

    错误回调

  • 删除下载目录下所有资源

    删除下载目录下所有离线资源(与下载任务无关)。

    Declaration

    Objective-C

    + (void)removeAllVideoWithError:(NSError **)error;

    Swift

    class func removeAllVideoWithError(_ error: NSErrorPointer)

    Parameters

    error

    错误回调

  • 删除下载目录下所有音频资源

    删除下载目录下所有音频离线资源(与下载任务无关)。

    Declaration

    Objective-C

    + (void)removeAllAudioWithError:(NSError **)error;

    Swift

    class func removeAllAudioWithError(_ error: NSErrorPointer)

    Parameters

    error

    错误回调

  • 获取已下载的本地视频

    Declaration

    Objective-C

    - (NSArray<PLVVodLocalVideo *> *)localVideos;

    Swift

    func localVideos() -> [PLVVodLocalVideo]!

    Return Value

    一组 PLVVodLocalVideo 对象

  • 判断指定视频是否存在本地

    指定 vid 视频是否已下载,返回指定 vid 的清晰度,返回 0 则不存在该视频。

    Declaration

    Objective-C

    + (id)videoExist:(NSString *)vid;

    Swift

    class func videoExist(_ vid: String!) -> PLVVodQuality

    Parameters

    vid

    vid

    Return Value

    指定视频的画质

  • 兼容 1.x.x 版本的离线视频

    注意:

    • 实现兼容的前提是使用相同的下载目录,必须保证与之前版本的下载目录一致;
    • 该方法调用一次即可,多次调用也不会修改文件。

    Declaration

    Objective-C

    - (void)compatibleWithPreviousVideos;

    Swift

    func compatibleWithPreviousVideos()
  • 在AppDelegate 中调用,程序即将结束时,修改并保存下载中视频的下载状态,用于 程序下次启动后,恢复视频下载状态

    Declaration

    Objective-C

    - (void)applicationWillTerminate;

    Swift

    func applicationWillTerminate()
  • 在AppDelegate 中调用,app 回到前台模式,进行相关设置

    Declaration

    Objective-C

    - (void)applicationWillEnterForeground;

    Swift

    func applicationWillEnterForeground()
  • 在AppDelegate 中调用,app 退到后台模式,进行相关设置

    Declaration

    Objective-C

    - (void)applicationDidEnterBackground;

    Swift

    func applicationDidEnterBackground()
  • 处理后台下载完成回调的事件

    Declaration

    Objective-C

    - (void)handleEventsForBackgroundURLSession:(NSString *)identifier
                              completionHandler:(void (^)(void))completionHandler;

    Swift

    func handleEvents(forBackgroundURLSession identifier: String!, completionHandler: (() -> Void)!)

多账号下载支持

  • 当开启多账号支持时,可以切换当前下载帐号,各个帐号具有单独的存储目录

    Declaration

    Objective-C

    - (void)switchDownloadAccount:(NSString *)accountId;

    Swift

    func switchDownloadAccount(_ accountId: String!)

    Parameters

    accountId

    终端用户的唯一标志,建议传递userId

  • 登出多账号,停止当前帐号下载中的视频,重新设置多账号下的默认帐号 登出后,会采用默认帐号进行下载相关操作

    Declaration

    Objective-C

    - (void)logoutMultiAccount;

    Swift

    func logoutMultiAccount()