iPhone AVPlayer - 在后台执行代码

时间:2011-08-15 21:32:24

标签: iphone ios background avfoundation avplayer

我正在尝试使用AVPlayer流式传输远程mp3。

我已经设置了音频会话,并在后台添加了播放音频到我的info.plist文件。

我正在运行此代码:

self.timeObserver = [self->player addPeriodicTimeObserverForInterval:CMTimeMake(1, 1) queue:nil usingBlock:^(CMTime time) {
    [self updateControls];
}];

添加一个时间观察器,每秒调用一次updateControl。

事情是,当声音缓冲区很低时,播放器暂停,后台的代码停止,所以我必须再次手动在应用程序中播放。 (如果我暂停播放器,则此代码也不会运行)

我做错了吗?如何在后台运行一段代码而不会中断?

2 个答案:

答案 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,您就应该选择音频前端。

请参阅http://developer.apple.com/library/iOS/#documentation/Audio/Conceptual/AudioSessionProgrammingGuide/Configuration/Configuration.html