應(yīng)用場(chǎng)景
在iOS和Android端通過(guò)WebRTC連接時(shí) iOS端發(fā)起Offer Android端回復(fù)Answer
Android端能正常接受Remote Stream和顯示Local Stream
iOS端正常顯示了Local Media 沒(méi)有收到Remote Stream
進(jìn)一步定位發(fā)現(xiàn)iOS端沒(méi)有觸發(fā)onAddStream 即沒(méi)有收到Remote Media
而設(shè)置SDP的回調(diào)沒(méi)有報(bào)錯(cuò) 證明收到的Answer是正確的
問(wèn)題分析
1. 排除ICE的影響
因?yàn)槭蔷钟蚓W(wǎng)內(nèi)的連接 所以不存在ICE失敗的可能
2. 排查Offer和Answer
WebRTC的Offer和Answer實(shí)質(zhì)上是SDP的協(xié)商過(guò)程
2.1 排查協(xié)商的音視頻編碼格式
首先查看音視頻的編碼器 發(fā)現(xiàn)Offer和Answer的首選項(xiàng)都是opus音頻編碼和vp8視頻編碼 opus和vp8都是通過(guò)軟編碼器支持的 所以排除是客戶(hù)端不支持Remote的編碼格式
2.2 排查流媒體方向
Offer的音頻和視頻的方向選項(xiàng)都是sendrecv 沒(méi)有問(wèn)題
Answer發(fā)現(xiàn)音頻和視頻都是設(shè)置為單向傳輸recvonly
得出問(wèn)題是出在android端 生成的Answer不正確
得出問(wèn)題點(diǎn)后排查代碼發(fā)現(xiàn)時(shí)Android客戶(hù)端生成的Local MediaStream沒(méi)有添加到PeerConnection 所以導(dǎo)致生成的Answer只包含了接受選項(xiàng)沒(méi)有發(fā)送 進(jìn)而導(dǎo)致iOS端收不到Remote Stream