【问题标题】:AVQueuePlayer playing several audio tracks in background iOS5AVQueuePlayer 在 iOS5 后台播放多个音轨
【发布时间】:2011-11-20 12:28:39
【问题描述】:

我使用 AVQueuePlayer 在后台播放多个项目。并且代码在 iOS4 中运行完美。而在 iOS5 中,AVQueuePlayer 改变了它的行为,所以播放器在第一个项目结束后停止播放。

Matt Gallagher 在post 中写了一个提示。 “从 iOS 5 开始,AVQueuePlayer 似乎不再预缓冲。它确实预缓冲了 iOS 4 中的下一个曲目。”

所以我的问题是如何在 iOS5 中使用 AVPlayer 或 AVQueuePlayer 在后台播放多个项目。

【问题讨论】:

    标签: objective-c ios5 avfoundation avplayer avqueueplayer


    【解决方案1】:

    Matt Gallagher 在他的blog 中的回答: “您必须观察 AVQueuePlayer 中的当前项。当它发生变化时,您必须使用 UIApplication 启动一个 backgroundTask,并且只有在收到下一个文件的准备播放通知时才结束后台任务。”

    实际上,这对我没有帮助。

    所以我的解决方案是:

    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    

    我无法解释原因,但是在添加新的 AVPlayerItem 之前放置的这行代码使我的代码正常工作。 也适用于那些在后台添加下一首曲目并使用方法的人

    - (void)loadValuesAsynchronouslyForKeys:(NSArray *)keys completionHandler:(void (^)(void))handler;
    

    您必须在主线程上将 AVPlayerItem 添加到播放器。 像这样:

    - (void)addAsset:(AVAsset*)as
    {
        [player insertItem:[AVPlayerItem playerItemWithAsset:as] afterItem:[player currentItem]];
    }
    
    .........
    
    //adding new track 
    
    AVURLAsset* as = [[self createAsset:urlString] retain];
    NSArray *keys = [NSArray arrayWithObject:@"tracks"];
    [as loadValuesAsynchronouslyForKeys:keys completionHandler:^(void) {
    NSError *error = 
    AVKeyValueStatus trackStatus = [as statusOfValueForKey:@"tracks" error:&error];
    switch (trackStatus) {
        case AVKeyValueStatusLoaded:
                [self performSelectorOnMainThread:@selector(addAsset:) withObject:as waitUntilDone:YES];
                [as release];
        break;
        case AVKeyValueStatusFailed:
                [as release];
        break;
        case AVKeyValueStatusCancelled:
                [as release];
        break;
        default:
        break;
        }
    
    }];
    

    更新: Matt Gallagher 是对的,但它只有在您不使用异步加载时才有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多