gpt4 book ai didi

ios - AVQueuePlayer 无法播放本地 MP3 文件

转载 作者:行者123 更新时间:2023-11-29 12:38:05 24 4
gpt4 key购买 nike

我目前正在编写一个 iOS 应用程序,允许用户从 soundcloud 流式传输音乐。目前,我可以从 Soundcloud 流式传输,处于展台前列和后台应用程序状态。当我下载 MP3 文件并尝试播放它并在应用程序处于后台时连续播放时遇到问题,更具体地说是在锁定屏幕或屏幕关闭时。

当我播放下载的文件并锁定屏幕时,音频会继续播放一段时间。通常播放 2 -3 分钟。之后播放将停止,播放列表中任何其他下载的 mp3 文件将不会播放,直到用户返回到应用程序。如果用户有互联网连接,播放列表中未下载的项目将完美播放,无论下载的项目之前是否无法播放。

有时我会收到以下错误:

AVPlayerItemStatusFailed: Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not becompleted" UserInfo=0x170270500 {NSUnderlyingError=0x170059380 "The operation couldn’t be completed. Operation not permitted", NSLocalizedFailureReason=An unknown error occurred (1), NSLocalizedDescription=The operation could not be completed}

我还会从 AVPlayerItem 收到以下通知

Notification: NSConcreteNotification 0x1700538c0 {name = AVPlayerItemDidPlayToEndTimeNotification; object = AVPlayerItem: 0x178009300, asset = AVURLAsset: 0x17822aaa0, URL = file:///var/mobile/Applications/51118E74-3334-4EFC-B148-B485DE675F9E/Documents/Downloads/SC_165903784.mp3}

当正在播放的第一个项目停止播放时,会收到此通知。当它没有完成播放到其持续时间结束时,我收到此通知是没有意义的。

我的猜测是因为该应用程序处于后台模式,所以读取文件的时间有限,但我对此表示怀疑。

我正在使用以下内容从本地文件创建 AVPlayerItem。

NSURL* url = [NSURL fileURLWithPath:song.downloadFilePath];
[AVPlayerItem playerItemWithURL:url];

我曾尝试构建自己的 AVQueuePlayer 并使用 iOS Hysteria Player,但这两个实例都给了我同样的离线下载播放错误。

非常感谢任何见解或解决方案。

谢谢!

最佳答案

您正在播放 Documents 目录中的文件吗? (或者除了应用程序包之外的任何地方?)

如果是这样,请务必将文件保存到使用的目录[fileToSave writeToFile:filePath options:NSDataWritingFileProtectionNone error:nil];.

NSDataWritingFileProtectionNone 是关键位!发生了什么,至少在我的情况下,是这样的:iOS 正在努力确保安全,因此默认情况下对您添加到 Documents 目录(以及其他非应用程序包目录)的文件启用文件保护, 我相信)。通过添加 NSDataWritingFileProtectionNone,您请求系统不再对您的文件启用此保护。

来自 Apple's iOS Documentation :

If you protect a file, your app must be prepared to lose access to that file. When complete file protection is enabled, your app loses the ability to read and write the file’s contents when the user locks the device.

现在,当我读到这篇文章时,我几乎可以肯定这就是我的应用在设备锁定后无法继续播放的原因。为了安全起见,iOS 似乎默认自动将文件置于保护之下……但这会阻止一切,包括您的应用程序,在设备锁定时无法访问它。我的错误是,一旦设备被锁定,它只能播放歌曲的一部分,这是有道理的……因为它对实际歌曲文件的访问被撤销,它只能播放已经被锁定的歌曲部分缓冲到 RAM 中!

这是解决了一个月之久的问题,我一直在努力解决这个问题。我真诚地希望它也能解决您的问题。

关于ios - AVQueuePlayer 无法播放本地 MP3 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25716613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com