AudioSreamer实现音乐播放器的后台播放与锁屏播放

    AudioSreamer是一个处理网络音频的功能非常强大的第三方.相比其他的音频处理框架有很多好处:AvAudioPlyer只能处理本地音频,如果需要处理网络音频,需要下载到本地才能播放.这就存在一个时间差的问题,在处理时,你可能需要等待一段时间去下载音频,只有当音频完全下载到本地时才能播放.如果音频文件很大,你需要等待更多的时间,MpMoviePlayer可以处理网络音视频,但其功能简单,如果开发功能强大的软件,MpMoviePlayer不会是一个好的选择,另外还想说一下AvPlayer,其可以实现网络音频的播放,但我感觉用起来不是很方便.

   下面进入正题.实现AudioStreamer的后台播放:

  1. 引入AVFoundation.Framework库文件,有时候我们在引用的时候会发现添加不到工程中去,可能是因为较高版本的SDK将其封装到AVKit框架上去了(个人猜测)只需要添加AVKit框架就行了.

2.在AppDelegate的应用启动事件里面添加以下代码:

- (void)applicationDidEnterBackground:(UIApplication *)application {
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    AVAudioSession *session = [AVAudioSession sharedInstance];
    [session setActive:YES error:nil];
    [session setCategory:AVAudioSessionCategoryPlayback error:nil];
    
}

3.在info.plist文件增加Required backgroud modes 选项,选择App plays audio or streams audio/video using AirPlay见下图:


4.在写音乐播放器的相关的ViewController中添加下面代码:

#pragma mark -- 视图将要出现
- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
//变成第一响应
    [self becomeFirstResponder];
}

#pragma mark--视图将要消失
- (void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    [[UIApplication sharedApplication] endReceivingRemoteControlEvents];
    //取消第一响应
    [self resignFirstResponder];
}

#pragma mark--后台播放及锁屏播放

- (void)remoteControlReceivedWithEvent:(UIEvent *)event{
    if (event.type == UIEventTypeRemoteControl) {
        switch (event.subtype) {
            case UIEventSubtypeRemoteControlTogglePlayPause:
                //播放按钮的响应事件
                [self alticlePlayAction:self.articlePlay];
                break;
            case UIEventSubtypeRemoteControlPlay:
                //播放按钮的响应事件
                [self alticlePlayAction:self.articlePlay];
                break;
            case UIEventSubtypeRemoteControlPause:
                //播放按钮的响应事件
                [self alticlePlayAction:self.articlePlay];
                break;
            case UIEventSubtypeRemoteControlPreviousTrack:
                //上一曲按钮的响应事件
                [self alticlePreAction:self.articlePre];
                break;
                
            case UIEventSubtypeRemoteControlNextTrack:
                //下一曲按钮的响应事件
                [self alticleNextAction:self.articleNext];
                break;
            
                
            default:
                break;
        }
    }
}

实现后台播放.亲测有效,可以实现后台播放和锁屏播放.但应注意虚拟机并不支持该功能,需真机测试.

效果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值