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/
    本文版权归作者和博客园共有,欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接。

     
     
  • 相关阅读:
    CMDB资产管理系统开发【day25】:需求分析
    python常用运维脚本实例
    我的Pycharm,我做主
    为什么你总是“半途而废”- 李笑来
    函数和常用模块【day06】:模块特殊变量(十四)
    使用Python的turtle(海龟)模块画图
    第一章:数据结构和算法
    网络编程基础【day10】:IO多路复用
    函数和常用模块【day04】:内置函数分类总结(十一)
    Python基础【day01】:PyChram使用技巧总结(六)
  • 原文地址:https://www.cnblogs.com/qingche/p/4366335.html
Copyright © 2011-2022 走看看