更新M94 webrtc和mediasoup后遇到的一系列问题

802 阅读1分钟

项目更新94版本的源码 webrtc&mediasoup 后,程序运行出错:

问题一:

Trapped uncaught exception 'NSInvalidArgumentException', reason: '-[RTCAudioSession setConfiguration:active:error:]: unrecognized selector sent to instance 0x280e1f480'

问题探索:

根据提示定位到webrtc - RTCAudioSession的extension文件(RTCAudioSession+Configuration), 
1> 点击报错的方法 可以跳转到函数声明的地方
2>对比之前的源码版本(M84),没有明显的差异
所以推测应该是上层调用的问题或者配置的问题

解决:

other Linker flags : -Objc

报错消失.

问题二:

继续执行程序,发现创建videoProducer的时候, device.canproduce(video)返回了false,导致后面的流程停止

问题探索:

从服务端获取到rtpCapabilities后 交到底层 检查编解码器 是否具备发送video/audio的能力

首先 服务端返回的codec数组中包含 音频和视频的编解码器信息:video/H264 、video/rtx 、audio/opus

经过仔细检查是因为客户端因为mediasoup代码的变动 导致没有了对H264 编解码的支持,所以,双方没有协商成功导致程序跑不通

那么为什么没有协商成功? 看了mediasoup wrapper的代码之后才发现MediasoupDevice 初始化方法去掉了后面的参数(peerConnectionFactory),这个参数正是确定编解码器的关键所在.