iOS端音頻模式 AVAudioSession

轉(zhuǎn):https://baijiahao.baidu.com/s?id=1708682753422314151&wfr=spider&for=pc

音頻輸出作為硬件資源瘟判,對于iOS系統(tǒng)來說是唯一的图谷,需要通過“AVAudioSession”這個系統(tǒng)級全局對象對各個App進行控制。

常見音頻場景

  • 是進行錄音還是播放?

  • 當(dāng)系統(tǒng)靜音鍵按下時該如何表現(xiàn)捐名?

  • 是從揚聲器還是從聽筒里面播放聲音尖啡?

  • 插拔耳機后如何表現(xiàn)婉宰?

  • 來電話/鬧鐘響了后如何表現(xiàn)妙色?

  • 其他音頻App啟動后如何表現(xiàn)?

通過“AVAudioSession”可以做什么操作

  • 為app選擇輸入輸出的路由:通過揚聲器或者聽筒播放--可以手動設(shè)置通過手機上揚聲器/聽筒或者耳機播放--系統(tǒng)自動切換赵辕,插入耳機默認(rèn)耳機

  • 為app選擇輸入的路由:通過手機麥克風(fēng)或者耳機麥克風(fēng)采集-系統(tǒng)自動切換既绩,插入耳機默認(rèn)耳機

  • 協(xié)調(diào)音頻播放的app之間的關(guān)聯(lián),以及系統(tǒng)的聲音處理

  • 處理被其他app打斷后的情況

  • 錄音或者播放音樂

AVAudioSession默認(rèn)行為

  • 可以進行播放还惠,但是不能進行錄制饲握。

  • 當(dāng)用戶將手機上的靜音撥片撥到“靜音”狀態(tài)時,此時如果正在播放音頻,那么播放內(nèi)容會被靜音救欧。

  • 當(dāng)用戶按了手機的鎖屏鍵或者手機自動鎖屏了衰粹,此時如果正在播放音頻,那么播放會靜音并被暫停笆怠。

  • 如果你的App在開始播放的時候铝耻,此時QQ音樂或其他App正在播放,那么其他播放器會被靜音并暫停蹬刷。

系統(tǒng)會在app啟動的時候瓢捉,激活這個全局唯一的AVAudioSession

音頻模式七大場景

該場景由7個類別分別控制:

默認(rèn)是:CategorySoloAmbient(獨占播放)

  • AVAudioSessionCategoryAmbient : 只用于播放音樂時,并且可以和QQ音樂同時播放办成,比如玩游戲的時候還想聽QQ音樂的歌泡态,那么把游戲播放背景音就設(shè)置成這種類別。同時诈火,當(dāng)用戶鎖屏或者靜音時也會隨著靜音兽赁,這種類別基本適用所有App的背景場景状答。

  • AVAudioSessionCategorySoloAmbient: 也是只用于播放,但是和"AVAudioSessionCategoryAmbient"不同的是冷守,用了它就別想聽QQ音樂了,比如不希望QQ音樂干擾的App惊科,類似節(jié)奏大師拍摇。同樣當(dāng)用戶鎖屏或者靜音時也會隨著靜音,鎖屏了就玩不了節(jié)奏大師了馆截。

  • AVAudioSessionCategoryPlayback: 如果鎖屏了還想聽聲音怎么辦充活?用這個類別,比如App本身就是播放器蜡娶,同時當(dāng)App播放時混卵,其他類似QQ音樂就不能播放了。所以這種類別一般用于播放器類App

  • AVAudioSessionCategoryRecord: 有了播放器窖张,肯定要錄音機幕随,比如微信語音的錄制,就要用到這個類別宿接,既然要安靜的錄音赘淮,肯定不希望有QQ音樂了,所以其他播放聲音會中斷睦霎。想想微信語音的場景梢卸,就知道什么時候用他了。

  • AVAudioSessionCategoryPlayAndRecord: 如果既想播放又想錄制該用什么模式呢副女?比如VoIP蛤高,打電話這種場景,PlayAndRecord就是專門為這樣的場景設(shè)計的 。

  • AVAudioSessionCategoryMultiRoute: 想象一個DJ用的App襟齿,手機連著HDMI到揚聲器播放當(dāng)前的音樂姻锁,然后耳機里面播放下一曲,這種常人不理解的場景猜欺,這個類別可以支持多個設(shè)備輸入輸出位隶。

  • AVAudioSessionCategoryAudioProcessing: 主要用于音頻格式處理,一般可以配合AudioUnit進行使用

上面介紹的七大類別开皿,可以認(rèn)為是設(shè)定了七種主場景涧黄,而這七類肯定是不能滿足開發(fā)者所有的需求的。AVAudioSession提供的方法是赋荆,首先定下7種類別中的一種基調(diào)笋妥,再進行微調(diào)。AVAudioSession為每種Category都提供了些許選項來進行微調(diào)窄潭。

類別的選項

  • AVAudioSessionCategoryOptionMixWithOthers : 如果確實用的AVAudioSessionCategoryPlayback實現(xiàn)的一個背景音春宣,但是又想和QQ音樂并存,可以在AVAudioSessionCategoryPlayback類別下在設(shè)置這個選項嫉你,就可以實現(xiàn)共了月帝。

  • AVAudioSessionCategoryOptionDuckOthers:在實時通話的場景,比如QQ音樂幽污,當(dāng)進行視頻通話的時候嚷辅,會發(fā)現(xiàn)QQ音樂自動聲音降低了,此時就是通過設(shè)置這個選項來對其他音樂App進行了壓制距误。

  • AVAudioSessionCategoryOptionAllowBluetooth:如果要支持藍牙耳機電話簸搞,則需要設(shè)置這個選項

  • AVAudioSessionCategoryOptionDefaultToSpeaker: 如果在VoIP模式下,希望默認(rèn)打開免提功能准潭,需要設(shè)置這個選項

七大模式

  • AVAudioSessionModeDefault: 每種類別默認(rèn)的就是這個模式趁俊。

  • AVAudioSessionModeVoiceChat:主要用于VoIP場景,此時系統(tǒng)會選擇最佳的輸入設(shè)備刑然,比如插上耳機就使用耳機上的麥克風(fēng)進行采集寺擂。同時會設(shè)置類別的選項為"AVAudioSessionCategoryOptionAllowBluetooth"從而支持藍牙耳機。

  • AVAudioSessionModeVideoChat : 主要用于視頻通話闰集,比如QQ視頻沽讹、FaceTime。系統(tǒng)會選擇最佳的輸入設(shè)備武鲁,比如插上耳機就使用耳機上的麥克風(fēng)進行采集并且會設(shè)置類別的選項為"AVAudioSessionCategoryOptionAllowBluetooth" 和 "AVAudioSessionCategoryOptionDefaultToSpeaker"爽雄。

  • AVAudioSessionModeGameChat : 適用于游戲App的采集和播放,比如“GKVoiceChat”對象沐鼠,一般不需要手動設(shè)置

每個模式有其適用的類別挚瘟,可以根據(jù)具體需要做對應(yīng)的組合叹谁。

音頻通知

系統(tǒng)中斷通知

如果app正在視頻通話,突然來電話了乘盖、鬧鐘響了等焰檩,最常用的場景是先暫停,待恢復(fù)的時候再繼續(xù)订框。app可以通過監(jiān)聽系統(tǒng)消息:AVAudioSessionInterruptionNotification來處理析苫。系統(tǒng)消息userInfo主要包含兩個鍵:

  • AVAudioSessionInterruptionTypeKey: 取值為AVAudioSessionInterruptionTypeBegan表示中斷開始,我們應(yīng)該暫停播放和采集穿扳,取值為AVAudioSessionInterruptionTypeEnded表示中斷結(jié)束衩侥,我們可以繼續(xù)播放和采集。

  • AVAudioSessionInterruptionOptionKey: 當(dāng)前只有一種值A(chǔ)VAudioSessionInterruptionOptionShouldResume表示此時也應(yīng)該恢復(fù)繼續(xù)播放和采集矛物。

其他app占用通知

其他App占據(jù)AudioSession的時候用AVAudioSessionSilenceSecondaryAudioHintNotification來進行通知茫死。其回調(diào)回來的userInfo鍵為:AVAudioSessionSilenceSecondaryAudioHintTypeKey

  • AVAudioSessionSilenceSecondaryAudioHintTypeBegin:表示其他App開始占據(jù)Session

  • AVAudioSessionSilenceSecondaryAudioHintTypeEnd:表示其他App開始釋放Session

外設(shè)改變通知

默認(rèn)情況下,AVAudioSession會在App啟動時選擇一個最優(yōu)的輸出方案履羞,比如插入耳機的時候峦萎,就用耳機。但是這個過程中忆首,用戶可能拔出耳機爱榔,app可以通過監(jiān)聽系統(tǒng)消息:AVAudioSessionRouteChangeNotification來處理。

針對視頻通話場景設(shè)置

類別:AVAudioSessionCategoryPlayAndRecord類別的選項:AVAudioSessionCategoryOptionAllowBluetoothAVAudioSessionCategoryOptionDefaultToSpeaker模式:AVAudioSessionModeVideoChat

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雄卷,一起剝皮案震驚了整個濱河市搓蚪,隨后出現(xiàn)的幾起案子蛤售,更是在濱河造成了極大的恐慌丁鹉,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悴能,死亡現(xiàn)場離奇詭異揣钦,居然都是意外死亡,警方通過查閱死者的電腦和手機漠酿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門冯凹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人炒嘲,你說我怎么就攤上這事宇姚。” “怎么了夫凸?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵浑劳,是天一觀的道長。 經(jīng)常有香客問我夭拌,道長魔熏,這世上最難降的妖魔是什么衷咽? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮蒜绽,結(jié)果婚禮上镶骗,老公的妹妹穿的比我還像新娘。我一直安慰自己躲雅,他們只是感情好鼎姊,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著相赁,像睡著了一般此蜈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上噪生,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天裆赵,我揣著相機與錄音,去河邊找鬼跺嗽。 笑死战授,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的桨嫁。 我是一名探鬼主播植兰,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼璃吧!你這毒婦竟也來了楣导?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤畜挨,失蹤者是張志新(化名)和其女友劉穎筒繁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體巴元,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡毡咏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了逮刨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呕缭。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖修己,靈堂內(nèi)的尸體忽然破棺而出恢总,到底是詐尸還是另有隱情,我是刑警寧澤睬愤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布片仿,位于F島的核電站,受9級特大地震影響戴涝,放射性物質(zhì)發(fā)生泄漏滋戳。R本人自食惡果不足惜钻蔑,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望奸鸯。 院中可真熱鬧咪笑,春花似錦、人聲如沸娄涩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蓄拣。三九已至扬虚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間球恤,已是汗流浹背辜昵。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留咽斧,地道東北人堪置。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像张惹,于是被迫代替她去往敵國和親舀锨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 音頻輸出作為硬件資源宛逗,對于iOS系統(tǒng)來說是唯一的坎匿,需要通過“AVAudioSession”這個系統(tǒng)級全局對象對各個...
    Leoeoo閱讀 5,284評論 0 22
  • 音頻輸出作為硬件資源,對于iOS系統(tǒng)來說是唯一的雷激,那么要如何協(xié)調(diào)和各個App之間對這個稀缺的硬件持有關(guān)系呢替蔬? iO...
    CZ_iOS閱讀 74,867評論 31 261
  • AVAudioSession 概述 最近在做 webrtc 采集與播放音頻,使用AVAudioSession進行播...
    langzi閱讀 13,710評論 3 16
  • 1. AVAudioSession 概述 最近一年一直在做IPC Camera的iOS客戶端開發(fā)侥锦。和音頻打交道进栽,必...
    安東_Ace閱讀 51,392評論 20 169
  • 用戶通過音量鍵德挣、靜音鍵恭垦、耳機聲控和屏幕上的音量調(diào)節(jié)滑塊控制聲音。很多 第三方配件也有聲控功能格嗅。音頻可以通過內(nèi)部或外...
    愛上魚的貓_產(chǎn)品狗閱讀 714評論 0 1