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

Android集成D-ID WebRTC时setRemoteDescription报空会话描述错误

问题描述

我正在开发Android应用,集成D-ID服务,该服务接收图片与文本输入,返回带图片动效并播报文本的视频流,基于WebRTC实现传输。发送初始Offer后,处理服务端返回的Answer时受阻——调用setRemoteDescription的onSetFailure回调收到**"Session description is NULL"**错误。已尝试转JSON、调整代码执行顺序等方法,问题仍未解决。

附相关信息:

  • 客户端核心代码片段
  • 服务端返回的SDP字符串
  • sdpoker检测出的11个SDP错误
排查建议
  • 验证服务端返回SDP的完整性
    直接打印服务端返回的原始数据,检查是否存在空值、截断或格式损坏。比如传输过程中是否因HTTP解析、JSON序列化/反序列化导致SDP内容丢失或篡改。结合sdpoker检测出的11个错误,逐一核对SDP格式问题(如无效媒体行、缺失必选属性、错误格式标识等),WebRTC对SDP格式要求严格,微小错误都会导致解析失败。

  • 检查SessionDescription对象创建逻辑
    确保创建SessionDescription时传入的SDP字符串非空且格式正确,避免传入null或空字符串:

    // 正确示例:先校验SDP有效性再创建对象
    String sdpFromServer = extractValidSdp(response);
    if (TextUtils.isEmpty(sdpFromServer)) {
        // 提前处理空SDP场景
        return;
    }
    SessionDescription answer = new SessionDescription(SessionDescription.Type.ANSWER, sdpFromServer);
    

    除非是针对sdpoker错误的明确修复,否则不要对SDP进行不必要的转义或修改。

  • 确认PeerConnection状态与执行顺序
    调用setRemoteDescription时,确保PeerConnection处于NEW或CONNECTING状态,未被意外销毁。同时严格遵循WebRTC流程:必须在setLocalDescription的onSetSuccess回调触发后,再处理服务端Answer并调用setRemoteDescription,避免异步顺序混乱。

  • 测试SDP解析能力
    将服务端返回的SDP手动传入SessionDescription构造函数进行测试,观察是否抛出异常,直接定位解析环节的问题。针对sdpoker检测出的错误,可尝试手动修正SDP(仅用于测试),确认是否能正常解析,若修正后问题解决,需联系D-ID服务端确认返回SDP的合规性。

  • 排查网络传输与解析环节
    确认HTTP响应的Content-Type设置正确,避免因编码问题导致SDP乱码或截断。若使用第三方网络库(如Retrofit、OkHttp),检查响应映射逻辑,确保sdp字段被正确解析到对应属性,未出现字段丢失情况。

内容的提问来源于stack exchange,提问作者Samuel Mayor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:53:19