WebRTC连接失败的分析
2019-01-03 本文已影响264人
cx7
应用场景
在iOS和Android端通过WebRTC连接时 iOS端发起Offer Android端回复Answer
Android端能正常接受Remote Stream和显示Local Stream
iOS端正常显示了Local Media 没有收到Remote Stream
进一步定位发现iOS端没有触发onAddStream 即没有收到Remote Media
而设置SDP的回调没有报错 证明收到的Answer是正确的
问题分析
1. 排除ICE的影响
因为是局域网内的连接 所以不存在ICE失败的可能
2. 排查Offer和Answer
WebRTC的Offer和Answer实质上是SDP的协商过程
2.1 排查协商的音视频编码格式
首先查看音视频的编码器 发现Offer和Answer的首选项都是opus音频编码和vp8视频编码 opus和vp8都是通过软编码器支持的 所以排除是客户端不支持Remote的编码格式
2.2 排查流媒体方向
Offer的音频和视频的方向选项都是sendrecv 没有问题
Answer发现音频和视频都是设置为单向传输recvonly
得出问题是出在android端 生成的Answer不正确
得出问题点后排查代码发现时Android客户端生成的Local MediaStream没有添加到PeerConnection 所以导致生成的Answer只包含了接受选项没有发送 进而导致iOS端收不到Remote Stream