首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVAssetDownloadTask iOS13

AVAssetDownloadTask iOS13
EN

Stack Overflow用户
提问于 2019-10-01 17:44:37
回答 2查看 1.3K关注 0票数 3

我尝试了iOS13.0和iOS13.1,但仍然不起作用,我尝试了AVAggregateAssetDownloadTask和AVAssetDownloadURLSession,但它们都不起作用。没有任何代理被调用来告诉我finish的错误,我发现下载的缓存只有25Kb,大小不正确。

错误是:

代码语言:javascript
复制
Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSLocalizedDescription=The operation could not be completed, _NSURLErrorFailingURLSessionTaskErrorKey=BackgroundAVAssetDownloadTask <AFDCA3CC-FA49-488B-AB16-C74425345EE4>.<1>, _NSURLErrorRelatedURLSessionTaskErrorKey=(

    "BackgroundAVAssetDownloadTask <AFDCA3CC-FA49-488B-AB16-C74425345EE4>.<1>"

), NSLocalizedFailureReason=An unknown error occurred (-16654)}
EN

回答 2

Stack Overflow用户

发布于 2019-10-22 20:40:06

发现AVAssetDownloadURLSession只能将包含codec属性的主播放列表结构的HLS下载到iOS 13+上的EXT-X-STREAM-INF m3u8 meta中。

我不知道这是bug还是函数限制。(没有CODECS属性的m3u8 meta可以用AVFoundation播放,但不能用AVAssetDownloadURLSession下载)

无论如何,解决方案是:

如果您有HLS主播放列表:

CODECS属性添加到m3u8 meta中的#EXT-X-STREAM-INF中。例如:

代码语言:javascript
复制
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=63701,CODECS="mp4a.40.34"
playlist.m3u8

如果你还没有HLS主播放列表:

即使你不支持自适应流媒体,你也必须创建一个主播放列表。

主播放列表是唯一可以包含#EXT-X-STREAM-INF的m3u8,因此是CODECS属性。

票数 2
EN

Stack Overflow用户

发布于 2020-04-20 16:58:19

所以,我发现'AVAssetDownloadTask‘在调用iOS 13 (13.1,13.2.13.3)中的委托时出现了一些错误。最后,在iOS 13.4.1中,苹果修复了这个错误,现在代理在设置委托并启动任务后调用。下面是我用来从服务器下载m3u8文件并将其保存为资源以便稍后脱机播放的内容。

代码语言:javascript
复制
func downloadVideo(_ url: URL) {
    let configuration = URLSessionConfiguration.background(withIdentifier: currentFileName)

    let downloadSession = AVAssetDownloadURLSession(configuration: configuration,
                                                    assetDownloadDelegate: self,
                              delegateQueue: OperationQueue.main)
    // HLS Asset URL
    let asset = AVURLAsset(url: url)

    // Create new AVAssetDownloadTask for the desired asset
    let downloadTask = downloadSession.makeAssetDownloadTask(asset: asset,
                                                             assetTitle: currentFileName,
                                                             assetArtworkData: nil,
                                                             options: nil)
    // Start task and begin download
    downloadTask?.resume()
}

我在iOS 12和iOS 13.4.1上尝试了一下,它和预期的一样工作。而且,它已经出现在苹果开发者论坛here上了。希望这对某些人有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58182120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档