设想情况:
App用于广播电台的流媒体音乐。我用AVPlayer来做这个。App可以在后台播放音乐(Required background modes在plist中),App可以从锁定的屏幕接收播放/暂停操作(使用AVAudioSessionDelegate和remoteControlReceivedWithEvent方法)。这部分没问题。
问题
用户启动应用程序。当第一个屏幕被加载时,用户点击“播放”按钮。现在,在我的代码中,AVPlayer被初始化了,一旦这个任务完成,它就开始播放音乐。但是这个任务持续大约3到5秒,即使在快速Wi上也是如此。
当然,在这3-5秒内,用户可以点击家庭按钮,应用程序将成为背景,AVPlayer永远不会开始播放音频。
我该怎么处理呢?我试图在[avplayer play]中运行dispatch_async,但没有帮助。我还试图在AVPlayer中初始化AppDelegate,现在音频加载速度更快了,但是用户可以更快地.解决这个问题的方法是怎样的呢?
更新-初始化播放机的代码
在头文件(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
}发布于 2013-06-08 10:20:51
我不确定这是否有效,还没有测试过,但是你能在音频加载之前在一个循环中本地播放1秒的静音吗?然后,你的应用程序应该仍然运行在后台,你可以切换到真正的音频,一旦它加载。
https://stackoverflow.com/questions/16998122
复制相似问题