我正在尝试使用AVPlayer流式传输远程mp3。
我已经设置了音频会话,并在后台添加了播放音频到我的info.plist文件。
我正在运行此代码:
self.timeObserver = [self->player addPeriodicTimeObserverForInterval:CMTimeMake(1, 1) queue:nil usingBlock:^(CMTime time) {
[self updateControls];
}];
添加一个时间观察器,每秒调用一次updateControl。
事情是,当声音缓冲区很低时,播放器暂停,后台的代码停止,所以我必须再次手动在应用程序中播放。 (如果我暂停播放器,则此代码也不会运行)
我做错了吗?如何在后台运行一段代码而不会中断?
答案 0 :(得分:0)
您需要将您的背景代码包裹起来:
__block UIBackgroundTaskIdentifier bgTask = nil;
bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(void) {
[[UIApplication sharedApplication] endBackgroundTask: bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
//Your bg code here
[[UIApplication sharedApplication] endBackgroundTask: bgTask];
bgTask = UIBackgroundTaskInvalid;
答案 1 :(得分:0)
您无法无限期地在后台运行任意代码。您可以保持音频播放,但如果您不是最前面的应用程序,则不应期望更新UI。您可以在应用移回前台时更新用户界面。
只要您正确设置AVAudioSession并使其处于活动状态,并且设置了UIBackgroundModes,您就应该选择音频前端。