首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >超级快速AVPlayer init或如何在后台启动它?

超级快速AVPlayer init或如何在后台启动它?
EN

Stack Overflow用户
提问于 2013-06-08 09:35:49
回答 1查看 1.7K关注 0票数 0

设想情况:

App用于广播电台的流媒体音乐。我用AVPlayer来做这个。App可以在后台播放音乐(Required background modes在plist中),App可以从锁定的屏幕接收播放/暂停操作(使用AVAudioSessionDelegateremoteControlReceivedWithEvent方法)。这部分没问题。

问题

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

当然,在这3-5秒内,用户可以点击家庭按钮,应用程序将成为背景,AVPlayer永远不会开始播放音频。

我该怎么处理呢?我试图在[avplayer play]中运行dispatch_async,但没有帮助。我还试图在AVPlayer中初始化AppDelegate,现在音频加载速度更快了,但是用户可以更快地.解决这个问题的方法是怎样的呢?

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

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

@property (nonatomic, strong) MyPlayer *playerBrain;

实施文件:

代码语言:javascript
复制
//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实现中

代码语言:javascript
复制
- (void)playRadio
{
     [self play]; //this is method from parent, AVPlayer
}
EN

回答 1

Stack Overflow用户

发布于 2013-06-08 10:20:51

我不确定这是否有效,还没有测试过,但是你能在音频加载之前在一个循环中本地播放1秒的静音吗?然后,你的应用程序应该仍然运行在后台,你可以切换到真正的音频,一旦它加载。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16998122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档