SDP绠€浠嬩粈涔堟槸浼氳瘽锛熻棰戣亰澶┿€佽闊抽€氳瘽銆佽棰戜細璁瓑閮界畻浣滀細璇濄€備负浠€涔堣杩涜濯掍綋璋堝垽锛熸瘡涓弬涓庝細璇濈殑鐢ㄦ埛鐨勭幆澧冨拰閰嶇疆閮戒笉涓€鑷达紝闇€瑕佸崗鍟嗕竴涓吋瀹圭殑鏈€浼樻柟妗堛€係DP鏄粈涔堟牱瀛愮殑锛熷鏂囨湰琛岋紝姣忚鐨勬牸寮忎负=銆傚叿浣撶湅涓€涓婼DP锛屽鍒朵笅闈唬鐮佸埌鎺у埗鍙癊nter~constPeerConnection=window.RTCPeerConnection||window.mozRTCPeerConnection||window.webkitRTCPeerConnection;constpeer=newPeerConnection();navigator.mediaDevices.getUserMedia({video:true,audio:true}).then(stream=>{stream.getTracks().forEach(track=>{peer.addTrack(track,stream);});peer.createOffer().then(e=>{console.log(e.sdp);})}).catch(e=>alert('鏃犳硶鑾峰彇鎽勫儚澶翠俊鎭?));SDP淇℃伅璇︾粏鍗忚鐗堟湰(v=)v=0SDP鐗堟湰(鍗忚鐗堟湰鍙?銆傚綋鍓嶈鑼冪増鏈负0Source(o=)o=涓庝細璇濇墍鏈夎€呯浉鍏崇殑鍙傛暟锛堟墍鏈夎€?鍒涘缓鑰呭拰浼氳瘽鏍囪瘑绗?銆?username>浼氳瘽鍙戣捣鑰呯殑鍚嶇О銆傚鏋滀笉鎻愪緵锛岀敤鈥?鈥濊〃绀虹敤鎴峰悕涓嶈兘鍖呭惈绌烘牸锛?sess-id>鏄富鍙柟鐨勪細璇濇爣璇嗭紱鏄細璇濈増鏈彿銆傚ぇ閮ㄥ垎鏍囦负0锛?缃戠粶绫诲瀷>缃戠粶绫诲瀷銆侷N浠h〃Internet缃戠粶绫诲瀷锛岀洰鍓嶅彧瀹氫箟浜嗚繖涓綉缁滅被鍨嬶紱鍦板潃绫诲瀷銆傜洰鍓嶆敮鎸両PV4鍜孖PV6鍦板潃绫诲瀷锛?unicast-address>浼氳瘽鍙戣捣鑰呯殑IP鍦板潃銆備細璇濆悕绉?s=)s=<浼氳瘽鍚嶇О>姝や細璇濈殑鏍囬鎴栦細璇濆悕绉?Sessionname)銆俆iming(t=)t=浼氳瘽鐨勫紑濮嬫椂闂村拰缁撴潫鏃堕棿锛圱imesessionstartsandstops锛夈€侻ediadescription(m=)m=/...濯掍綋琛屾弿杩颁簡鍙戦€佹柟鏀寔鐨勫獟浣撶被鍨嬶紙濯掍綋淇℃伅锛夈€?media>濯掍綋鍚嶇О锛堥煶棰?瑙嗛锛夈€傝〃绀哄寘鍚煶棰戠被鍨嬫垨瑙嗛绫诲瀷锛?port>/娴佷紶杈撶鍙e彿銆傝〃绀哄湪鏈湴绔彛xxxx涓婂彂閫侀煶棰?瑙嗛娴侊紱娴佸獟浣撳崗璁€備緥濡傦細馃尠RTP/SAVPF琛ㄧず浣跨敤UDP浼犺緭RTP鍖咃紱馃尠TCP/RTP/SAVPF琛ㄧず浣跨敤TCP浼犺緭RTP鍖咃紱馃尠UDP/TLS/RTP/SAVPF琛ㄧず浣跨敤UDP浼犺緭RTP鍖咃紝浣跨敤TLS鍔犲瘑锛涙渶鍚庝竴涓猄AVPF鏈夊嚑涓叾浠栧€硷細AVP銆丼AVP銆丄VPF銆丼AVPF銆侫VP琛ㄧずAVprofileS琛ㄧずsecureF琛ㄧずfeedback浠庣鍥涗綅寮€濮嬮兘鏄獟浣撴牸寮忔弿杩般€傝繛鎺ユ暟鎹?c=)c=濯掍綋杩炴帴淇℃伅锛圕onnectioninformation锛夈€傚湪姣忎釜濯掍綋鎻忚堪涓嚦灏戝寘鍚竴涓猚=瀛楁锛屾垨鍦ㄤ細璇濇弿杩颁腑鍖呭惈涓€涓猚=瀛楁銆?缃戠粶绫诲瀷>缃戠粶绫诲瀷銆侷N浠h〃Internet缃戠粶绫诲瀷锛岀洰鍓嶅彧瀹氫箟浜嗚繖涓綉缁滅被鍨嬶紱鍦板潃绫诲瀷銆傜洰鍓嶆敮鎸両PV4鍜孖PV6鍦板潃绫诲瀷锛?unicast-address>浼氳瘽鍙戣捣鑰呯殑IP鍦板潃銆傚睘鎬?a=)a=<灞炴€?|:灞炴€э紙attribute锛夋槸鎵╁睍SDP鐨勪富瑕佹墜娈碉紝鍒嗕负浼氳瘽绾у睘鎬у拰濯掍綋绾у睘鎬э細鏁翠釜浼氳鑰屼笉鏄釜鍒獟浣撱€傪煂癮=group:BUNDLEaudiovideo閫氳繃mid鏍囪瘑杩炴帴澶氫釜濯掍綋灞炴€э紱馃尠a=msid-semantic锛歐MSma琛ㄧずwebrtc濯掍綋娴侊紙WebrtcMediaStreams锛夛紱濯掍綋绾у睘鎬э細鍦ㄥ獟浣撴弿杩版祦淇℃伅涓坊鍔犵浉鍏冲獟浣撱€傪煂癮=mid:audio涓婅堪BUNDLE涓娇鐢ㄧ殑濯掍綋鏍囪瘑绗︼紱馃尠a=msid:mata杩炴帴涓嶅悓鐨勫獟浣撴弿杩帮紝浣跨敤鐩稿悓鐨凪ediaStreams锛涴煂癮=sendonly琛ㄧずmediasender锛屽叾浠栫被鍨嬶細recvonly,sendrecv,inactive;馃尠a=rtcp:9INIP40.0.0.0鐢ㄤ簬浼犺緭rtcp鍦板潃鍜岀鍙o紱馃尠a=rtcp-mux琛ㄧずrtp锛宺tcp鍖呬娇鐢ㄥ悓涓€涓鍙d紶杈擄紱馃尠a=ice-xxx:xxxice鍗忓晢杩囩▼涓殑瀹夊叏楠岃瘉淇℃伅锛涴煂癮=fingerprint:xxx琛ㄧずdtls鍗忓晢杩囩▼涓渶瑕佺殑璁よ瘉淇℃伅锛涴煂癮=setup:actpass琛ㄧず鍦╠tls鍗忓晢杩囩▼涓璫lient鍙互鏄痗lient涔熷彲浠ユ槸server锛涴煂癮=rtpmap:111opus/48000/2payloadtype111锛岀紪鐮佹牸寮弌pus锛?8000涓烘椂閽燂紝2涓洪€氶亾鏁帮紱馃尠a=rtcp-fb:111nack鏀寔涓㈠寘閲嶄紶锛涴煂癮=rtcp-fb:111nackpli鏀寔鍏抽敭甯т涪鍖呴噸浼狅紱馃尠a=rtcp-fb:111transport-cc琛ㄧずopus缂栫爜鏀寔rtcp鎺у埗鎷ュ锛涴煂癮=fmtp:111minptime=10;useinbandfec=1;maxplaybackrate=16000encodesopus鍙€夎ˉ鍏呰鏄庯紝minptime琛ㄧず鏈€灏忔墦鍖呮椂闂翠负10ms锛寀seinbandfec=1琛ㄧず浣跨敤opus缂栫爜鍐呯疆鐨刦ec鐗规€э紱馃尠a=ssrc:1370113029cname:NMediaAudiocname鐢ㄤ簬鏍囪瘑涓€涓暟鎹簮锛屽彂鐢熷啿绐佹椂ssrc鍙兘浼氭敼鍙橈紝浣哻name涓嶄細鏀瑰彉锛屽悓鏃朵篃浼氬嚭鐜板湪rtcp鍖呬腑鐨凷DEC涓紝鐢ㄤ簬闊宠棰戝悓姝?馃尠a=candidate:11udp2013266431x.x.x.x43342typhostgeneration0琛ㄧず鍊欓€変汉鐨勪紶杈撳湴鍧€锛岃瑙併€傚弬鑰僪ttps://tools.ietf.org/html/rfc4566https://blog.piasy.com/2018/10/14/WebRTC-API-Overview/index.htmlhttps://blog.csdn.net/dzxs_gb28181/article/details/80951094https://blog.csdn.net/chinabinlang/article/details/79151589