我想从服务器上流式传输一首歌,这似乎与我的做法很好,但这种方法似乎不可能做到一些事情。
我目前已经实例化了一个AVPlayer
player = [[AVPlayer alloc] initWithURL:[NSURL URLWithString:@"http://media.soundcloud.com/stream/songID?stream_token=myToken"]];
并在我的应用程序认为缓冲区足够时调用play。
这可以很好地播放声音,但我发现,如果我停止指向AVPlayer实例,播放器就会停止,如果我将应用程序推到后台,声音会逐渐消失并暂停,直到应用程序回到前台。
有可能让歌曲在AVPlayer的背景下继续播放吗?
如果没有,我应该看看HTTP实时流媒体吗?
我是iOS这方面的新手,我非常感谢我的同事们能给我的任何指导!
您应该明确启用应用程序在后台播放音频。在Info.plist文件中插入以下密钥:
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
(参考)
在开始播放音频之前,还要添加以下行:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:NULL];
(参考)
技术问答;A QA1668在iOS 上使用AV Foundation在后台播放媒体
Q: 当我的应用程序处于后台时,我如何确保我的媒体在使用AV Foundation时继续播放?
A: 您必须声明您的应用程序在后台播放音频内容,并为您的音频会话分配适当的类别。另请参阅视频媒体的特殊注意事项。
声明您的应用程序在后台中播放音频内容
首先,声明您的应用程序提供特定的后台服务,并且必须允许在后台继续运行。要做到这一点,请在应用程序的Info.plist文件中添加UIBackgroundModes键。它的值是一个数组,该数组包含一个或多个字符串,用于标识应用程序支持的后台任务。指定字符串值audio以指示应用程序在后台向用户播放音频内容:
图1声明应用程序在后台播放音频内容。
重要提示:UIBackgroundModes音频键还允许应用程序使用AirPlay在后台流式传输媒体内容(另请参阅视频媒体的特殊注意事项)。