融合通信常见问题3月刊 | 云信小课堂
2022.03
「融合通信常見問題」月刊將在每月末與大家見面,該月刊主要包括錯題集、知識加油站、技術加餐三大板塊,匯集實踐過程中的易錯問題和解題思路,分享融合通信領域的前沿資訊和技術干貨,為您的開發提效加速,為您的進階之路添磚加瓦。
本期內容概覽
看這里!別人踩過的坑快避開
1. Mac 端使用 Type-C 耳機說話別人聽不到
2. 聲音從藍牙耳機播放切換到外放
3. 退到后臺一段時間后再說話,對方聽不到聲音
4. iOS 端呼叫組件初始化時 APP 卡死
5. 小程序說話,Native 聽不到
6. 發送信息失敗
7. 因加密模式問題無法上架到 Google 商店
8. App 啟動時應用使用不流暢
這些知識點你知道嗎?
1. 直播場景與通信場景有什么區別?
2. SDK 支持的 QoS 策略是什么意思?
這些干貨也不容錯過!
1. 網易會議開源之移動端篇、桌面端篇
2. RTC 音頻質量評價和保障
3. Gitlab-ci 替代 webhook 觸發Jenkins job
4. SQLite 簡介
5. 20萬字《網易智企技術合輯》重磅發布
01.
錯題集|
■ 音視頻通話
疑難問題 1:
Mac 端插入 Type-C 耳機之后說話,其他端聽不到。
易錯等級:????
錯題原因:
Mac 對于 Type-C 耳機的適配有問題,Mac 端在插入 Type-C 耳機后,說話時系統聲音面板中的輸入電平很低或者幾乎沒有,而且在該情況下,市面上其他的通話軟件效果均一致。因此判斷無法正常使用 Type-C 的耳機是由于 Mac 對于 Type-C 耳機的適配不好導致。
解題思路:
建議可以更換其他耳機或者使用系統麥克風通話。
疑難問題 2:
音視頻發送音頻流,接收端聽到的聲音異常,從藍牙耳機播放切換到外放。(接收端一開始聽到的聲音是通過藍牙耳機播放的,在調用 enableLocalAudio 設置成 true 之后,聲音異常變為外放,再次調用 enableLocalAudio 設置成 false 之后,聲音恢復通過藍牙耳機播放。)
易錯等級:???
錯題原因:
iOS 的音頻是通過 AVAudioSession 管理的,是單例類,不止 SDK 可以調用,客戶業務層也可以修改 AVAudioSession 的 option,這個問題現象看著和調用 SDK 的方法有關,實際上是在調用 SDK 方法的時候,客戶業務層有調用修改 AVAudioSession 的 option,修改成了外放類型 AVAudioSessionCategoryOptionDefaultToSpeaker。
解題思路:
業務層有使用到 AVAudioSession 的時候,注意管理好業務層的調用。在通過 SDK 進行音頻輸出的時候避免修改 AVAudioSession。
疑難問題 3:
Android 端發送音視頻/純音頻,退到后臺一段時間后再說話,對方聽不到聲音。
易錯等級:???
錯題原因:
音視頻采集退后臺后被系統限制。長時間退后臺,采集是個高危動作,極有可能被系統限制,取決于用戶對 APP 的設置及系統對這種行為的限制要求,系統限制詳情請見行為變更(https://developer.android.com/about/versions/pie/android-9.0-changes-all);
解題思路:
在鎖屏或將應用退至后臺前,建議用戶可以先開啟前臺服務,從而讓應用正常工作(繼續采集聲音和視頻畫面),在退出鎖屏或返回前臺前終止前臺服務;不過需要有個預期:因為高版本 Android 系統對于退后臺繼續采集這種敏感操作非常嚴格,前臺服務的保活也是有風險的,需要考慮好異常情況的處理方式。
疑難問題 4:
iOS 端呼叫組件初始化時,偶現 APP 卡死情況。
易錯等級:???
錯題原因:
呼叫組件內部初始化 IM 和老版本 RTC SDK 互鎖導致卡死。
解題思路:
按照官網文檔在 pod 導入 NERtcCallKit 的時候,指定 NERtcSDK 版本為 4.2.120。
示例如下:
pod 'NERtcCallKit', '1.5.0'
pod 'NERtcSDK', '4.2.120'
4.2.120 版本是呼叫組件適配的穩定版本,pod 不指定版本拉到的 NERtcSDK 不是穩定版本
疑難問題 5:
小程序和 Native 通話時,小程序說話,Native 聽不到。
易錯等級:???
錯題原因:
小程序調用 publish 時參數傳遞錯誤。小程序端 publish 時,需要傳入要發布的媒體類型,而在傳參時錯誤的認為傳入 video 表示音視頻都發布。
解題思路:
(1)發布音視頻流時 publish 中 mediaType 應設置為''(空字符串);
(2)發布純視頻流時 mediaType 應設置為 video;
(3)發布純音頻流時 mediaType 應設置為 audio。
■ IM 即時通訊
疑難問題 6:
以下兩種場景時,發送失敗,報錯參數錯誤:
再次 sendMessage 發送已經發送過的圖片和文件類消息;
直接 forwardMessage 發送新創建的消息。
易錯等級:???
錯題原因:
1. 文件類消息創建的時候可以選擇相冊路徑和 data 兩種形式創建,創建的時候會賦值給文件 NIMMessageObject 的私有屬性 sourceImage,sourceFilepath 和sourceData。發送完消息的時候,這些私有屬性會置空。如果再次調用 sendmessage 方法的話,會因為找不到這些參數報錯參數錯誤;
2. forwardMessage 發送消息,SDK 會解析 messageObject 的 encodeContent 屬性,拿到 messageObject 的對象數據進行轉發,如果是新創建的消息調用轉發方法發送會因為找不到 messageObject 的 encodeContent 報錯參數錯誤。
解題思路:
1. 這種場景如果是轉發的場景就需要調用轉發的接口 forwardMessage,或者先調用 makeForwardMessageFromMessage 構造轉發的message,再 sendMessage 發送。
如果是自己想多次發送同一個內容的消息,就按創建消息的流程,創建一個 message 對象發送一次,避免發送完不重新創建就再次 sendMessage 同一個 messag e對象。
2. 新創建的消息直接使用 sendMessage 發送,避免調用轉發接口 forwardMessage 發送。
疑難問題 7:
客戶需要上架到 Google 商店的時候,會被檢測到有一處使用了不安全的加密模式的問題,導致無法上架。
易錯等級:???
錯題原因:
Google 不支持 AES/ECB/PKCS5Padding 的加密模式。
解題思路:
在 IM SDK 8.11.5 之后的版本去除了該加密模式,可以升級處理。
疑難問題 8:
APP 啟動的時候,應用會出現使用不流暢的情況。看 logcat 日志顯示 IM 相關日志頻繁打印。
易錯等級:???
錯題原因:
有可能是頻繁調用阻塞查詢本地數據的接口,這類接口會查詢本地數據庫,如果在 UI 線程中循環調用會出現性能問題,導致 UI 卡頓。可以通過在 logcat 日志中過濾 TransExec: execute Transaction 關鍵字,確認是否有 IM 接口頻繁調用的情況,尤其需要注意“xxxBlock();”這類同步方法。
解題思路:
1. 確認是否為業務層實現有問題,通過調整業務層邏輯,避免接口頻繁調用。
2. 查看api確認是否有批量查詢的方法,避免循環調用。例如 TeamService.queryTeamBlock 可以改為 TeamService.queryTeamListBlock。
3. 改為異步調用方法,或者放在子線程中調用,防止UI卡頓。
02.
知識加油站|
1. 直播場景與通信場景有什么區別?
NERTC SDK 通過 setChannelProfile 方法設置實時音視頻通話的場景,您可以通過該方法將房間設置為通信場景或直播場景,默認為通信場景。網易云信會針對不同實時音視頻場景設置不同的優化策略,例如用戶角色、默認視頻編碼碼率等。
通信場景設置推薦用于一對一或多人音視頻通話場景,直播場景設置推薦用于語音聊天室、小班課、主播 PK 等互動直播場景。
(1)用戶角色
為了便于管理用戶權限,在直播場景中實現更細節的權限控制,音視頻通話 2.0 支持在直播場景中設置用戶角色。用戶角色可設置為主播(broadcastor)或觀眾(audience)。
直播場景中,用戶默認角色為主播,可以發送音視頻流、配置推流任務等。通過方法 setClientRole 可切換用戶角色,切換為觀眾后,只能接收音視頻流。
通話場景中,用戶默認角色為主播。不支持切換用戶角色為觀眾。
(2)QoS 策略
直播場景和通信場景下的默認 QoS 策略不同,主要表現在以下方面。
直播場景。在直播場景下,NERTC SDK 的 QoS 策略控制側重于保證畫質清晰度。因此在默認情況下,如果分辨率和幀率相同,直播場景的碼率相較于通信場景更高。在弱網環境下會有一定延時。
通信場景。在通信場景下,NERTC SDK 的 QoS 策略控制側重于保證音視頻通話的實時性,最大程度上保證低時延。在弱網環境下會降低音質、畫質來保證音視頻通話流暢。
2. SDK 支持的 QoS 策略是什么意思?
QoS: Quality of Service,服務質量。
當參與音視頻通話的用戶網絡較差時,SDK 會啟動 QoS 策略,自動調整收發數據的分辨率、碼率、幀率。多人音視頻通話:A、B、C、D 通話。
對于視頻數據如果 A 上行發送網絡較差,或者 B、C、D 下行接收網絡較差,服務器都會回調給 A 并觸發 QoS,調整 A 發送的數據。
對于音頻數據如果 A 上行發送網絡較差,則服務器回調給 A 并觸發 QoS,調整 A 發送的數據;如果 B、C、D下行接收網絡較差,則服務器根據 B、C、D 的網絡情況重新編碼音頻數據發送給 B、C、D。
03.
技術加餐|
點擊文章名稱即可跳轉👇
1. 網易會議組件正式開源
內容概述:網易智企發布”易+”開源計劃,旗下融合通信云服務專家網易云信打響頭炮,正式開源網易會議組件,并將在第二季度開源低延時直播技術。
2. “易+”開源 | 網易會議開源之移動端篇
內容概述:網易會議組件源代碼已經上傳至 Github,本文主要介紹了網易會議組件在網易會議移動端的實踐落地。
3. “易+”開源 | 網易會議開源之桌面端篇
內容概述:網易云信在通信領域深耕多年,基于自身能力打造了一款成熟的會議系統并將其開源,本文將介紹網易會議桌面端的相關內容。
4. 技術干貨 | RTC 音頻質量評價和保障
內容概述:如何對 RTC 音頻的效果開展測試,通過構建客觀、標準、可重復的評價體系來保證好的音頻傳輸質量?
5. 技術干貨 | Gitlab-ci 替代 webhook 觸發Jenkins job
內容概述:本文根據網易云信的落地實踐,詳細介紹了如何借助 Gitlab-ci 替代 webhook 觸發 Jenkins job。
6. 技術干貨 | SQLite 簡介
內容概述:SQLite 內置于所有手機和大多數計算機中,并捆綁在人們每天使用的無數其他應用程序中。本文主要介紹了 SQLite 的相關特性。
7.? 20萬字《網易智企技術合輯》重磅發布
內容概述:網易智企精心挑選 51 篇技術文章,集結成 20 萬字的《網易智企技術合輯》,免費送給每一位開發者!
END
「云信小課堂」推薦閱讀
? ?融合通信常見問題 2月刊?
👇接入指南👇
(點擊關鍵詞直達)
音視頻通話?|?構建本土「Clubhouse」
安卓端PK連麥?|?iOS端PK連麥
在線聊天室?|?聊天室內容審核
利用 UI 組件實現應用級別在線聊天室
協同辦公系統?|?音視頻安全檢測
網易會議開源指南?| 視頻雙錄
關于網易云信
網易云信是集網易 20 余年 IM 以及音視頻技術打造的融合通信云服務專家,穩定易用的通信與視頻 PaaS 平臺。
提供融合通信與視頻的核心能力與組件,包含 IM 即時通訊、5G 消息平臺、一鍵登錄、信令、短信與號碼隱私保護等通信服務,音視頻通話、直播、點播、互動直播與互動白板等音視頻服務,視頻會議等組件服務。
網易云信服務于網易云音樂、好未來、新東方、科大訊飛、南京銀行等各行各業客戶。
總結
以上是生活随笔為你收集整理的融合通信常见问题3月刊 | 云信小课堂的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云信小课堂丨视频“双录”知多少?
- 下一篇: 深度剖析「圈组」消息系统设计 | 「圈组