1. setRemoteDescription
错误:
Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters for m-section with mid='1'..
原因:
视频编码问题导致Android端无法正常解析sdp内容
解决方案:
创建PeerConnectionFactory
实例时配置视频编码相关参数,开启Vp8
和H.264
视频编码,如下:
override fun initPeerConnectionFactory() {
val eglBaseContext = EglBase.create().eglBaseContext
val initializationOptions = InitializationOptions
.builder(context)
.createInitializationOptions()
PeerConnectionFactory.initialize(initializationOptions)
val options = PeerConnectionFactory.Options()
val defaultVideoEncoderFactory = DefaultVideoEncoderFactory(eglBaseContext, true, true)
val defaultVideoDecoderFactory = DefaultVideoDecoderFactory(eglBaseContext)
peerConnectionFactory = PeerConnectionFactory.builder()
.setOptions(options)
.setVideoEncoderFactory(defaultVideoEncoderFactory)
.setVideoDecoderFactory(defaultVideoDecoderFactory)
.createPeerConnectionFactory()
}
2. Google Android WebRTC库并不是向后兼容的
通过集成不同版本的Google Android WebRTC库会发现,新版本库中的API是不兼容旧版本库的,例如下面这段创建PeerConnectionFactory
实例的代码:
WebRTC 1.0.32006版本:
fun initPeerConnectionFactory() {
PeerConnectionFactory.initialize(initializationOptions)
peerConnectionFactory = PeerConnectionFactory
.builder()
.createPeerConnectionFactory()
}
WebRTC 1.0.20723版本:
fun initPeerConnectionFactory() {
PeerConnectionFactory.initialize(initializationOptions)
peerConnectionFactory = PeerConnectionFactory(PeerConnectionFactory.Options())
}
1.0.20723版本直接通过构造方法创建PeerConnectionFactory
实例,到了1.0.32006版本PeerConnectionFactory
的构造方法已经被私有化,因此不再支持通过构造方法直接创建实例,而是通过PeerConnectionFactory.Builder
创建。
所以当升级WebRTC库的版本时,务必做好适配工作。