问题标签 [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 投票
3 回答
1541 浏览

nsurlsession - 下载前获取 AVAssetDownloadTask 的大小

我目前正在使用 FairPlay 流实现离线流。因此,我正在使用AVAssetDownloadTask.

我想向用户反馈开始下载的大小:

您确定要下载此流吗?下载需要 2.4GB,您目前还有 14GB 空间

我已经检查过类似的属性countOfBytesReceivedcountOfBytesExpectedToReceive但这些不会返回正确的值。

打印大小为 2464,最后大小为 3GB。

在下载过程中,我记录了上面的属性:

但这些保持为零:

已下载 0.0/0.0 MB

0 投票
4 回答
7534 浏览

ios - 下载和播放离线 HLS 内容 - iOS 10

自 iOS 10 起,Apple 提供了下载 HLS (m3u8) 视频以供离线观看的支持。

我的问题是:有必要只能在播放时下载 HLS 吗?或者我们可以在用户按下下载按钮并显示进度时下载。

有没有人在 Objective C 版本中实现了这个?实际上,我以前的应用程序是用 Objective C 制作的。现在我想添加对下载 HLS 而不是 MP4 的支持(以前我下载 MP4 以供离线查看)。

我真的很绝望。如果实施,请分享想法或任何代码。

0 投票
0 回答
257 浏览

ios - 向下转换到 AVAssetDownloadURLSession 失败

我正在创建一个AVAssetDownloadURLSession

这是我的代码:

现在,如果我打印出来avSession,它会说它是一个__NSURLBackgroundSession,而不是一个AVAssetDownloadURLSession。如果我分配avSession给另一个变量(在本例中为 Any),然后稍后再向下转换,它会失败。

这是一个真正的问题,因为我确实需要这样做。为什么我不能在不失败的情况下沮丧呢?如果我检查 的内存地址avSession,然后在调试器中检查任何一个,它们都具有相同的地址。但它最肯定(根据调试器和运行时本身)不是AVAssetDownloadURLSession.

感谢您对此的任何帮助。

0 投票
1 回答
1654 浏览

ios - 离线 Fairplay AVAssetDownloadTask 在下载时收到未知错误回调(仅在 iOS 10.2 上发生)

我们正在为我们的客户端应用程序构建离线公平竞赛内容;我们通过引用 HLSatalog 演示应用程序中的 Apple 示例下载管理器 AssetPersistenceManager 类来实现该功能。我想在这里强调的 AssetPersistenceManager 类中有一个函数和两个回调,它是

并在完成下载流时回调

最后是 didCompleteWithError 回调

在 iOS < 10.2 上一切似乎都正常,但是在运行最新 iOS 10.2 的某些设备上进行测试后,应用程序总是回调到 didFinishDownloadTo 委托,而只有 13-15% 完成百分比,之后调用 didCompleteWithError 并且我们收到以下错误

检查代理调试应用程序,它指出应用程序在整个接收响应之前关闭了连接。

只有 iOS 10.2 有这个错误,在低于该版本的其他操作系统上测试的相同流仍然可以正常工作。试图找到一些关于这部分的 iOS 10.2 更新日志,但我什么也没找到?你们有什么建议吗?

0 投票
3 回答
2618 浏览

ios - dyld 未找到 AVAssetDownladTask

尝试将离线 HLS(ios 10 的一项新功能)添加到应用程序。我正在快速尝试以下操作,以使该应用程序在没有离线 HLS 功能的情况下仍然可以在 ios 9 上运行。在 ios10 上工作正常,也可以为 ios9 编译。

但是,当我在 ios 9 设备上实际运行它时,应用程序立即崩溃并显示以下消息:

dyld:找不到符号:_OBJC_CLASS_$_AVAssetDownloadTask 引用自:/var/mobile/Containers/Bundle/Application/7062C410-C4F5-4270-9F1E-22750E99F799/wod.app/wod 预期在:/System/Library/Frameworks/AVFoundation。 /var/mobile/Containers/Bundle/Application/7062C410-C4F5-4270-9F1E-22750E99F799/wod.app/wod 中的框架/AVFoundation

我已经将与此相关的所有代码都限制在 DownloadManager 类中,所以我不知道下一步该做什么。谢谢!

0 投票
1 回答
90 浏览

ios - 资产标题中的正斜杠导致错误

在测试(在真实设备上) AVAssetDownloadURLSession 时,我注意到当我将斜杠“/”放入assetTitle 时,我收到错误:

示例代码:

来自 Apple 的文档(https://developer.apple.com/documentation/avfoundation/avassetdownloadurlsession/1650938-assetdownloadtaskwithurlasset):

我认为上面的例子是人类可读的。我是否需要将斜杠视为特殊字符并以某种方式对其进行转义以正确分配它?

0 投票
0 回答
704 浏览

ios - AVAssetDownloadTask 无法在 IOS 10.3 设备上启动

我实际上是在应用程序中实现下载功能。我面临着一个非常奇怪的 AVAssetDownloadTask 错误。

实际上,在一天开始时,下载资产的实现是有效的。

当我resume在我AssetDownloadTask的新创建的函数上调用该函数时,下载立即开始并且该AVAssetDownloadDelegate函数

func urlSession(
       _会话:URLSession,
       assetDownloadTask:AVAssetDownloadTask,
       didLoad timeRange:CMTimeRange,
       totalTimeRangesLoadedloadedTimeRanges:[NSValue],
       timeRangeExpectedToLoad:CMTimeRange

被调用并显示活动下载任务的进度。

但是在一天中的某一时刻,该过程停止了工作。现在,当我尝试启动/恢复时,AssetDownloadTask什么也没有发生。AVAssetDownloadDelegate下载进程不会调用任何函数。就像什么都没有发生一样。我什至没有收到错误。

奇怪的是,如果我取消了AssetDownloadTask这个

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

func urlSession(
       _会话:URLSession,
      任务:URLSessionTask,
      didCompleteWithError错误:错误?

正确地调用表明该过程似乎以某种方式暂停。

在 IOS 11 上运行的设备上,我似乎没有任何这些问题。

我想知道你们中是否有人有一个想法可以解释为什么我AssetDownloadTask无法在 IOS 10.3 设备上启动/恢复。

您将在下面找到我的下载管理器的几个部分。

提前感谢您为我提供的任何帮助以尝试解决此问题。无法确定它是否来自设备/代码/操作系统版本

此致,

马丁

0 投票
1 回答
438 浏览

ios - 如何防止 iOS 自动删除为离线播放而保存的 HLS 内容?

HLS 离线播放是在 WWDC 2016 的这次会议上宣布的,在 iOS 10 中。但是在大约 21:20 标记时,演示者正在谈论如何不应该将下载的文件从AVAssetDownloadTask放置它们的位置移动,因为系统可能需要如果磁盘空间不足,请删除它们。文档中也提到了这种可能性:

重要的

如果可用磁盘空间极低,操作系统可能会自动删除下载的资产。在您向用户展示资产可用于播放之前,请验证该资产是否存在并且可以离线播放。

我正在构建一个应用程序来使用 HLS 播放 DRM 的音频内容,并且我希望同时支持流式传输和下载,以便用户可以保存他们想要的文件以供离线播放。但是,如果下载的文件在未经用户许可的情况下被删除,那将是一种糟糕的体验。

所以我的问题是:如何防止系统删除下载的文件?即使文档明确表示不要移动它们,我可以移动它们吗?有没有其他方法可以下载文件?iOS 11 中有一个新类AVAssetDownloadStorageManager,支持将存储管理策略设置为默认或重要...是否可以保证系统不会在不至少先询问用户的情况下删除“重要”下载的媒体?Roger Pantos在 WWDC 2017 的 HTTP 实时流媒体进展中表示,系统可能会在询问用户后删除资产以为软件更新腾出空间,但该声明并不意味着资产不会因为其他原因而自动删除。

0 投票
1 回答
1033 浏览

ios - 如何使用 AVAssetDownloadTask 下载尚未流式传输的 FairPlay 加密的 AVURLAsset 实例?

我正在尝试使用AVAssetDownloadTask离线下载和播放 FairPlay 加密的音频内容。我不断收到这样的错误urlSession:task:didCompleteWithError:

Error Domain=AVFoundationErrorDomain Code=-11863 "Operation Stopped" UserInfo={NSLocalizedFailureReason=此内容不再可用。, NSLocalizedDescription=Operation Stopped}

我的流程是:

所有这些都有效,并且以与 Apple 的HLSCatalog 示例代码相同的方式完成。但是下载仍然会给我上述错误,即使将相同的播放列表和关键 URL 插入示例代码可以正常下载。

我最终发现的是,它AVAssetDownloadTask只会下载一个已经流式传输并给出其解密密钥(通过)且与播放器无关的AVURLAsset 实例。AVAssetResourceLoaderDelegate我不能只AVURLAsset使用与已经播放的 URL 相同的 URL 制作新的并下载它。所以看来,为了下载任意 FairPlay 内容,我必须:

  • 做一个AVURLAsset
  • 制作一个AVPlayer并将其音量设置为0
  • 给它资产并播放它
  • 等到它从资源加载器请求它的密钥并开始播放
  • 将其交给下载任务并将其与播放器解除关联

但这似乎很可怕。这不可能是真的。

所以,我的问题是:我如何下载一个 FairPlay 加密的 AVURLAsset 而之前没有流式传输它的特定实例?

0 投票
0 回答
231 浏览

fairplay - AVAssetDownloadTask 的下载性能

AVAssetDownloadTask用来下载一些 FairPlay 加密的音频。根据指南,音频被分成小块,以允许在流式传输期间在比特率之间切换。我们的块每个大约 6 秒,这意味着小于 100 kb。

这个过程的下载速度非常糟糕。我看到的速度在 85 KB/s 和 250 KB/s 之间。这是一个连接,当我下载一个新的 Xcode 测试版时,我每秒获得几兆字节。

我猜测速度慢是由于必须为每个段单独请求,这是很大的开销。我尝试使用Charles检查下载流量,即使它显示每个下载任务一个 HTTPS 连接,请求正文大小在下载的整个生命周期内不断向上滴答。我尝试从音频文件所在的同一台服务器下载一个 100MB 的测试文件,它以每秒几兆字节的速度下降。

我的问题:使用 获得良好下载性能的最佳实践是什么AVAssetDownloadTask?细分应该更大吗?是否应该有一个单独的文件是一大块供下载?还是这种行为很奇怪,表明我配置错误?