使用libdatachannel连接OvenMediaEngine时SDP解析失败求助
问题解决:OvenMediaEngine解析SDP失败及服务器崩溃问题
核心问题分析
从错误日志和你提供的消息格式来看,主要存在两个关键问题:
- SDP格式不符合OME解析规范,导致返回
Could not parse SDP错误 - JSON结构不匹配OME预期,触发
Json::LogicError进而导致服务器崩溃
具体修正方案
1. 调整Answer的JSON结构
你构造的Answer中,sdp字段是嵌套对象{"sdp": "...", "type": "answer"},但OME的WebRTC信令协议要求Answer的sdp字段直接传入SDP字符串,而非嵌套对象。这是引发JSON解析错误和服务器崩溃的核心原因。
2. 修正SDP内容
移除或调整OME不兼容的SDP字段:
- 删除
a=group:LS locQqN字段(Offer中无此字段,OME解析器不支持) - 去掉
a=msid字段(Answer无需重复Offer的msid信息) - 统一
ice-options为trickle(与Offer保持一致,避免兼容性冲突) - 确保SDP换行符使用标准的
\r\n(部分解析器对仅\n的换行不兼容)
修正后的Answer示例
{ "command": "answer", "id": 508901731, "peer_id": 0, "sdp": "v=0\r\no=rtc 2314657025 0 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE locQqN\r\na=msid-semantic:WMS *\r\na=setup:active\r\na=ice-ufrag:hptN\r\na=ice-pwd:Ai0Bb1M+FufKdPNsatTQ6z\r\na=ice-options:trickle\r\na=fingerprint:sha-256 2B:A0:66:23:E9:74:AE:98:50:xx:xx:xx:EF:8C:DA:41:AA:8A:96:2C:C6:9B:C6:0B:EC:FA:B5:DF:E7:95:D7:BB\r\nm=video 9 UDP/TLS/RTP/SAVPF 98\r\nc=IN IP4 0.0.0.0\r\na=mid:locQqN\r\na=extmap:1 urn:ietf:params:rtp-hdrext:framemarking\r\na=extmap:4 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:98 H264/90000\r\na=rtcp-fb:98 goog-remb\r\na=fmtp:98 packetization-mode=1;profile-level-id=42e01f;level-asymmetry-allowed=1\r\n" }
额外注意事项
- 确保所有JSON键值对使用冒号分隔(你提供的
request_offer消息中误用了逗号,虽然服务器返回了Offer,但实际发送时需修正为{"command": "request_offer"}) - 检查
fingerprint字段的完整性,确保SHA-256值无缺失或格式错误 - 使用libdatachannel时,建议直接通过库的API生成Answer的SDP,而非手动构造,可大幅降低格式错误概率
内容的提问来源于stack exchange,提问作者Nuri Akın
相关产品推荐
相关产品推荐

