问题标签 [avassetdownloadtask]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
427 浏览

ios - NSURLSessions 和 HLS 视频缓存 - 部分下载无法删除

我正在尝试在用户观看 HLS 视频流(非实时)时对其进行缓存。为此,我们设置了一个类似于苹果在此处推荐的 AvAssetDownloadTask:

https://developer.apple.com/library/content/documentation/AudioVideo/Conceptual/MediaPlaybackGuide/Contents/Resources/en.lproj/HTTPLiveStreaming/HTTPLiveStreaming.html

这种方法效果很好,因为我们可以将下载任务中的 url 资产传递给同时下载和流式传输。

我们希望将此下载临时缓存到应用程序的视频下载部分,这几乎可以在 NSUrlSessionTask 委托中本地工作,除非我们要删除部分数据。

如果下载完成,我们会收到最终下载位置,并且可以添加过期时间或稍后手动删除文件。但是,如果下载仅部分完成,我无法找到删除部分下载视频的方法。

我希望取消任务并使任务无效可以清理部分下载,但似乎并非如此,上面的链接中还有更多苹果状态: In the case where a download is canceled, and there is no intention of resuming it, your app is responsible for deleting the portion of the asset already downloaded to a user’s device.

但是,没有任何关于如何实现这一点的建议。删除此部分下载似乎应该很容易访问,但尚未找到实现此目的的方法。

手动迭代视频下载目录似乎也不显示这些部分下载;但它们在我们的应用程序设置的主要 iOS 设置的“下载的视频”部分中可见。

想知道是否其他人已经解决了这个问题或有如何完成的建议。

0 投票
2 回答
1667 浏览

avfoundation - 是什么导致 AVAssetCache 报告完全下载的资产无法离线播放?

我正在开发一个 iOS 应用程序,它通过 HLS 播放 FairPlay 加密的音频,并支持下载和流式传输。而且在飞行模式下我无法播放下载的内容。AVURLAsset如果我在下载完成时从本地 URL创建一个,asset.assetCache.isPlayableOffline返回NO,当我尝试以飞行模式播放时,它仍然会尝试请求 .m3u8 播放列表文件之一。

我的主播放列表如下所示:

流播放列表如下所示:

下载资产:

在代表的URLSession:assetDownloadTask:didFinishDownloadingToURL:

在代表的URLSession:task:didCompleteWithError:

除了资产缓存报告无法离线播放外,下载不会出错。但是,如果您切换到飞行模式并尝试播放下载的资产,它会正确地向资源加载器委托请求一个密钥(我使用的是持久密钥,因此离线工作正常),然后尝试发出请求media-1/stream.m3u8.

有什么我没有在这里处理的问题吗?播放列表文件应该以某种方式有所不同吗?我缺少的任务或资产是否有一些财产?

0 投票
0 回答
991 浏览

ios - 使用 AVAssetDownloadTask 下载让我在 URLSession 上出错 - iOS 10.x

我正在关注 Apple Media Playback Programming Guide示例。

以下代码适用于 iOS 11,但在 iOS 10 上崩溃。

我将下载设置如下:

并在这里失败:

我收到以下错误:

有人可以指点我如何解决这个问题吗?

注意:我读过一些关于使用fileURLWithPath而不是string编写的东西URL,但根本没有用。

与 NSAppTransportSecurity 无关。

0 投票
1 回答
591 浏览

ios - is it possible to "Pause" and "Resume" AVAssetDownloadTask?

so far i found only two options for downloading video either "Resume" or "cancel"/"Suspend". is there any possible way to pause downloading video in middle and resume the download from where it stopped. I am using below code to download and store the video.

0 投票
2 回答
370 浏览

ios - 使用 AVAssetDownloadDelegate 检测用户取消下载的正确方法

希望有人有一些煽动,我们已经尝试在苹果论坛上发帖,但他们没有帮助。试图找到正确的方法来检测用户取消下载/使用 Swift 中的 AVAssetDownloadDelegate 从 AVAssetDownloadTask 对象中提取错误代码。我们尝试使用以下方法:

但两者都出现在 Crashlytics 中,并带有崩溃日志:

0 投票
0 回答
220 浏览

ios - 同时下载多个 HLS 音频文件失败

我一直在尝试在 iOS 中将多个 HLS 音频文件放在一起。文件使用密钥加密。我需要获取密钥并将其存储在本地以供离线使用。当我同时下载少量(2 或 3 个文件)文件时,它工作正常,但如果我同时开始下载 10-15 个文件,其中大多数文件都会失败并显示错误消息 -

错误域=AVFoundationErrorDomain Code=-11800 "操作无法完成" UserInfo={NSLocalizedFailureReason=发生未知错误 (-17377), NSLocalizedDescription=操作无法完成}

我也收到了错误消息,NSURLErrorDomain但它们很少见。我用来获取离线使用密钥的方法的链接如下 -

使用 AES-128 加密 iOS 播放离线 HLS

任何帮助,将不胜感激。

类音频下载器 {

0 投票
1 回答
418 浏览

avfoundation - 更新 iOS 12.2 后在 AVPlayer 中播放下载的 HLS 流的问题

我遇到了一个奇怪的问题。Apple 发布 iOS 12.2 后,AVPlayer 没有正确播放保存的 HLS 流。

他在 4-7 分钟后停止在离线模式下播放视频并进入缓冲。Player 没有调用任何观察者,有时仅调用 AVPlayerItemPlaybackStalled。然后,如果我替换 AVPlayerItem 并从保存的位置开始播放视频将正确播放 4-7 分钟并再次停止。如果我将应用程序转到后台 10 分钟,视频将再次播放。如果我将重新启动手机,所有保存的视频都将成功播放。但是所有新视频都会出现同样的问题。谁能帮我解决这个奇怪的事情或告诉我看哪个方向?

这个问题我只有在 iOS 12.2 和更新版本上才有。所有以前的版本都能正确播放离线 HLS。

0 投票
1 回答
621 浏览

ios - Swift - 恢复挂起的 M3U8 下载不起作用

我正在创建一个在 iOS 中下载 M3u8 文件的函数。我可以下载 M3u8,但我希望能够在应用程序暂停或退出时恢复挂起的下载。以下是我使用的主要文档,但我无法让恢复功能按预期工作。

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

以下是我用来下载 M3U8 的内容:

以下是恢复挂起功能:

有人建议使用下面的功能,但这只是将下载重置为开始。

更新

我找到了暂停恢复功能的解决方案,但没有找到应用程序退出时如何恢复的解决方案。

我添加了这个函数,它在暂停时存储目标 URL,可以在恢复挂起函数中使用。

在下载资产功能中,我更改了以下行:

至:

我认为设置最低要求是导致问题的原因。

退出应用程序时如何恢复挂起下载的任何帮助或指导都会令人惊叹。谢谢

0 投票
2 回答
1402 浏览

ios - AVAssetDownloadTask iOS13

尝试了 iOS13.0 和 iOS13.1 仍然无法正常工作,我尝试了 AVAggregateAssetDownloadTask 和 AVAssetDownloadURLSession 但它们都没有工作。没有调用任何代表告诉我完成错误,我发现下载的缓存只有 25Kb,大小不合适。

错误是:

0 投票
2 回答
881 浏览

ios - 使用 AVAssetDownloadTask 播放时缓存 HLS 视频

我正在尝试在播放 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 流在播放时下载:

问题是它只是不下载视频,只播放流。我也实现了代表,但是没有一个被调用:

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

如果我删除将 AVPlayerItem 分配给 AVPlayer 的行,则下载开始并调用所有代表。所以下载自己的作品,但任何时候我尝试播放它都会停止。

感谢帮助!

托马斯