WebRTCï¼Web 宿¶éä¿¡ï¼æ¯ä¸ç§ä½¿ Web åºç¨ç¨åºåç«ç¹è½å¤æè·åéæ©æ§å°æµå¼ä¼ è¾é³é¢æè§é¢åªä½ï¼ä»¥å卿µè§å¨ä¹é´äº¤æ¢ä»»ææ°æ®çèæ éä¸é´ä»¶çææ¯ãWebRTC çä¸ç³»åæ å使å¾å¨ä¸éè¦ç¨æ·å®è£ æä»¶æä»»ä½å ¶ä»ç¬¬ä¸æ¹è½¯ä»¶çæ åµä¸ï¼å¯ä»¥å®ç°ç¹å¯¹ç¹æ°æ®å ±äº«åçµè¯ä¼è®®ã
WebRTC ç±å 个ç¸äºå ³èç API ååè®®ç»æï¼å®ä»¬å ±åå·¥ä½ä»¥å®ç°è¿ä¸ç®æ ãä½ å¨è¿éæ¾å°çææ¡£å°å¸®å©ä½ äºè§£ WebRTC çåºç¡ç¥è¯ï¼ä»¥åå¦ä½è®¾ç½®åä½¿ç¨æ°æ®ååªä½è¿æ¥çæ´å¤å 容ã
WebRTC æ¦å¿µåç¨æ³WebRTC æå¤ç§ç¨éï¼ä¸åªä½ææä¸åªä½æµ API ä¸èµ·ä½¿ç¨æ¶ï¼å®ä»¬ä¸º Web æä¾äºå¼ºå¤§çå¤åªä½åè½ï¼å æ¬æ¯æé³é¢åè§é¢ä¼è®®ãæä»¶äº¤æ¢ãå±å¹å ±äº«ã身份管ç以åä¸ä¼ ç»çµè¯ç³»ç»çæ¥å£ï¼å æ¬åé DTMFï¼æé®æ¨å·ï¼ä¿¡å·ãä¸¤ä¸ªå¯¹çæ¹ä¹é´çè¿æ¥å¯ä»¥å¨ä¸éè¦ä»»ä½ç¹æ®é©±å¨ç¨åºææä»¶çæ åµä¸å»ºç«ï¼å¹¶ä¸é常å¯ä»¥å¨æ²¡æä»»ä½ä¸é´æå¡å¨çæ åµä¸å»ºç«è¿æ¥ã
ä¸¤ä¸ªå¯¹çæ¹ä¹é´çè¿æ¥ç± RTCPeerConnection
æ¥å£è¡¨ç¤ºã䏿¦ä½¿ç¨ RTCPeerConnection
建ç«å¹¶æå¼äºè¿æ¥ï¼å°±å¯ä»¥åè¿æ¥æ·»å åªä½æµï¼MediaStream
ï¼ææ°æ®ééï¼RTCDataChannel
ï¼ã
åªä½æµå¯ä»¥ç±ä»»ææ°éçåªä½ä¿¡æ¯è½¨éç»æï¼è½¨éç±åºäº MediaStreamTrack
æ¥å£ç对象表示ï¼å¯ä»¥å
å«å¤ç§ç±»åçåªä½æ°æ®ï¼å
æ¬é³é¢ãè§é¢åææ¬ï¼ä¾å¦åå¹çè³ç« èåç§°ï¼ã大夿°æµè³å°å
å«ä¸ä¸ªé³é¢è½¨éåå¯è½ä¹å
å«ä¸ä¸ªè§é¢è½¨éï¼å¹¶ä¸å¯ä»¥ç¨äºåé忥æ¶å®æ¶åªä½æåå¨çåªä½ä¿¡æ¯ï¼ä¾å¦æµåªä½çµå½±ï¼ã
ä½ è¿å¯ä»¥ä½¿ç¨ä¸¤ä¸ªå¯¹çæ¹ä¹é´çè¿æ¥æ¥äº¤æ¢ä»»æäºè¿å¶æ°æ®ï¼ä½¿ç¨ RTCDataChannel
æ¥å£ãè¿å¯ä»¥ç¨äºååä¿¡éä¿¡æ¯ãå
æ°æ®äº¤æ¢ã游æç¶ææ°æ®å
ãæä»¶ä¼ è¾ï¼çè³ä½ä¸ºæ°æ®ä¼ è¾ç主è¦ééã
WebRTC å¨ç°ä»£æµè§å¨ä¸é常å¾å°å¾å¥½çæ¯æï¼ä½ä»åå¨ä¸äºä¸å ¼å®¹æ§ãadapter.js åºæ¯ä¸ä¸ªå¯ä»¥ä½¿åºç¨ç¨åºå åè¿äºä¸å ¼å®¹æ§çå½±åçå«çã
WebRTC åèç±äº WebRTC æä¾äºä¸ç³»åå ±åå·¥ä½ä»¥å®æåç§ä»»å¡çæ¥å£ï¼æä»¬å°åèèµææç±»å«è¿è¡äºååã请åé ä¾§è¾¹æ ä¸çæåæ¯é¡ºåºæåçå表ã
è¿æ¥è®¾ç½®å管çè¿äºæ¥å£ãåå ¸åç±»åç¨äºè®¾ç½®ãæå¼å管ç WebRTC è¿æ¥ãå æ¬è¡¨ç¤ºå¯¹çåªä½è¿æ¥ãæ°æ®ééåå¨äº¤æ¢æ¯ä¸ªå¯¹çæ¹çè½åä¿¡æ¯ä»¥éæ©æä½³é ç½®çæ¥å£æ¶ä½¿ç¨çæ¥å£ã
æ¥å£RTCPeerConnection
表示æ¬å°è®¡ç®æºä¸è¿ç¨å¯¹çæ¹ä¹é´ç WebRTC è¿æ¥ãå®ç¨äºå¤çä¸¤ä¸ªå¯¹çæ¹ä¹é´çæ°æ®æµå¼ä¼ è¾ã
RTCDataChannel
è¡¨ç¤ºè¿æ¥çä¸¤ä¸ªå¯¹çæ¹ä¹é´çååæ°æ®ééã
RTCDataChannelEvent
表示å¨å° RTCDataChannel
éå å° RTCPeerConnection
æ¶åççäºä»¶ãä½¿ç¨æ¤æ¥å£åéçå¯ä¸äºä»¶æ¯ datachannel
ã
RTCSessionDescription
表示ä¼è¯çåæ°ãæ¯ä¸ª RTCSessionDescription
å
æ¬ä¸ä¸ªæè¿° type
ï¼æç¤ºå
¶æè¿°çæè®®/åºçååè¿ç¨çåªä¸é¨åï¼ä»¥åä¼è¯ç SDP æè¿°ç¬¦ã
RTCStatsReport
æä¾æå
³è¿æ¥æè¿æ¥ä¸ç个å«è½¨éçç»è®¡ä¿¡æ¯ç详ç»ä¿¡æ¯ï¼å¯ä»¥éè¿è°ç¨ RTCPeerConnection.getStats()
æ¥è·åæ¥åã
RTCIceCandidate
表示ç¨äºå»ºç« RTCPeerConnection
çåé交äºå¼è¿æ¥å»ºç«ï¼ICEï¼æå¡å¨ã
RTCIceTransport
表示æå ³ ICE ä¼ è¾çä¿¡æ¯ã
RTCPeerConnectionIceEvent
表示ä¸ç®æ ICE åé项ç¸å
³çäºä»¶ï¼éå¸¸æ¯ RTCPeerConnection
ãæ¤ç±»åä»
æä¸ä¸ªäºä»¶ï¼icecandidate
ã
RTCRtpSender
管çå¨ RTCPeerConnection
ä¸ç MediaStreamTrack
çæ°æ®ç¼ç åä¼ è¾ã
RTCRtpReceiver
管çå¨ RTCPeerConnection
ä¸ç MediaStreamTrack
çæ°æ®æ¥æ¶åè§£ç ã
RTCTrackEvent
ç¨äºè¡¨ç¤º track
äºä»¶çæ¥å£ï¼è¯¥äºä»¶æç¤ºå·²å° RTCRtpReceiver
对象添å å° RTCPeerConnection
对象ï¼è¡¨ç¤ºå·²å建并添å äºæ°çä¼ å
¥ MediaStreamTrack
è³ RTCPeerConnection
ã
RTCSctpTransport
æä¾æè¿°æµæ§å¶ä¼ è¾åè®®ï¼SCTPï¼ä¼ è¾çä¿¡æ¯ï¼å¹¶æä¾ä¸ç§è®¿é®åºå±çç¨äºææ RTCPeerConnection
çæ°æ®ééåé忥æ¶ç SCTP å
çæ°æ®æ¥ä¼ è¾å±å®å
¨ï¼DTLSï¼ä¼ è¾çæ¹å¼ã
bufferedamountlow
è¡¨ç¤ºæ°æ®ééå½åç¼å²çæ°æ®éï¼ç±å
¶ bufferedAmount
屿§æç¤ºï¼å·²ç»åå°å°æä½äºééçæå°ç¼å²æ°æ®å¤§å°ï¼ç± bufferedAmountLowThreshold
æå®ï¼ã
close
æ°æ®éé已宿å
³éè¿ç¨ï¼ç°å¨å¤äº closed
ç¶æãæ¤æ¶ï¼å
¶åºå±æ°æ®ä¼ è¾å®å
¨å
³éãä½ å¯ä»¥éè¿è§å¯ closing
äºä»¶æ¥å¨å
³é宿ä¹åå¾å°éç¥ã
closing
RTCDataChannel
已转æ¢ä¸º closing
ç¶æï¼è¡¨ç¤ºå®å°å¾å¿«å
³éãä½ å¯ä»¥éè¿è§å¯ close
äºä»¶æ¥æ£æµå
³éè¿ç¨ç宿ã
connectionstatechange
è¿æ¥ç¶æï¼å¯ä»¥éè¿ connectionState
访é®ï¼å·²æ´æ¹ã
datachannel
æä¸ä¸ªæ°ç RTCDataChannel
å¨è¿ç¨å¯¹çæ¹æå¼æ°æ°æ®ééä¹åå¯ç¨ãæ¤äºä»¶çç±»åæ¯ RTCDataChannelEvent
ã
error
è¡¨ç¤ºæ°æ®ééä¸åçé误ç RTCErrorEvent
ã
error
表示 RTCDtlsTransport
ä¸åçé误ç RTCErrorEvent
ãæ¤éè¯¯å°æ¯ dtls-failure
æ fingerprint-failure
ã
gatheringstatechange
RTCIceTransport
çæ¶éç¶æå·²æ´æ¹ã
icecandidate
æ¯å½æ¬å°è®¾å¤è¯å«åºä¸ä¸ªæ°ç ICE åééè¦éè¿è°ç¨ setLocalDescription()
æ·»å å°æ¬å°å¯¹çæ¹æ¶ï¼å°±ä¼åéç RTCPeerConnectionIceEvent
ã
icecandidateerror
è¡¨ç¤ºå¨æ¶é ICE åéæ¶åçé误ç RTCPeerConnectionIceErrorEvent
ã
iceconnectionstatechange
å¨å
¶ ICE è¿æ¥çç¶æï¼å¯éè¿ iceconnectionstate
屿§è®¿é®ï¼æ´æ¹æ¶ï¼ä¼åéç» RTCPeerConnection
ã
icegatheringstatechange
å¨å
¶ ICE æ¶éç¶æï¼å¯éè¿ icegatheringstate
屿§è®¿é®ï¼æ´æ¹æ¶ï¼ä¼åéç» RTCPeerConnection
ã
message
卿°æ®éé䏿¶å°æ¶æ¯ã该äºä»¶çç±»å为 MessageEvent
ã
negotiationneeded
éç¥ RTCPeerConnection
éè¦éè¿è°ç¨ createOffer()
ï¼ç¶åæ¯ setLocalDescription()
æ¥æ§è¡ä¼è¯ååã
open
RTCDataChannel
çåºå±æ°æ®ä¼ è¾å·²æåæå¼æéæ°æå¼ã
selectedcandidatepairchange
RTCIceTransport
ä¸çå½åéæ©ç ICE åéå¯¹å·²æ´æ¹æ¶è§¦åçäºä»¶ã
track
彿åååäºåªä½æµçæµå¼ä¼ è¾åï¼å°å RTCPeerConnection
æ·»å æ°è½¨éæ¶ï¼ä¼åéç±»å为 RTCTrackevent
ç track
äºä»¶ã
signalingstatechange
å¨å
¶ signalingstate
æ´æ¹æ¶ï¼ä¼åéå°å¯¹çè¿æ¥ãè¿æ¯ç±äºè°ç¨ setLocalDescription()
æ setRemoteDescription()
å¼èµ·çã
statechange
RTCDtlsTransport
çç¶æå·²æ´æ¹ã
statechange
RTCIceTransport
çç¶æå·²æ´æ¹ã
statechange
RTCSctpTransport
çç¶æå·²æ´æ¹ã
rtctransform
ç¼ç çè§é¢æé³é¢å¸§å·²åå¤å¥½å¨ worker ä¸ä½¿ç¨è½¬æ¢æµè¿è¡å¤çã
RTCSctpTransport.state
æç¤º RTCSctpTransport
å®ä¾çç¶æã
è¿äº API ç¨äºç®¡çç¨æ·èº«ä»½åå®å ¨æ§ï¼ä»¥ä¾¿ä¸ºè¿æ¥è®¤è¯ç¨æ·ã
RTCIdentityProvider
ä½¿ç¨æ·ä»£çè½å¤è¯·æ±çææéªè¯èº«ä»½æè¨ã
RTCIdentityAssertion
表示å½åè¿æ¥çè¿ç¨å¯¹çæ¹ç身份ã妿尿ªè®¾ç½®åéªè¯å¯¹çæ¹ï¼åæ¤æ¥å£è¿å null
ã䏿¦è®¾ç½®ï¼ä¾¿æ æ³æ´æ¹ã
RTCIdentityProviderRegistrar
注å身份æä¾åï¼IdPï¼ã
RTCCertificate
表示 RTCPeerConnection
ç¨äºèº«ä»½éªè¯çè¯ä¹¦ã
RTCDTMFSender
管ç RTCPeerConnection
çåé³å¤é¢ï¼DTMFï¼ä¿¡å·çç¼ç åä¼ è¾ã
RTCDTMFToneChangeEvent
ç± tonechange
äºä»¶ä½¿ç¨ï¼æç¤º DTMF é³è°å·²å¼å§æç»æãæ¤äºä»¶ä¸å泡ï¼é¤éå¦æè¯´æï¼ï¼ä¹ä¸å¯åæ¶ï¼é¤éå¦æè¯´æï¼ã
tonechange
è¿æ¥ä¸å·²å¼å§ææ¾æ°ç DTMF é³è°ï¼æè
RTCDTMFSender
ç toneBuffer
ä¸çæåä¸ä¸ªé³è°å·²åéï¼ä¸ç¼å²åºç°å¨ä¸ºç©ºãäºä»¶çç±»å为 RTCDTMFToneChangeEvent
ã
è¿äºæ¥å£åäºä»¶ç¨äºä½¿ç¨å¨ worker ä¸è¿è¡çè½¬æ¢æµå¤çä¼ å ¥åä¼ åºçç¼ç è§é¢åé³é¢å¸§ã
æ¥å£RTCRtpScriptTransform
ç¨äºå° worker ä¸è¿è¡çè½¬æ¢æµæå ¥ RTC æµæ°´çº¿çæ¥å£ã
RTCRtpScriptTransformer
RTCRtpScriptTransform
ç worker 对åºé¡¹ï¼ä¼ 鿥èªä¸»çº¿ç¨çé项ï¼ä»¥åå¯ç¨äºéè¿ TransformStream
ä¼ éç¼ç 帧çå¯è¯»æµåå¯åæµã
RTCEncodedVideoFrame
表示è¦å¨ RTC æµæ°´çº¿ä¸è¿è¡è½¬æ¢çç¼ç è§é¢å¸§ã
RTCEncodedAudioFrame
表示è¦å¨ RTC æµæ°´çº¿ä¸è¿è¡è½¬æ¢çç¼ç é³é¢å¸§ã
RTCRtpReceiver.transform
ç¨äºå°è½¬æ¢æµæå ¥æ¥æ¶å¨æµæ°´çº¿ä»¥å¤çä¼ å ¥çç¼ç è§é¢åé³é¢å¸§ç屿§ã
RTCRtpSender.transform
ç¨äºå°è½¬æ¢æµæå ¥åé卿µæ°´çº¿ä»¥å¤çä¼ åºçç¼ç è§é¢åé³é¢å¸§ç屿§ã
rtctransform
RTC 转æ¢å·²åå¤å¥½å¨ worker ä¸è¿è¡ï¼æè å·²åå¤å¤çç¼ç è§é¢æé³é¢å¸§æ¶è§¦åçäºä»¶ã
æ¬æä»ç»äºæå»º WebRTC API çåºå±åè®®ã
ä»ç»äº WebRTC è¿æ¥çå·¥ä½åç以åå¦ä½å°åç§åè®®åæ¥å£ç»åèµ·æ¥ä»¥æå»ºåè½å¼ºå¤§çéä¿¡åºç¨ç¨åºçæåã
WebRTC å è®¸ä½ å¨æµè§å¨åºç¨ç¨åºä¸æå»ºä»»ææ°æ®ãé³é¢æè§é¢ï¼æå ¶ä¸çä»»æç»åï¼çç¹å¯¹ç¹éä¿¡ã卿¬æä¸ï¼æä»¬å°ä»å»ºç«è¿æ¥ä¸ç´å°å ³éè¿æ¥ï¼ä¸åéè¦æ¶ï¼çæ´ä¸ª WebRTC ä¼è¯çå½å¨æè¿è¡æ¢è®¨ã
å®ç¾å忝ä¸ç§å»ºè®®ä½ ç信令æµç¨éµå¾ªç设计模å¼ï¼å®å¨ååè¿ç¨ä¸æä¾äºéææ§ï¼åæ¶å è®¸åæ¹é½æ¯æä¾æ¹æåºçæ¹ï¼èæ éè¿è¡å¤§éçç¼ç æ¥åºå两è ã
å®å°ä¸ä¸ªä¹åç示ä¾å建çãåºäº WebSocket çè天系ç»è½¬æ¢ä¸ºæç¨å示ä¾ï¼å¹¶æ·»å äºåä¸è ä¹é´è¿è¡è§é¢éè¯çæ¯æãè天æå¡å¨ç WebSocket è¿æ¥ç¨äº WebRTC 信令ã
ä»ç»äº WebRTC éè¦æµè§å¨æ¯æçç¼è§£ç å¨ä»¥ååç§æµè¡æµè§å¨æ¯æçå¯éç¼è§£ç å¨ãæ¬æè¿å æ¬äºä¸ä¸ªå¸®å©ä½ éæ©æéåä½ éæ±çç¼è§£ç å¨çæåã
æ¬æåä»ç»äºå¦ä½ä½¿ç¨å¯¹çè¿æ¥åç¸å
³ç RTCDataChannel
å¨ä¸¤ä¸ªå¯¹çæ¹ä¹é´äº¤æ¢ä»»ææ°æ®ã
WebRTC ä¸è¿æ¥å°èå¼çµè¯ç³»ç»çç½å
³è¿è¡äº¤äºçæ¯æï¼å
æ¬ä½¿ç¨ RTCDTMFSender
æ¥å£åé DTMF é³è°ãæ¬æåå±ç¤ºäºå¦ä½åå°è¿ä¸ç¹ã
æ¬æåå±ç¤ºäºä¸ä¸ª Web åºç¨ç¨åºå¦ä½ä½¿ç¨å¨ worker ä¸è¿è¡ç TransformStream
æ¥ä¿®æ¹ä¼ å
¥åä¼ åºç WebRTC ç¼ç è§é¢åé³é¢å¸§ã
WebRTC ç»ç»å¨ GitHub 䏿ä¾äº WebRTC éé 卿¥è§£å³ä¸åæµè§å¨ç WebRTC å®ç°çå ¼å®¹æ§é®é¢ãéé 卿¯ä¸ä¸ª JavaScript å«çï¼ä½¿ä½ ç代ç åªéæç §è§èç¼åï¼ä¾¿å¯ä»¥å¨æææ¯æ WebRTC çæµè§å¨ä¸âæ£å¸¸å·¥ä½âã
RTCDataChannel
æ¥å£æ¯ä¸ä¸ªå
è®¸ä½ å¨ä¸¤ä¸ªå¯¹çæ¹ä¹é´æå¼ä¸ä¸ªééï¼éè¿è¯¥ééä½ å¯ä»¥åé忥æ¶ä»»ææ°æ®ï¼çç¹æ§ãAPI æ
æè®¾è®¡æä¸ WebSocket API 类似ï¼ä»¥ä¾¿å¯ä»¥ä½¿ç¨ç¸åçç¼ç¨æ¨¡åã
æ¬æç¨å°éæ¥æå¯¼ä½ å¦ä½ä½¿ç¨ Peer.js æå»ºçµè¯ã
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4