处理音频中断

原创 2015年11月19日 15:39:30


//接受来电和来电结束调用的方法

//当播放器遇到中断的时候(如来电),调用该方法

- (void)audioPlayerBeginInterruption:(AVAudioPlayer *)player

{

    //中断播放

}

 //中断事件结束后调用下面的方法

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withOptions:(NSUInteger)options

{

   //恢复播放

}

 //添加系统通知 当按下锁屏键时将发送通知 接受通知

        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleInterruption:) name:AVAudioSessionInterruptionNotification object:[AVAudioSession sharedInstance]];

        

- (void)handleInterruption:(NSNotification *)not

{

    NSDictionary *info = not.userInfo;

    

    //拿到系统的通知的key

    AVAudioSessionInterruptionType type = [info[AVAudioSessionInterruptionTypeKey] unsignedIntegerValue];

    

    //AVAudioSessionInterruptionTypeEnd //系统中断停止音频

    if (type == AVAudioSessionInterruptionTypeBegan) {//系统中断音频

        

       //中断播放

        

    }else{

        

        

        AVAudioSessionInterruptionOptions options= [info[AVAudioSessionInterruptionOptionKey] unsignedIntegerValue];

       //中断被另一个音频会话已经结束,这个应用程序可以恢复音频会议。

        if (options == AVAudioSessionInterruptionOptionShouldResume) {//可以恢复播放

            

           //恢复播放

        }

    }

}


        //更换线路播放响应

        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleRouteChange:) name:AVAudioSessionRouteChangeNotification object:[AVAudioSession sharedInstance]];


- (void)handleRouteChange:(NSNotification *)not

{

    NSDictionary *info = not.userInfo;

    

    AVAudioSessionRouteChangeReason key = [info[AVAudioSessionRouteChangeReasonKey] unsignedIntegerValue];

    

    if (key == AVAudioSessionRouteChangeReasonOldDeviceUnavailable) { //前一个的音频输出路径不再可用

       //判断是否是耳机 如果是拔出断开时停止播放

        

        /* 

         系统知道设备断开连接后,需要向userInfo字典提出要求,以获取其中用于描述前一个线路的AVAudioSessionRouteDescription.线路描述整合在一个输入数组和输出数组里面

         数组中保存的都是AVAudioSessionPortDescription实例用于描述不同的I/O接口属性 ,

            */

        

        AVAudioSessionRouteDescription *desc = info[AVAudioSessionRouteChangePreviousRouteKey];

        

        AVAudioSessionPortDescription *prodesc = [desc.outputs firstObject];

        

        //prodesc是拿出的I/O接口属性描述

        

        NSString *porType = prodesc.portType;

       

        //判断是否为耳机接口

        if ([porType isEqualToString:AVAudioSessionPortHeadphones]) {

            

           //停止播放

        }

    }

    

}



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

音频信号处理技术.ppt

  • 2016年11月28日 13:46
  • 1.13MB
  • 下载

FFmpeg+SDL2.0 音频解码播放(部分格式杂音处理)

还是参照雷大神的例子改写得,但是改写过程中碰到几个问题,纠结的比较久的问题是解码MP4, avi文件,播放出来的音频不仅很多杂音而且断断续续。因为是刚接触这块,没什么音频方面得知识, 出了问题也找...

【C语言】PCM音频数据处理---降低采样率

【C语言】PCM音频数据处理---降低采样率
  • Timsley
  • Timsley
  • 2016年02月17日 23:44
  • 4287

audacity-音频处理软件

  • 2014年11月02日 09:50
  • 7.79MB
  • 下载

音频编辑处理

  • 2016年12月02日 14:59
  • 29.4MB
  • 下载

FFMPEG处理音频时间戳的主要逻辑

FFMPEG处理音频时间戳的主要逻辑是: 1. demux读取AVPacket。以输入flv为例,timebase是1/1000,第一个音频包可能是46,代表0.046秒。 2. decoder解...

LabView音频处理

  • 2017年07月17日 08:48
  • 210KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:处理音频中断
举报原因:
原因补充:

(最多只允许输入30个字)