日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

ttplayer綠色版 ttsplayer( 二 )


目前行業(yè)內(nèi)碰到的比較多的問題主要是聽不見 RTC 聲音與媒體聲音被抑制 。
聽不見 RTC 聲音聽不見 RTC 聲音的主要原因是其他功能在設(shè)置 AVAudioSession 時(shí) , AVAudioSessionOptions 未包含 AVAudioSessionCategoryOptionMixWithOthers 混音模式 , 導(dǎo)致 RTC 聲音被高優(yōu)進(jìn)程打斷 。比如在非混音模式下播放 webview 的內(nèi)嵌音頻,因?yàn)?webview 是使用系統(tǒng)進(jìn)程來播放聲音,優(yōu)先級(jí)最高,所以 APP 進(jìn)程下的 RTC 聲音就會(huì)被抑制導(dǎo)致無法正常發(fā)聲 。
這類問題一般都比較隱蔽,因?yàn)楹?jiǎn)單的場(chǎng)景如果有問題,在上線之前一般都能測(cè)試出來 , 而當(dāng)多個(gè)功能場(chǎng)景串起來之后才觸發(fā)問題 , 往往就很難在測(cè)試期間發(fā)現(xiàn),且如果線上沒有完備的日志查詢體系,針對(duì)線上這類問題排查起來難度也非常大,往往因?yàn)槎ㄎ徊坏皆蚨L(zhǎng)期遺留 。
媒體聲音被抑制在通話音量模式下 , 媒體聲音會(huì)被壓低,導(dǎo)致聲音變小 。比較常見的場(chǎng)景是在小班場(chǎng)景下 , 學(xué)生在推流時(shí)播放課堂音視頻等媒體資源 , 聲音會(huì)比 RTC 的聲音要??,蒂Z旅教逕秈磺宄?。
通話模式下(連麥時(shí))媒體聲音會(huì)被壓低,原因是 iOS 手機(jī)系統(tǒng)會(huì)開啟回聲消除以保證人聲體驗(yàn),因此會(huì)壓低媒體通道的聲音,也會(huì)壓低背景音效 。
教育行業(yè)內(nèi)部分頭部 APP 也沒有從根本上解決該問題,很多都是通過從產(chǎn)品功能層面上規(guī)避問題,通過產(chǎn)品妥協(xié)來為技術(shù)問題讓步 。比如在播放課堂音視頻資源時(shí),默認(rèn)將所有學(xué)生都強(qiáng)制關(guān)麥,關(guān)麥時(shí)學(xué)生處于媒體音量,就不存在被壓低的問題了,等到課堂音視頻播放結(jié)束后,再允許學(xué)生開麥 。這種通過規(guī)避問題場(chǎng)景來解決問題的方式,不具有可復(fù)制性 。
RTC 聲音變小RTC 聲音變小,主要原因是聲音通過聽筒發(fā)聲,而沒有正常通過揚(yáng)聲器發(fā)聲,造成聲音變小的假象 。另外在 iOS14 系統(tǒng)下 , 使用過 RTC 的通話模式并切回媒體模式后,再調(diào)用 setCategory:PlayAndRecord + DefaultToSpeaker 就會(huì)必現(xiàn)聲音小的問題 。
解決方案針對(duì)上述行業(yè)痛點(diǎn),通過底層原理的分析與實(shí)際項(xiàng)目經(jīng)驗(yàn),從代碼規(guī)范、問題兜底、問題報(bào)警梳理出一套可行的解決方案 。
聽不見 RTC 聲音、RTC 聲音變小RTC 的聲音問題基本是因?yàn)槠渌K功能對(duì) AVAudioSession 進(jìn)行了更改,且在功能結(jié)束之后,也沒有將 AVAudioSession 重置到 RTC 需要的設(shè)置 。本身音視頻 SDK(如 agora、zego 等)對(duì)這種情況會(huì)有一定的兜底邏輯,但是這種兜底如果存在侵入性,也是不合理的,因此具有一定的局限性 。
AudioSession 修改規(guī)范由于系統(tǒng)無法區(qū)分同一個(gè)進(jìn)程中是哪個(gè)模塊對(duì) AudioSession 進(jìn)行了更改,所以為了避免聽不見 RTC 聲音的問題,在使用 RTC 時(shí),其它模塊對(duì) AudioSession 的調(diào)用更改,需要遵循以下原則:
模塊調(diào)用 setCategory 前先判斷下,當(dāng)前 AudioSession 如已滿足使用需要,不用再次設(shè)置 , 避免觸發(fā) iOS 14 系統(tǒng) Bug模塊需要錄音時(shí),Category 應(yīng)該使用 PlayAndRecord(為了防止打斷正在播放的音頻,不要使用僅錄音的 CategoryRecord),當(dāng)前 category 不是 PlayAndRecord 的情況下再調(diào)用 setCategory模塊僅需要播放時(shí),當(dāng)前 category 為 PlayAndRecord 或 Playback、Ambient 的情況下不需要 setCategory若當(dāng)前的 category 不滿足模塊使用,在 setCategory 之前應(yīng)該先保存當(dāng)前的 AudioSession 狀態(tài) , 然后再 setCategory、使用音頻功能 , 使用結(jié)束后,應(yīng)該重新 setCategory 恢復(fù)到之前的 AudioSession 狀態(tài)在設(shè)置 audioSession 時(shí),categoryOptions 都應(yīng)該包含 AVAudioSessionCategoryOptionDefaultToSpeaker 與 AVAudioSessionCategoryOptionMixWithOthers,iOS10 系統(tǒng)及以上還應(yīng)包含 AVAudioSessionCategoryOptionAllowBluetooth 。核心代碼如下:

推薦閱讀