尝试过iOS13.0和iOS13.1,但仍然无法正常工作,我尝试了AVAggregateAssetDownloadTask和AVAssetDownloadURLSession,但它们均无法正常工作。没有任何代表被叫来告诉我完成错误,我发现下载的缓存只有25Kb,大小不合适。
错误是:
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)}
发现AVAssetDownloadURLSession
只能将具有codec
属性的主播放列表结构的HLS下载到iOS 13+上的EXT-X-STREAM-INF
m3u8 meta中。
我不知道这是错误还是功能限制。(没有CODECS
属性的m3u8元可以用AVFoundation
播放,但不能用AVAssetDownloadURLSession
下载)
无论如何,解决方案是:
将CODECS
属性添加到m3u8 meta中的#EXT-X-STREAM-INF
中。例如
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=63701,CODECS="mp4a.40.34"
playlist.m3u8
即使您不支持自适应流,也必须制作一个主播放列表。主播放列表是唯一可以包含#EXT-X-STREAM-INF
和CODECS
属性的m3u8。