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

ttplayer綠色版 ttsplayer( 四 )


作者:字節(jié)跳動技術(shù)團(tuán)隊(duì)鏈接:https://juejin.cn/post/6934987607088726053來源:掘金著作權(quán)歸作者所有 。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處 。
針對該問題,我們通過監(jiān)聽 AVAudioSessionRouteChangeNotification 通知,來 hookcategory 的變化,AVAudioSessionRouteChangeNotification 在調(diào)用 setCategory:error: 時(shí)會觸發(fā),而不會在調(diào)用 setCategory:withOptions: error: 時(shí)直接觸發(fā),進(jìn)而與上述方法形成了很好的互補(bǔ) 。
//添加對AVAudioSessionRouteChange的監(jiān)聽[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleRouteChangeNotification:) name:AVAudioSessionRouteChangeNotification object:nil];- (void)handleRouteChangeNotification:(NSNotification *)notification {NSNumber* reasonNumber =notification.userInfo[AVAudioSessionRouteChangeReasonKey];AVAudioSessionRouteChangeReason reason =(AVAudioSessionRouteChangeReason)reasonNumber.unsignedIntegerValue;if (reason == AVAudioSessionRouteChangeReasonCategoryChange) {AVAudioSessionCategoryOptions currentCategoryOptions = [AVAudioSession sharedInstance].categoryOptions;AVAudioSessionCategory currentCategory = [AVAudioSession sharedInstance].category;//在需要進(jìn)行對audioSession進(jìn)行修正的場景下(RTC直播),修改category時(shí)options未包含mixWithOther,則給options追加mixWithOtherif (shouldFixAudioSession&& !(currentCategoryOptions & AVAudioSessionCategoryOptionMixWithOthers)) {[[AVAudioSession sharedInstance] setCategory:currentCategory withOptions:currentCategoryOptions | AVAudioSessionCategoryOptionMixWithOthers error:nil];}}}報(bào)警機(jī)制即使有修改規(guī)范與兜底策略的保障,隨著教室業(yè)務(wù)迭代與 iOS 系統(tǒng)升級,也無法保證線上完全不出現(xiàn)問題,因此我們建立了問題報(bào)警機(jī)制,當(dāng)線上出現(xiàn)問題時(shí),能在工作群里及時(shí)收到警報(bào),根據(jù)警報(bào)的問題信息,通過日志進(jìn)一步排查問題 。通過報(bào)警機(jī)制,我們可以更快速的對線上問題作出反應(yīng) , 不被動依賴于學(xué)生的投訴反饋,以最快的速度推進(jìn)問題解決 。
當(dāng) RTC 聲音被打斷時(shí),底層音視頻 SDK 會回調(diào)警告錯誤碼(如 agora 的 warningCode 為 1025),當(dāng)出現(xiàn)對應(yīng)的警告碼時(shí),結(jié)合 slardar 的報(bào)警功能 , 在飛書群里以消息的形式進(jìn)行同步 。同時(shí)在 hook 到 AVAudioSession 的變更時(shí),通過獲取堆棧信息 , 可以定位到是哪個(gè)模塊觸發(fā)的更改,結(jié)合報(bào)警用戶信息,可以更方便的定位問題 。
媒體聲音被抑制媒體聲音在媒體音量下開啟播放,播放途中因?yàn)檫B麥而切換到了通話音量,此時(shí)因?yàn)橄到y(tǒng)特性,媒體音量會被通話音量抑制而導(dǎo)致聲音變小 。
針對該問題,我們使用音視頻 SDK 提供的混音、混流功能來規(guī)避 。基本原理是播放媒體資源時(shí),我們拿到資源的 pcm 音頻數(shù)據(jù) , 將數(shù)據(jù)拋給 RTC 的 audioUnit 進(jìn)行混合,由 RTC 音頻播放單元統(tǒng)一播放,如果此時(shí) RTC 使用的是通話音量,則媒體資源也是使用的通話音量播放,反之亦然 。以此來保證媒體資源與 RTC 始終保持統(tǒng)一的音量控制機(jī)制 , 而避免聲音大小存在差異 。
混音是指給到音頻的本地文件路徑,或者播放的 url , 由 SDK 進(jìn)行數(shù)據(jù)讀取與播放 ?;炝魇侵羔槍σ曨l文件,播放器只解碼播放視頻數(shù)據(jù),將音頻數(shù)據(jù)實(shí)時(shí)拋出來給到 SDK,SDK 將傳入的實(shí)時(shí)音頻數(shù)據(jù)與 RTC 音頻數(shù)據(jù)進(jìn)行混合與播放 。項(xiàng)目中我們使用點(diǎn)播 SDK TTVideoEngine 來實(shí)現(xiàn)視頻播放與音頻外拋 。
總結(jié)通過上線上述綜合解決方案,聲音問題得到了有效的解決 , 同時(shí)也能從容應(yīng)對快速迭代的教室需求,有效提升了在線教室的體驗(yàn) 。
關(guān)于我們教育技術(shù)中臺團(tuán)隊(duì)誕生于2020年3月,我們?yōu)樽止?jié)跳動教育業(yè)務(wù)產(chǎn)品線提供強(qiáng)大的中臺能力,覆蓋產(chǎn)品包括清北網(wǎng)校、瓜瓜龍、大力智能燈、學(xué)浪等 。我們致力于互聯(lián)網(wǎng)技術(shù)和教育行業(yè)的深度整合 , 提供高效的在線教育解決方案,滿足用戶多樣化、個(gè)性化的教育需求 。團(tuán)隊(duì)技術(shù)壁壘高、技術(shù)氛圍濃,是提升技術(shù)競爭力的絕佳機(jī)會,期待優(yōu)秀的你加入我們!

推薦閱讀