WebRTC通過ICE技術可以實現(xiàn)客戶端P2P連接盏浙,但是在兩端進行P2P連接前還需要先進行媒體協(xié)商臼膏。WebRTC媒體協(xié)商技術主要包括兩部分:一部分是SDP(Session Description Protocol)協(xié)議科展,另一部分是JSEP(JavaScript Session Establishment Protocol)協(xié)議芬膝。
SDP協(xié)議
SDP協(xié)議述呐,即會話描述協(xié)議菇晃,它提供一種描述實時音視頻通信所需的各種參數(shù)的通用描述,是一個文本信息呆万。簡單來說商源,SDP就是客戶端的各端的音視頻實時通信的能力,能力指的是各端所支持的音視頻編解碼能力及相關參數(shù)谋减、傳輸協(xié)議和音視頻媒體類型等等牡彻。SDP描述的基本結構如下圖所示。
SEP協(xié)議
SEP協(xié)議出爹,即JavaScript會話建立協(xié)議庄吼,是一個信令控制協(xié)議。在媒體協(xié)商的過程中严就,JSEP協(xié)議通過“Offer/Answer”媒體協(xié)商機制总寻,承載著遵循SDP協(xié)議的信息進行數(shù)據(jù)交互。JSEP數(shù)據(jù)一般使用JSON數(shù)據(jù)結構表示梢为,比如使用“type”字段表示JSEP類型渐行,“sdp”字段承載 SDP 文本數(shù)據(jù)轰坊,結合RTCPeerConnection API 的媒體協(xié)商流程如下圖所示。
- 客戶端A創(chuàng)建RTCPeerConnection對象祟印,然后調用offerForConstraints 函數(shù)創(chuàng)建 SDP Offer信息肴沫,并通過setLocalDescription函數(shù)設置 RTCPeerConnection 的本地會話描述;
- 客戶端A將SDP Offer信息發(fā)送給信令服務器蕴忆,由信令服務器轉發(fā)給客戶端B颤芬;
- 客戶端B收到客戶端A的SDP Offer 后,通過調用setRemoteDescription函數(shù)保存客戶端A的SDP套鹅;
- 客戶端B創(chuàng)建RTCPeerConnection對象站蝠,然后調用answerForConstraints函數(shù)創(chuàng)建SDP Answer信息,并通過setLocalDescription函數(shù)設置 RTCPeerConnection 的本地會話描述芋哭;
- 客戶端B將SDP Answer信息發(fā)送給信令服務器沉衣,由信令服務器轉發(fā)給客戶端A;
- 客戶端A收到客戶端B的SDP Answer后减牺,通過調用setRemoteDescription函數(shù)保存客戶端A的SDP豌习;
至此,客戶端A和客戶端B都拿到雙方的SDP信息拔疚,然后雙方就可以通過ICE技術正式進行P2P連接肥隆。