一、錯(cuò)誤碼概述
TUTK P2P SDK 各模塊的錯(cuò)誤碼范圍定義如下,不同模塊的錯(cuò)誤碼范圍不重疊,便于快速定位問題所屬模塊。
IOTCAPIs 錯(cuò)誤碼:∈(-10000,0)
AVAPIs 錯(cuò)誤碼:∈(-30000,-20000)
RDTAPIs 錯(cuò)誤碼:∈(-20000,-10000)
P2PTunnelAPIs 錯(cuò)誤碼:∈(-40000,-30000)
提示:錯(cuò)誤碼為負(fù)數(shù)表示異常,0 表示操作成功,完整的錯(cuò)誤碼請(qǐng)參考SDK目錄下Readme.html第三部分。如果無(wú)法快速理清錯(cuò)誤產(chǎn)生的原因的話,會(huì)需要借助于SDK的日志來(lái)分析。日志的開啟方法,請(qǐng)參考章節(jié):SDK日志的開啟和保存。
二、IOTCAPIs錯(cuò)誤碼
IOTCAPIs 相關(guān)錯(cuò)誤碼主要涉及設(shè)備連接、服務(wù)器交互等核心通信場(chǎng)景,具體說(shuō)明如下:
| 錯(cuò)誤碼 | 含義 | 解釋 | 建議 |
|---|---|---|---|
-90 | 設(shè)備已經(jīng)從P2P服務(wù)器掉線 | P2P服務(wù)器會(huì)定時(shí)掃描設(shè)備是否到P2P服務(wù)器上報(bào),指定時(shí)間內(nèi)沒有心跳過來(lái),會(huì)判定設(shè)備從這臺(tái)服務(wù)器掉線 | 手動(dòng)重啟設(shè)備,或者設(shè)備端對(duì)login info進(jìn)行監(jiān)測(cè),如發(fā)現(xiàn)掉線,則進(jìn)行重啟P2P模塊 |
-60 | Master服務(wù)器無(wú)回應(yīng) | 通常是外網(wǎng)不暢,或者該UID沒有P2P服務(wù)器提供服務(wù)。如果是設(shè)備大規(guī)模無(wú)法訪問,多是沒有掛載P2P服務(wù)器。如果只是個(gè)別設(shè)備,多是網(wǎng)絡(luò)原因 | 如果大批量出現(xiàn)-60,推測(cè)應(yīng)該是服務(wù)器問題,檢查P2P服務(wù)器是否正常運(yùn)行 |
-42 | 指定時(shí)間(默認(rèn)60s)內(nèi)無(wú)法建立連線,含LAN、P2P、RLY | 目前已知原因如下:
| 檢查網(wǎng)絡(luò)連接狀態(tài),關(guān)閉防火墻重試;若設(shè)備掉線,等待一段時(shí)間后重新連接 |
-33 | 無(wú)法連上P2P服務(wù)器 | 網(wǎng)絡(luò)連接異?;騊2P服務(wù)器端口未開放 | 檢查網(wǎng)絡(luò)連接和服務(wù)器端口配置,確保設(shè)備能正常訪問P2P服務(wù)器 |
-27 | 本端主動(dòng)中止連線 | 本端主動(dòng)調(diào)用IOTC_Connect_Stop或者IOTC_Connect_Stop_bySID中止連線 | 確認(rèn)是否需要主動(dòng)斷開連接,若為誤操作,重新建立連接即可 |
-23 | 連接心跳超時(shí) | 已經(jīng)在指定時(shí)間(默認(rèn)60s)內(nèi)沒有再收到對(duì)方的心跳 | 檢查網(wǎng)絡(luò)穩(wěn)定性,適當(dāng)調(diào)整心跳超時(shí)時(shí)間,或優(yōu)化網(wǎng)絡(luò)連接質(zhì)量 |
-22 | 遠(yuǎn)端已經(jīng)關(guān)閉IOTC連接 | 對(duì)方已經(jīng)調(diào)用IOTC_Session_Close關(guān)閉了連接 | 確認(rèn)對(duì)方是否正常退出,如需繼續(xù)通信,重新發(fā)起連接請(qǐng)求 |
-2 | 無(wú)法解析master服務(wù)器域名 | 通常在外網(wǎng)不通情況下出現(xiàn) | 檢查設(shè)備網(wǎng)絡(luò)連接和DNS配置,確保能正常解析服務(wù)器域名 |
-1 | P2P服務(wù)器沒有回應(yīng) | 通常原因如下:
| 檢查網(wǎng)絡(luò)連接和服務(wù)器端口配置,確保P2P服務(wù)器正常運(yùn)行 |
三、AVAPIs錯(cuò)誤碼
AVAPIs 錯(cuò)誤碼主要與音視頻數(shù)據(jù)傳輸、通道管理相關(guān),具體說(shuō)明如下:
| 錯(cuò)誤碼 | 含義 | 解釋 | 建議 |
|---|---|---|---|
-20027 | 通道已經(jīng)被占用 | 經(jīng)常見于avClientStart系列或者avServStart系列接口,原因是使用的IOTC Channel ID已經(jīng)在使用了,還沒有被釋放 | 這個(gè)報(bào)錯(cuò)比較隱蔽,先加打印確認(rèn)是否有正確釋放通道。如是極小概率,也可以通過更換IOTC通道來(lái)規(guī)避 |
-20016 | 連接心跳超時(shí),同-23 | 已經(jīng)在指定時(shí)間(默認(rèn)60s)內(nèi)沒有再收到對(duì)方的心跳 | 檢查網(wǎng)絡(luò)穩(wěn)定性,適當(dāng)延長(zhǎng)超時(shí)時(shí)間,或優(yōu)化網(wǎng)絡(luò)傳輸質(zhì)量 |
-20015 | 遠(yuǎn)端已經(jīng)關(guān)閉IOTC連接,同-22 | 對(duì)方已經(jīng)調(diào)用IOTC_Session_Close關(guān)閉了連接 | 確認(rèn)對(duì)方連接狀態(tài),如需繼續(xù)通信,重新建立AV通道連接 |
-20012 | 沒有數(shù)據(jù)可以接收 | 通常見于avRecvFrameData2/avRecvAudioData。收的頻率比對(duì)方送的頻率高,就會(huì)出現(xiàn),比如收100次,對(duì)方只送了50次,就會(huì)出現(xiàn)-20012 | 處理方式是在接收循環(huán)中添加sleep(5) ms,降低接收頻率與發(fā)送頻率匹配 |
-20011 | 超時(shí) | 經(jīng)常見于avRecvIOCtrl、avClientStart系列或者avServStart系列接口。不同接口,原因不一樣:
| 先確認(rèn)是哪個(gè)API返回,再根據(jù)不同的API做不同的處理。如果是通道建立失敗,可以進(jìn)行幾次重連 |
-20000 | 參數(shù)錯(cuò)誤 | 可能的原因?yàn)椋?ul class="flow-list"> | 先確認(rèn)是什么API返回此報(bào)錯(cuò),檢查參數(shù)合法性和avIndex狀態(tài),針對(duì)性地進(jìn)行處理 |
-22244 | SSL版本不匹配 | 看起來(lái)是有l(wèi)ink到其他的openssl/mbedtls,有一方用的ssl不是tutk的版本 | 可以使用static的library,確保兩端使用相同版本的SSL庫(kù) |
-22193 / -54592 | DTLS配置錯(cuò)誤 | DTLS加密配置參數(shù)異常 | 將dtls_cipher_suites設(shè)置為NULL,使用默認(rèn)加密套件 |
四、RDTAPIs錯(cuò)誤碼(范圍:-20000 至 -10000)
RDTAPIs 錯(cuò)誤碼主要與可靠數(shù)據(jù)傳輸、通道配置相關(guān),具體說(shuō)明如下:
| 錯(cuò)誤碼 | 含義 | 解釋 | 建議 |
|---|---|---|---|
-10000 | RDT未初始化 | 未調(diào)用RDT_Initialize進(jìn)行初始化。 | 調(diào)用RDT_Initialize接口完成初始化后再進(jìn)行后續(xù)操作 |
-10002 | 已經(jīng)達(dá)到最大的通道數(shù)限制 | 如有調(diào)用RDT_Set_Max_Channel_Number設(shè)定最大通道數(shù),則SDK將在達(dá)到設(shè)定的最大通道數(shù)時(shí)提示此報(bào)錯(cuò)。 | 檢查是否通道沒釋放,或者最大通道數(shù)設(shè)定太小,適當(dāng)調(diào)整最大通道數(shù)配置 |
-10007 | 超時(shí) | 指定時(shí)間內(nèi)通道創(chuàng)建失敗,或者無(wú)數(shù)據(jù)可讀。 | 檢查網(wǎng)絡(luò)連接狀態(tài),適當(dāng)延長(zhǎng)超時(shí)時(shí)間,確保兩端通信正常 |
-10017 | 發(fā)送buffer已滿 | 如有調(diào)用RDT_Set_Max_SendBuff_Size設(shè)定發(fā)送buffer大小,則在緩存區(qū)滿時(shí)返回。 | 優(yōu)化數(shù)據(jù)發(fā)送頻率,或增大發(fā)送buffer容量配置 |
-10023 | 遠(yuǎn)端不支持DTLS模式 | RDT_Client_Create以及RDT_Server_Create默認(rèn)開啟DTLS,如本端使用的是RDT_Client_Create以及RDT_Server_Create,對(duì)端使用的是RDT_Create,則會(huì)提示此報(bào)錯(cuò) | 兩端統(tǒng)一使用相同的創(chuàng)建接口:都用RDT_Create或者RDT_Client_Create和RDT_Server_Create組合 |
-10024 | 本端不支持DTLS | RDT_Client_Create以及RDT_Server_Create默認(rèn)開啟DTLS,如本端使用的是RDT_Create,對(duì)端使用的是RDT_Client_Create以及RDT_Server_Create,則會(huì)提示此報(bào)錯(cuò) | 兩端統(tǒng)一使用相同的創(chuàng)建接口:都用RDT_Create或者RDT_Client_Create和RDT_Server_Create組合 |
五、P2PTunnelAPIs錯(cuò)誤碼(范圍:-40000 至 -30000)
P2PTunnelAPIs 錯(cuò)誤碼主要與P2P隧道連接、端口映射、身份驗(yàn)證相關(guān),具體說(shuō)明如下:
| 錯(cuò)誤碼 | 含義 | 解釋 | 建議 |
|---|---|---|---|
-30000 | P2PTunnelAPIs未初始化 | 未完成P2PTunnelAPIs的初始化操作 | 先調(diào)用初始化接口完成配置后再進(jìn)行連接操作 |
-30002 | 端口綁定失敗 | 端口映射時(shí),將會(huì)使用本地的端口映射遠(yuǎn)程的業(yè)務(wù)端口,如果本地端口被占用,則會(huì)提示此報(bào)錯(cuò)。 | 檢查本地端使用后是否有做解除映射,另外可以嘗試換個(gè)本地端口 |
-30006 | 連接斷開 | 兩端的連接已經(jīng)斷開。 | 關(guān)閉當(dāng)前連接,檢查網(wǎng)絡(luò)后重新建立連接 |
-30008 | 驗(yàn)證失敗 | 兩端的username或者password驗(yàn)證失敗。 | 檢查用戶名和密碼參數(shù)是否正確,確保兩端配置一致 |
-30010 | 無(wú)效的SID | 使用了一個(gè)無(wú)效的SID。 | 檢查連接是否被關(guān)閉,重新獲取有效的SID后重試 |
-30014 | 設(shè)備不在線 | 如果設(shè)備沒有到服務(wù)器報(bào)到,客戶端將在連線時(shí)找不到設(shè)備而提示此報(bào)錯(cuò)。 | 檢查設(shè)備是否正常上線,確認(rèn)設(shè)備網(wǎng)絡(luò)連接狀態(tài) |
-30019 | 設(shè)備端已經(jīng)達(dá)到最大連接數(shù) | 設(shè)備端在初始化時(shí)將指定最大連接數(shù),如超過此連接數(shù),將提示報(bào)錯(cuò)。 | 關(guān)閉閑置連接,或調(diào)整設(shè)備端最大連接數(shù)配置 |
-30024 | 本地已達(dá)最大連接數(shù) | 客戶端在初始化時(shí)將指定最大連接數(shù),如超過此連接數(shù),將提示報(bào)錯(cuò)。 | 關(guān)閉不需要的連接,或調(diào)整客戶端最大連接數(shù)配置 |
-30028 | 遠(yuǎn)端不支持DTLS | SDK支持DTLS加密以及TUTK默認(rèn)加密,如果兩端加密不一致,則提示報(bào)錯(cuò)。 | 統(tǒng)一兩端加密方式,確保加密配置一致 |
-30029 | 本端不支持DTLS | SDK支持DTLS加密以及TUTK默認(rèn)加密,如果兩端加密不一致,則提示報(bào)錯(cuò)。 | 統(tǒng)一兩端加密方式,確保加密配置一致 |
-30042 | 連線設(shè)備失敗 | 通常出現(xiàn)在鎖屏,網(wǎng)絡(luò)切換,前后臺(tái)切換之后。 | 可以在這些情景出現(xiàn)后,斷開所有連接,然后用IOTC_ReinitSocket重新初始化socket,再重連設(shè)備 |
