Safari 11.0.3调用setRemoteDescription时SDP设置失败求助
搞定Safari 11.0.3中setRemoteDescription的ERROR_CONTENT错误
问题根因分析
看你提供的错误日志和SDP内容,这个问题其实是Safari 11.0.3的WebRTC实现太“挑剔”导致的——你的音频媒体流(m=audio)下面绑定了一堆不属于它的SSRC条目!
仔细看SDP:音频流的mid是audio,但下面的6个SSRC(10001到10006)全关联到了Video1到Video6这些视频流的标识,而且每个SSRC都绑了独立的msid。Safari 11对SDP的格式要求特别严格,它不认这种“一个音频流挂一堆视频SSRC”的结构,直接就抛出ERROR_CONTENT错误了,因为它搞不清这些媒体流到底该怎么对应。
具体修复步骤
你需要把SDP的结构理清楚,让每个媒体流的SSRC只属于自己:
把SSRC归位到对应媒体行
- 那些属于Video1到Video6的SSRC,得移到对应的
m=video媒体行下面(你贴的SDP里只显示了audio部分,记得补全video行并正确关联)。 - 音频流只保留属于它自己的SSRC,比如单独整个
Audio1的标识,和audio的mid绑定。
- 那些属于Video1到Video6的SSRC,得移到对应的
修正msid-semantic字段
你现在的a=msid-semantic: WMS Video1 Video2 Video3 Video4 Video5 Video6 Share0里没包含音频流的标识,得加上,改成这样:a=msid-semantic: WMS Audio1 Video1 Video2 Video3 Video4 Video5 Video6 Share0清理音频行的无关SSRC
调整后的音频媒体行大概是这个样子:m=audio 1 RTP/SAVPF 111 0 8 c=IN IP4 0.0.0.0 a=rtcp:1 IN IP4 0.0.0.0 a=ice-ufrag:cBvX a=ice-pwd:MaSZuPYUZT8yMk2HrcWWrc a=fingerprint:sha-256 22:8C:63:2C:02:75:DC:95:51:96:5C:63:94:A0:E7:B8:59:59:70:B1:7A:82:BA:C5:6D:4E:83:38:DE:13:31:3C a=sendrecv a=mid:audio a=rtcp-mux a=rtpmap:111 opus/48000/2 a=fmtp:111 minptime=10 a=rtpmap:0 PCMU/8000/2 a=rtpmap:8 PCMA/8000/2 a=maxptime:60 a=ssrc:10001 cname:Audio1 a=ssrc:10001 msid:Audio1 AudioLabel1 a=ssrc:10001 mslabel:Audio1 a=ssrc:10001 label:AudioLabel1
额外提醒
- Safari 11的WebRTC对SDP的兼容性比Chrome、Firefox差远了,尽量别在单个媒体行里塞跨流的SSRC。
- 如果你的SDP是VidyoWebRtcServer生成的,可能得检查下服务器配置——老版本的这类服务器对Safari的适配不太够,要么升级服务器,要么针对Safari单独生成兼容的SDP。
内容的提问来源于stack exchange,提问作者caisah
相关产品推荐
相关产品推荐

