首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >播放AVAssetDownloadTask时缓存HLS视频

播放AVAssetDownloadTask时缓存HLS视频
EN

Stack Overflow用户
提问于 2019-10-03 01:13:01
回答 2查看 816关注 0票数 4

我尝试在播放HLS流的同时缓存它。我遵循了Apple的文档(播放离线资源一节):

https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/MediaPlaybackGuide/Contents/Resources/en.lproj/HTTPLiveStreaming/HTTPLiveStreaming.html#//apple_ref/doc/uid/TP40016757-CH11-SW1

我已经实现了下面的方法-这应该会让我的HLS流在播放时下载:

代码语言:javascript
复制
func downloadAndPlayAsset(_ asset: AVURLAsset) {
    // Create new AVAssetDownloadTask for the desired asset
    // Passing a nil options value indicates the highest available bitrate should be downloaded
    let downloadTask = downloadSession.makeAssetDownloadTask(asset: asset,
                                                             assetTitle: assetTitle,
                                                             assetArtworkData: nil,
                                                             options: nil)!
    // Start task
    downloadTask.resume()

    // Create standard playback items and begin playback
    let playerItem = AVPlayerItem(asset: downloadTask.urlAsset)
    player = AVPlayer(playerItem: playerItem)
    player.play()
}

问题是它不会下载视频,只会播放视频。我也实现了委托,但它们都不会被调用:

代码语言:javascript
复制
func urlSession(_ session: URLSession, assetDownloadTask: AVAssetDownloadTask, didLoad timeRange: CMTimeRange, totalTimeRangesLoaded loadedTimeRanges: [NSValue], timeRangeExpectedToLoad: CMTimeRange)

func urlSession(_ session: URLSession, assetDownloadTask: AVAssetDownloadTask, didFinishDownloadingTo location: URL)

func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?)

相当奇怪的是,我注意到下一次打开应用程序时,assetDownloadURLSession.getAllTasks会返回上一次会话中我下载的待定任务。因此,它不会下载流,但会将它们添加到挂起队列中。你知道这背后的理由是什么吗?我有一个理论,正在下载的流和实况流使用不同的质量,所以它确实需要以正确的质量重新下载。所以我创建了一个HLS流用于测试,只有一种质量,但结果仍然是一样的。

如果我删除了将AVPlayerItem分配给AVPlayer的代码行,下载就开始了,所有的委托都会被调用。因此,下载它自己的工作,但任何时候我试图播放它只是停止。

感谢您的帮助!

托马斯

EN

回答 2

Stack Overflow用户

发布于 2021-02-01 07:45:24

我有一个理论,正在下载的流和直播流使用不同的质量,所以它确实需要以正确的质量重新下载。

你的理论是正确的。

所以下载它自己的工作,但任何时候我试图播放它只是停止。

下载将被推迟,直到AVPlayerItem终止。尝试调用player.replaceCurrentItem(nil)

票数 1
EN

Stack Overflow用户

发布于 2019-10-04 16:08:31

这是在iOS13或更新版本上发生的吗?如果是这样的话,我们可能会遇到同样的问题,而苹果只是没有给我们任何成功

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

https://stackoverflow.com/questions/58206226

复制
相关文章

相似问题

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