首页 文章

iPhone AVPlayer - 在后台执行代码

提问于
浏览
0

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

我已经设置了音频会话,并将播放音频背景添加到我的info.plist文件中 .

我正在运行此代码:

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

添加一个时间观察器,每秒调用updateControls .

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

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

2 回答

  • 0

    您无法无限期地在后台运行任意代码 . 您可以保持音频播放,但如果您不是最前面的应用程序,则不应期望更新UI . 当您的应用程序移回前台时,您可以更新UI .

    只要您正确设置AVAudioSession并使其处于活动状态,并且设置了UIBackgroundModes,您就应该选择音频前端 .

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

  • 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;
    

相关问题