You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用libdatachannel连接OvenMediaEngine时SDP解析失败求助

问题解决:OvenMediaEngine解析SDP失败及服务器崩溃问题

核心问题分析

从错误日志和你提供的消息格式来看,主要存在两个关键问题:

  1. SDP格式不符合OME解析规范,导致返回Could not parse SDP错误
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 22:47:04