【发布时间】:2014-11-01 05:18:54
【问题描述】:
我目前正在编写一个允许用户从 soundcloud 流式传输音乐的 iOS 应用程序。目前,我可以在展台前沿和后台应用程序状态从 Soundcloud 进行流式传输。当我下载 MP3 文件并尝试播放它并在应用程序在后台持续播放时遇到问题,更具体地说是在锁定屏幕或屏幕关闭时。
当我播放下载的文件并锁定屏幕时,音频会继续播放一段时间。通常它会播放 2 -3 分钟。之后播放将停止,并且播放列表中任何其他下载的 mp3 文件将不会播放,直到用户返回应用程序。如果用户有互联网连接,播放列表中未下载的项目将完美播放,无论之前下载的项目是否无法播放。
有时我会收到以下错误:
AVPlayerItemStatusFailed: Error Domain=AVFoundationErrorDomain Code=-11800 "操作无法完成" UserInfo=0x170270500 {NSUnderlyingError=0x170059380 "操作无法完成。操作不允许", NSLocalizedFailureReason=发生未知错误 (1) , NSLocalizedDescription=操作无法完成}
我还会从 AVPlayerItem 收到以下通知
通知:NSConcreteNotification 0x1700538c0 {name = AVPlayerItemDidPlayToEndTimeNotification;对象 = AVPlayerItem:0x178009300,资产 = 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,但是这两个实例都给我带来了离线下载播放的相同错误。
非常感谢任何见解或解决方案。
谢谢!
【问题讨论】:
-
我也有同样的问题……这不好。 ://
-
@jacob-pritchett 看起来我们可能不得不使用 AVAudioPlayer 来播放本地内容。现在我决定从我的应用程序中移除本地播放功能并继续使用 AVQueuePlayer。
标签: ios audio avplayer avqueueplayer avurlasset