Tom*_*out 5 http-live-streaming ios avplayer swift avassetdownloadtask
我正在尝试在播放 HLS 流时缓存它。我正在关注有关此的 Apple 文档(播放离线资源部分):
我已经实现了以下方法 - 这应该使我的 HLS 流在播放时下载:
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()
}
Run Code Online (Sandbox Code Playgroud)
问题是它只是不下载视频,只播放流。我还实现了代表,但他们都没有被调用:
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?)
Run Code Online (Sandbox Code Playgroud)
奇怪的是,我注意到下次打开应用程序时,会
assetDownloadURLSession.getAllTasks返回上次会话中下载的待处理任务。因此它不会下载流,但会将它们添加到待处理队列中。你知道这背后的理由是什么吗?我有一个理论,即正在下载的流和直播流使用不同的质量,因此确实需要以正确的质量重新下载。因此,我创建了一个 HLS 流来仅使用一种质量进行测试,但结果仍然相同。
如果我删除将 AVPlayerItem 分配给 AVPlayer 的行,下载就会开始,并且所有委托都会被调用。因此,下载会自行完成,但每当我尝试播放时,它就会停止。
感谢帮助!
托马斯
小智 0
iOS13 或更高版本上是否发生过这种情况? https://forums.developer.apple.com/thread/121097 如果是这样,我们可能遇到了同样的问题,而苹果只是没有给我们任何点击
| 归档时间: |
|
| 查看次数: |
1545 次 |
| 最近记录: |