设想:
应用程序用于从广播电台流式传输音乐。我为此使用 AVPlayer。App 可以在后台播放音乐(Required background modes
在 plist 中),App 可以从锁定屏幕接收播放/暂停动作(使用 usingAVAudioSessionDelegate
和remoteControlReceivedWithEvent
方法)。这部分没问题。
问题
用户启动应用程序。加载第一个屏幕时,用户点击“播放”按钮。现在,在我的代码中,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
}