AVQueuePlayer在后台播放多个音轨iOS5
我使用 AVQueuePlayer 在后台播放多个项目。并且代码在 iOS4 中完美运行。在 iOS5 中,AVQueuePlayer 更改了其行为,因此播放器在第一个项目结束后停止播放。
Matt Gallagher 在这篇帖子中写了一个提示。 “从 iOS 5 开始,AVQueuePlayer 似乎不再预缓冲。它确实在 iOS 4 中预缓冲了下一个曲目。”
所以我的问题是如何在 iOS5 中使用 AVPlayer 或 AVQueuePlayer 在后台播放多个项目。
I used AVQueuePlayer to play several items in background. And code worked perfect in iOS4. And in iOS5 AVQueuePlayer changed its behavior, so player stops playing after first item is ended.
Matt Gallagher wrote a hint in this post. "As of iOS 5, it appears that AVQueuePlayer no longer pre-buffers. It did pre-buffer the next track in iOS 4."
So my question is how to play several items in background using AVPlayer or AVQueuePlayer in iOS5.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
马特·加拉格尔 (Matt Gallagher) 在他的博客中的回答:
“您必须观察 AVQueuePlayer 中的当前项目。当它发生更改时,您必须使用 UIApplication 启动后台任务,并且只有在收到下一个文件准备播放通知时才结束后台任务。”
事实上,这对我没有帮助。
所以我的解决方案是:
我无法解释为什么,但是在添加新的 AVPlayerItem 之前放置的这行代码使我的代码起作用。
对于那些在后台添加下一曲目并使用方法的人,
您必须将 AVPlayerItem 添加到主线程上的播放器。
像这样:
更新:
Matt Gallagher 是对的,但只有在不使用异步加载时它才有效。
Matt Gallagher's answer in his blog:
"You must observe the current item in the AVQueuePlayer. When it changes, you must use UIApplication to start a backgroundTask and only end the background task when you receive a ready to play notification for the next file."
Actually, this did not helped me.
So my solution is:
I can't explain why, but this line of code put before adding new AVPlayerItem made my code work.
Also for those one who adds next track in background and uses method
You must add AVPlayerItem to player on the main thread.
like this:
UPDATE:
Matt Gallagher was right, but it works only if you do not use asynchronous loading.