Flutter WebRTC无法创建DataChannel问题及解决方法
Flutter WebRTC DataChannel 无法触发onDataChannel事件的解决方法
问题场景
通过flutter_webrtc包初始化RTCPeerConnection? _peerConnection;后,音视频流可正常传输,但创建DataChannel后,Answer端的onDataChannel始终未收到事件,DataChannel完全无响应。
错误代码示例
Offer端错误代码
_createDataChanel() async { final chanInit = RTCDataChannelInit() ..negotiated = true ..maxRetransmits = 30; _dataChannel = await _peerConnection!.createDataChannel('chat', chanInit); _dataChannel!.onMessage = (data) { print(data); }; }
Answer端错误代码
_subscribeDataChanel() { _peerConnection!.onDataChannel = (channel) { _dataChannel = channel; _dataChannel!.onMessage = (data) { print(data); }; }; }
问题根源
创建DataChannel的时机错误:必须先创建DataChannel,再生成Offer或Answer,否则SDP协商中不会包含DataChannel的相关信息,导致Answer端无法感知到DataChannel的存在。
修正后代码
Offer端修正代码
createOffer(Connection connection) async { await _createDataChanel(); final offerDesc = await _peerConnection!.createOffer(offerSdpConstraints); await _peerConnection!.setLocalDescription(offerDesc); // 发送到信令服务器等后续操作... }
Answer端修正代码
createAnswer(Connection connection) async { _subscribeDataChanel(); // 从信令服务器获取offer等前置操作... }
内容的提问来源于stack exchange,提问作者Marvin Heemeyer
相关产品推荐
相关产品推荐

