Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

离线下载

fengxing edited this page Mar 21, 2019 · 3 revisions

点播离线播放是一个非常普遍的需求,用户可以在有网络的地方先下载好视频,等到了无网络的环境可以再次观看。SDK提供了播放本地文件的能力,但仅限于mp4和flv这种单一文件格式,HLS流媒体因为无法保存到本地,所以不能本地播放。现在,您可以通过TXVodDownloadManager将HLS下载到本地,以实现离线播放HLS的能力

准备工作

TXVodDownloadManager被设计为单例,因此您不能创建多个下载对象。用法如下

#import "TXVodDownloadManager.h" // 该头文件在TXLiteAV中
TXVodDownloadManager *downloader = [TXVodDownloadManager shareInstance];
[downloader setDownloadPath:"<指定您的下载目录>"];

开始下载

开始下载有两种方式:url和fileid。url方式非常简单,只需要传入下载地址即可

[downloader startDownloadUrl:@"http://1253131631.vod2.myqcloud.com/26f327f9vodgzp1253131631/f4bdff799031868222924043041/playlist.m3u8"];

fileid下载至少需要传入appId和fileId

TXPlayerAuthParams *auth = [TXPlayerAuthParams new];
auth.appId = 1252463788;
auth.fileId = @"4564972819220421305";
TXVodDownloadDataSource *dataSource = [TXVodDownloadDataSource new];
dataSource.auth = auth;
[downloader startDownload:dataSource];

任务信息

在接收任务信息前,需要先设置回调delegate

downloader.delegate = self;

可能收到的任务回调有:

  • -[TXVodDownloadDelegate onDownloadStart:] 任务开始,表示SDK已经开始下载。
  • -[TXVodDownloadDelegate onDownloadProgress:] 任务进度,下载过程中,SDK会频繁回调此接口,你可以在这里更新进度显示
  • -[TXVodDownloadDelegate onDownloadStop:] 任务停止,当您调用是stopDownload停止下载,收到此消息表示停止成功
  • -[TXVodDownloadDelegate onDownloadFinish:] 下载完成,收到此回调表示已全部下载。此时下载文件可以给TXVodPlayer播放
  • -[TXVodDownloadDelegate onDownloadError:errorMsg:] 下载错误,下载过程中遇到网络断开会回调此接口,同时下载任务停止。所有错误码请参考TXDownloadError。 由于downloader可以同时下载多个任务,所以回调接口里带上了TXVodDownloadMediaInfo对象,您可以访问url或dataSource判断下载源,同时还可以获取到下载进度、文件大小等信息。

下载错误码

枚举 说明
TXDownloadAuthFaild -5001 fileid鉴权失败
TXDownloadNoFile -5003 无此清晰度文件
TXDownloadFormatError -5004 格式不支持
TXDownloadDisconnet -5005 网络断开
TXDownloadHlsKeyError -5006 获取HLS解密key失败
TXDownloadPathError -5007 下载目录访问失败

中断下载

停止下载请调用-[TXVodDownloadManager stopDownload:]方法,参数为-[TXVodDownloadManager sartDownloadUrl:]返回的对象。SDK支持断点续传,当下载目录没有发生改变时,下次下载同一个文件时会从上次停止的地方重新开始。

如果您不需要重新下载,请调用-[TXVodDownloadManager deleteDownloadFile:]方法删除文件,以释放存储空间。

播放下载

收到-[TXVodDownloadDelegate onDownloadFinish:]后,参数TXVodDownloadMediaInfo中的playPath即本地播放文件地址,可直接给播放器播放。

高级使用

自定义清晰度

通过fileid下载可以选择需要的清晰度,设置TXVodDownloadDataSource的quality即可。quality的定义如下

typedef NS_ENUM(NSInteger, TXVodQuality) {
 ///原画
 TXVodQualityOD = 0,
 ///流畅
 TXVodQualityFLU,
 ///标清
 TXVodQualitySD,
 ///高清
 TXVodQualityHD,
 ///全高清
 TXVodQualityFHD,
 ///2K
 TXVodQuality2K,
 ///4K
 TXVodQuality4K,
};

其中,TXVodQualityOD从原始地址开始下载;其它都是从转码地址下载。

另一种下载清晰度的方式是通过templateName。模板名在点播后台可以看到(不清楚模板名,请向客服咨询)。

当templateName和quality同时存在时,将优先使用templateName;若不能找到对应的清晰度,则会寻找quality。如果都没有,抛出TXDownloadNoFile错误。建议两个选项都设置

校验HLS Key

下载过程中,SDK不会尝试去解码数据。如果您下载的文件是加密hls,这有必要校验key是否正确,否者下载下来的文件可能无法播放。

我们将校验交给用户,您需要实现下面回调方法

/**
 * 下载HLS,遇到加密的文件,将解密key给外部校验
 * @param mediaInfo 下载对象
 * @param url Url地址
 * @prarm data 服务器返回
 * @return 0 - 校验正确,继续下载;否则校验失败,抛出下载错误(dk获取失败)
 */
- (int)hlsKeyVerify:(TXVodDownloadMediaInfo *)mediaInfo url:(NSString *)url data:(NSData *)data;

若不实现,默认不校验。

HTTP Header

TXVodDownloadManager提供headers接口,设置自定义header在此添加。

常见问题

  • 支持断点下载吗?

支持断点下载,只要下载url或fileid没有改变。

  • 如何并发任务下载?

多次调用下载开始接口下载不同文件,内部会为每个下载任务开启一个线程。

  • 出现TXDownloadAuthFaild鉴权失败错误

查看log中getplayinfo关键字,看是否能在浏览器中打开。如果否,则是鉴权参数错误。 如果能返回数据,请在TXPlayeAuthBuilder打开https,部分系统会要求必须是http连接。

Clone this wiki locally

AltStyle によって変換されたページ (->オリジナル) /