AVAudioSessionPortOverrideSpeaker 和 AVAudioSessionCategoryOptionDefaultToSpeaker 区别

本文部分翻译了官方对这两个属性的描述,链接如下,此外加入个人的使用体会

https://developer.apple.com/library/archive/qa/qa1754/_index.html

 

问题的起源,在iOS播放声音时,输出到扬声器的需求,两个属性设置的区别:

 The difference is that setting the AVAudioSessionPortOverride by calling overrideOutputAudioPort: is more transient than using the category option AVAudioSessionCategoryOptionDefaultToSpeaker.

通过overrideOutputAudioPort这个方法设置属性AVAudioSessionPortOverride,比使用AVAudioSessionCategoryOptionDefaultToSpeaker这个属性更短暂。

 

方法1:

[session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error];

方法2 :

[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:&error];

方法1设置之后,如果此时插入耳机,再拔掉,播放的声音会从听筒输出,而不是回到扬声器。

方法2设置之后,如果没有耳机,则始终输出到扬声器而不是其他接收器(简要的说,就是如果有个蓝牙音箱,哪怕接上都不会有声音输出到蓝牙音箱。插上耳机,才会有声音输出到耳机)。

这里有个很重要的地方,这两个属性都只被用于 AVAudioSessionCategoryPlayAndRecord category。

 

使用场景的补充:

如果在某个场景下,希望强制从speaker输出声音,最好使用 AVAudioSessionCategoryPlayback 而不是 AVAudioSessionCategoryPlayAndRecord,因为在无外接设备的情况下,后者默认从听筒输出声音。

[session setCategory:AVAudioSessionCategoryPlayback error:&error];

 

在需要使用扬声器和听筒切换的场景,用AVAudioSessionCategoryPlayAndRecord这个category。如果在使用听筒之后,在AVAudioSessionCategoryPlayAndRecord这个category下要切换到扬声器的方法:

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
CGFloat volume = audioSession.outputVolume;
_player.volume = volume;

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值