webRTC PC端API使用

webRTC通訊過程:

image.png
步驟:
1:clientA建立peer對象,打開本地媒體流,將媒體流添加到peer中。調用peer對象的createOffer方法建立一個用於offer的sdp
2:clientA將sdp傳送到服務端
3:服務端將sdp發送給clientB
4:clientB建立peer對象,保存clientA的sdp並生成answer的sdp
5:clientB將sdp傳送到服務端
6:服務端將sdp發送給clientA
7:clientA保存clientB的sdp到本地
8:clientA和clientB進行點對點通訊html

其餘補充:
1:webRTC通訊使用tcp協議
2:點對點通訊路由查找相關:ice、iceServers
3:NAT傳透參考博客:https://www.jianshu.com/p/373...
4:sdp:通用的會話描述協議,主要用來描述多媒體會話,用途包括會話聲明、會話邀請、會話初始化web

三個主要API:

1:RTCPeerConnection:構建兩個終端鏈接的api
2:getUserMedia:訪問設備的攝像頭及麥克風,獲取音頻,視頻流
3:RTCDataChannel:傳輸任意數據,此處用的少api

RTCPeerConnection相關API:
通訊過程使用api及參數:

createOffer():帶有特定的配置信息尋找遠端匹配機器(peer)的請求
createAnswer():在協調一條鏈接中的兩端offer/answers時,根據從遠端發來的offer生成一個answer
addStream():添加媒體流到遠端
removeStream():刪除媒體流
onaddstream():監聽遠端傳來的媒體流tcp

通話質量檢測api及參數:

getSenders()->getStats():獲取發送出去的通話質量數據
type:發送方向(主要檢測inBound-rtp)
bytesSent:發送的字節數(累計)
meidaType:媒體類型
packageSent:發送的包數
retransmittedPacketsSent:重傳包數
retransmittedPacketsSent:重傳字節數ide

getReceivers()->getStats():獲取接收的通話質量數據
type:發送方向(主要檢測inBound-rtp)
bytesReceived:接收的字節數(累計)
meidaType:媒體類型
packetsReceived :接收的包數(累計)
packetsLost:丟包數
jitter:抖動值spa

getUserMedia相關API:
獲取媒體流:

navigator.mediaDevices.getUserMedia({
audio:true || {},
video:true || {}
}).then((stream)=>{})
getUserMedia傳遞的參數爲媒體流的配置:如麥克風,攝像頭的配置視頻

獲取屏幕共享媒體流:

navigator.mediaDevices.getDisplayMedia({
audio:true || {},
video:true || {}
}).then((stream)=>{})
獲取終端設備信息:
navigator.mediaDevices.enumerateDevices().then(arr=>{})
獲取攝像頭,麥克風型號等,經常使用戶攝像頭先後切換前獲取攝像頭數據htm

媒體流的設置:

stream中視頻流和音頻流是兩個不一樣的track
方法一:
stream.getVideoTracks():獲取視頻流
stream.getAudioTracks():獲取音頻流
stream. addTrack():添加某個流
stream.removeTrack(track):刪除某個流
方法二:
stream.getTracks().forEach((track)=>{
track信息:track.kind(track類型)
設置api:track.stop(),track.replaceTrack()
})對象

視頻通話過程當中攝像頭的打開關閉:

stream表明媒體流
stream.getVideoTracks()[0].enabled=true/falseblog

視頻通話過程當中切換先後攝像頭(未實現,查詢資料得到的方案):

更新媒體流,兩個終端從新協商sdp。步驟:
1:offer方:刪除舊的媒體流,添加新的媒體流。從新生成offer的sdp,發送到遠端

2:answer方:刪除舊的媒體流,添加新的媒體流。保存遠端媒體流,從新生成answer的sdp,發送到遠端

3:offer方:保存元媒體流
參考文檔:https://www.webrtc-experiment.com/docs/how-to-switch-streams.html

相關文章
相關標籤/搜索