0

设想:

应用程序用于从广播电台流式传输音乐。我为此使用 AVPlayer。App 可以在后台播放音乐(Required background modes在 plist 中),App 可以从锁定屏幕接收播放/暂停动作(使用 usingAVAudioSessionDelegateremoteControlReceivedWithEvent方法)。这部分没问题。

问题

用户启动应用程序。加载第一个屏幕时,用户点击“播放”按钮。现在,在我的代码中,AVPlayer 已初始化,一旦此任务准备就绪,它就开始播放音乐。但即使在快速 Wi-Fi 上,此任务也会持续大约 3 到 5 秒。

当然,在这 3-5 秒内,用户可以点击主页按钮,应用程序将进入后台,AVPlayer 永远不会开始播放音频。

我该如何处理?我试图跑[avplayer play]进去,dispatch_async但没有帮助。我还尝试在 AppDelegate 中初始化 AVPlayer,现在音频加载速度更快,但用户仍然可以更快......解决这个问题的方法是什么?

更新 - 初始化播放器的代码

在头文件(MainViewController)中://MyPlayer 是 AVPlayer 的子类

@property (nonatomic, strong) MyPlayer *playerBrain;

实现文件:

//lazy instantiation
- (MyPlayer*)playerBrain
{
    if (_playerBrain == nil) _playerBrain = [[MyPlayer alloc] initWithURL:[NSURL URLWithString:@"correct_URL_To_MP3_File"]];
    return _playerBrain;
}

- (IBAction)onOffSwitch:(UISwitch *)sender
{
    if (sender.isOn)
    {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
            NSLog(@"inside block!");
            [self.playerBrain playRadio];
        });
    }
    else
    {
        [self.playerBrain pause];
    }
}

//在 MyPlayer 实现中

- (void)playRadio
{
     [self play]; //this is method from parent, AVPlayer
}
4

1 回答 1

0

我不确定这是否可行,尚未测试,但您能否播放本地存储在循环中的 1 秒静音,直到音频加载?然后您的应用程序应该仍然在后台运行,并且一旦加载,您就可以切换到真实音频。

于 2013-06-08T10:20:51.770 回答