zoukankan      html  css  js  c++  java
  • iOS- 关于AVAudioSession的使用——后台播放音乐

    1.前言  

    •AVAudioSession是一个单例,无需实例化即可直接使用。AVAudioSession在各种音频环境中起着非常重要的作用
    •针对不同的音频应用场景,需要设置不同的音频会话分类
     

    1.1AVAudioSession的类别  

    •AVAudioSessionCategoryAmbient
    –混音播放,例如雨声、汽车引擎等,可与其他音乐一起播放
    •AVAudioSessionCategorySoloAmbient
    –后台播放,其他音乐将被停止
    •AVAudioSessionCategoryPlayback
    –独占音乐播放
    •AVAudioSessionCategoryRecord
    –录制音频
    •AVAudioSessionCategoryPlayAndRecord
    –播放和录制音频
    •AVAudioSessionCategoryAudioProcessing
    –使用硬件解码器处理音频,该音频会话使用期间,不能播放或录音
     
    图解:

    类别

    输入

    输出

    与iPOD混合

    遵从静音

     

    AVAudioSessionCategoryAmbient

    No

    Yes

    Yes

    Yes

    AVAudioSessionCategorySoloAmbient

    No

    Yes

    No

    Yes

    AVAudioSessionCategoryPlayback

    No

    Yes

    No

    No

    AVAudioSessionCategoryRecord

    Yes

    No

    No

    No

    AVAudioSessionCategoryPlayAndRecord

    Yes

    Yes

    No

    No

    2.后台播放音乐  

    2.1.设置后台任务  

    + (UIBackgroundTaskIdentifier)backgroundPlayerID:(UIBackgroundTaskIdentifier)backTaskId
    {
        // 1. 设置并激活音频会话类别
           AVAudioSession *session = [AVAudioSession sharedInstance];
        [session AVAudioSessionCategoryPlayback error:nil];
        [session setActive:YES error:nil];
        // 2. 允许应用程序接收远程控制
        [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
        // 3. 设置后台任务ID
          UIBackgroundTaskIdentifier newTaskId = UIBackgroundTaskInvalid;
        newTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];
        if (newTaskId != UIBackgroundTaskInvalid && backTaskId != UIBackgroundTaskInvalid) {
            [[UIApplication sharedApplication] endBackgroundTask:backTaskId];
        }
        return newTaskId;
    }
    

    2.2.设置后台播放  

    //后台播放音频设置  
    AVAudioSession *session = [AVAudioSession sharedInstance];    
    [session setActive:YES error:nil];    
    [session setCategory:AVAudioSessionCategoryPlayback error:nil];   
      
    //让app支持接受远程控制事件  
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];  
    

     2.3.记录后台播放代号  

    // 后台播放任务Id
    UIBackgroundTaskIdentifier  _bgTaskId;
    
    // 设置音频会话,允许后台播放
    _bgTaskId = [SoundTool backgroundPlayerID:_bgTaskId];
    

    作者: 清澈Saup
    出处: http://www.cnblogs.com/qingche/
    本文版权归作者和博客园共有,欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接。

     
     
  • 相关阅读:
    lintcode-135-数字组合
    如何下载网页上的视频?
    tree
    lintcode-512-解码方法
    前端 启动项目内存溢出
    导入txt和导出txt文件
    webStorm 2018.3.2永久破解方法
    前端导出功能
    定时器刷新机制 setInterval react
    getFieldsValue,getFieldValue,validateFields,resetFields,getFieldDecorator的用法;
  • 原文地址:https://www.cnblogs.com/qingche/p/4366335.html
Copyright © 2011-2022 走看看