ç°å¨æä»¬å·²ç»åç¬ä»ç»äºåè®®ï¼æä»¬å¯ä»¥å°å®ä»¬æ¾å¨ä¸èµ·ãæ¬æä»ç»äº WebRTC åç§ç¸å ³åè®®å¦ä½ç¸äºäº¤äºï¼ä»¥ä¾¿å¨å¯¹çä½ä¹é´åå»ºè¿æ¥åä¼ è¾æ°æ®å/æåªä½ã
夿³¨ï¼ è¿ä¸ªé¡µé¢éè¦å¯¹ç»æå®æ´æ§åå 容宿´æ§è¿è¡å¤§ééåãè¿éæå¾å¤ä¿¡æ¯ï¼ä½æ¯ç»ç»æ··ä¹±ï¼ç°å¨è¿éè·ä¸ªåå¾åºä¸æ ·ã
ä»ä¹æ¯æè®®/åºçåä¿¡å·ééï¼ä¸å¹¸çæ¯ï¼WebRTC ä¸é´æ æ³å建没ææç§æå¡å¨çè¿æ¥ãæä»¬ç§°ä¹ä¸ºä¿¡å·ééãæ è®ºæ¯éè¿çµåé®ä»¶ï¼æä¿¡çè¿æ¯ä¸åªä¿¡é¸½...ï¼é½å¯ä»¥éè¿ä»»ä½éä¿¡æ¹å¼äº¤æ¢ä¿¡æ¯ï¼è¿åå³äºä½ ã
æä»¬éè¦äº¤æ¢çä¿¡æ¯æ¯æè®®ååºçï¼å ¶ä¸ä» å å«ä¸é¢æå°ç SDPã
å°ä½ä¸ºè¿æ¥åèµ·è çåä¼´ A å°å建ä¸ä¸ªæè®®ãç¶åä»ä»¬å°ä½¿ç¨æéæ©çä¿¡å·ééå°æ¤æè®®åéç»å¯¹çä½ B. 对çä½ B å°ä»ä¿¡å·ééæ¥æ¶æè®®å¹¶å建åºçãç¶åï¼å®ä»¬å°æ²¿çä¿¡å·ééåéå对çä½ Aã
ä¼è¯æè¿°WebRTC è¿æ¥ä¸ç端ç¹é 置称为ä¼è¯æè¿°ã该æè¿°å æ¬å ³äºè¦åéçåªä½ç±»åï¼å ¶æ ¼å¼ï¼æ£å¨ä½¿ç¨çä¼ è¾åè®®ï¼ç«¯ç¹ç IP å°åå端å£ä»¥åæè¿°åªä½ä¼ è¾ç«¯ç¹æéçå ¶ä»ä¿¡æ¯çä¿¡æ¯ã使ç¨ä¼è¯æè¿°åè®®(SDP) æ¥äº¤æ¢ååå¨è¯¥ä¿¡æ¯; å¦æä½ æ³è¦æå ³ SDP æ°æ®æ ¼å¼ç详ç»ä¿¡æ¯ï¼å¯ä»¥å¨RFC 2327䏿¾å°ã
å½ç¨æ·å¯¹å¦ä¸ä¸ªç¨æ·å¯å¨ WebRTC è°ç¨æ¶ï¼å°å建ä¸ä¸ªç§°ä¸ºæè®®(offer) çç¹å®æè¿°ã该æè¿°å æ¬æå ³å¼å«è 建议çå¼å«é ç½®çææä¿¡æ¯ãæ¥æ¶è ç¶åç¨åºç(answer) è¿è¡ååºï¼è¿æ¯ä»ä»¬å¯¹å¼å«ç»æçæè¿°ã以è¿ç§æ¹å¼ï¼ä¸¤ä¸ªè®¾å¤å½¼æ¤å ±äº«ä»¥ä¾¿äº¤æ¢åªä½æ°æ®æéçä¿¡æ¯ãè¯¥äº¤æ¢æ¯ä½¿ç¨äº¤äºå¼è¿æ¥å»ºç« (ICE)(ICEå¤ççï¼è¿æ¯ä¸ç§åè®®ï¼å³ä½¿ä¸¤ä¸ªè®¾å¤éè¿ç½ç»å°åè½¬æ¢ (NAT)ã
ç¶åï¼æ¯ä¸ªå¯¹çç«¯ä¿æä¸¤ä¸ªæè¿°ï¼æè¿°æ¬èº«çæ¬å°æè¿°åæè¿°å¼å«çè¿ç«¯çè¿ç¨æè¿°ã
å¨é¦æ¬¡å»ºç«å¼å«æ¶ï¼è¿å¯ä»¥å¨å¼å«æ ¼å¼æå ¶ä»é ç½®éè¦æ´æ¹ç任使¶åæ§è¡æè®®/åºçè¿ç¨ãæ è®ºæ¯æ°å¼å«è¿æ¯éæ°é ç½®ç°æçå¼å«ï¼è¿äºé½æ¯äº¤æ¢æè®®ååçæå¿ éçåºæ¬æ¥éª¤ï¼ææ¶å¿½ç¥äº ICE å±ï¼
navigator.mediaDevices.getUserMedia()
æææ¬å°åªä½ãRTCPeerConnection
å¹¶è°ç¨ RTCPeerConnection.addTrack()
(æ³¨ï¼ addStream
å·²ç»è¿æ¶ã)RTCPeerConnection.createOffer()
æ¥å建ä¸ä¸ªæè®® (offer).RTCPeerConnection.setLocalDescription()
å°æè®® (Offer) 设置为æ¬å°æè¿° (å³ï¼è¿æ¥çæ¬å°æè¿°).RTCPeerConnection.setRemoteDescription()
å°å
¶è®°å½ä¸ºè¿ç¨æè¿° (ä¹å°±æ¯è¿æ¥çå¦ä¸ç«¯çæè¿°).RTCPeerConnection.addTrack()
æ·»å å°è¿æ¥ä¸ãRTCPeerConnection.createAnswer()
å建ä¸ä¸ªåºçãRTCPeerConnection.setLocalDescription()
å°åºç (answer) 设置为æ¬å°æè¿°ãæ¤æ¶ï¼æ¥åè
å·²ç»è·ç¥è¿æ¥åæ¹çé
ç½®äºãRTCPeerConnection.setRemoteDescription()
å°åºç设å®ä¸ºè¿ç¨æè¿°ã妿¤ï¼å¼å«è
å·²ç»è·ç¥è¿æ¥åæ¹çé
ç½®äºãè¿ä¸æ¥äºè§£è¯¥è¿ç¨ï¼æä»¬åç° localDescription å remoteDescription(è¿åè¿ä¸¤ä¸ªæè¿°ç屿§ ) å¹¶ä¸åå¤è§é£æ ·ç®åãå 为å¨éæ°ååæé´ï¼æè®®å¯è½ä¼è¢«æç»ï¼å ä¸ºå®æåºäºä¸å ¼å®¹çæ ¼å¼ï¼æ¯ä¸ªç«¯ç¹é½æè½åæåºä¸ç§æ°çæ ¼å¼ï¼ä½æ¯å®é ä¸ä¸ä¼åæ¢å°å¦ä¸ä¸ªå¯¹çä½ï¼ç´å°å®è¢«å ¶ä»å¯¹ç使¥å为æ¢ãå æ¤ï¼WebRTC 使ç¨å¾ å®åå½åçæè¿°ã
å½åæè¿°(ç± RTCPeerConnection.currentLocalDescription
å RTCPeerConnection.currentRemoteDescription
屿§è¿å ) è¡¨ç¤ºè¿æ¥å®é
使ç¨çæè¿°ãè¿æ¯åæ¹å·²ç»å®å
¨åæä½¿ç¨çææ°è¿æ¥ã
å¾
å®çæè¿°(ç± RTCPeerConnection.pendingLocalDescription
å RTCPeerConnection.pendingRemoteDescription
è¿å ) è¡¨ç¤ºå½ åå«è°ç¨ setLocalDescription() æ setRemoteDescription()ã
å½è¯»åæè¿° ( RTCPeerConnection.localDescription
å RTCPeerConnection.remoteDescription
) è¿åæ¶ï¼è¿åç弿¯ pendingLocalDescription / pendingRemoteDescription çå¼ï¼å¦ææå¾
å¤ççæè¿° ( ä¹å°±æ¯è¯´ï¼å¾
å¤çæè¿°ä¸ä¸º null ); å¦åï¼è¿åå½åæè¿° (currentLocalDescription / currentRemoteDescription )ã
éè¿è°ç¨ setLocalDescription() æ setRemoteDescription() æ´æ¹æè¿°æ¶ï¼å°æå®çæè¿°è®¾ç½®ä¸ºå¾ å®æè¿°ï¼WebRTC å±å¼å§è¯ä¼°æ¯å¦å¯ä»¥æ¥åã䏿¦å»ºè®®çæè¿°å·²ç»è¾¾æä¸è´ï¼currentLocalDescription æ currentRemoteDescription çå¼å°æ´æ¹ä¸ºå¾ å¤çæè¿°ï¼å¹¶ä¸å¾ å¤ççæè¿°å次设置为 nullï¼è¡¨ç¤ºæ²¡æå¾ å¤ççæè¿°ã
夿³¨ï¼ pendingLocalDescription ä¸ä»
å
嫿£å¨èèçæè®®æçæ¡ï¼èä¸èªä»æè®®æåºç以æ¥å·²ç»æ¶éå°ç任使¬å° ICE åé人é½è¢«å建ã类似å°ï¼pendingRemoteDescription å
æ¬éè¿è°ç¨ RTCPeerConnection.addIceCandidate()
æä¾çä»»ä½è¿ç¨ ICE åéã
æå ³è¿äºå±æ§åæ¹æ³çæ´å¤ç»èï¼è¯·åé å个æç« ã
ä»ä¹æ¯ ICE åéå°åï¼é¤äºäº¤æ¢å ³äºåªä½çä¿¡æ¯ (ä¸é¢æå°ç Offer / Answer å SDP ) ä¸ï¼å¯¹çä½å¿ 须交æ¢å ³äºç½ç»è¿æ¥çä¿¡æ¯ãè¿è¢«ç§°ä¸º ICE åéè ï¼å¹¶è¯¦ç»è¯´æäºå¯¹çä½è½å¤ç´æ¥æéè¿ TURN æå¡å¨è¿è¡éä¿¡çå¯ç¨æ¹æ³ãéå¸¸ï¼æ¯ä¸ªå¯¹ç¹å°ä¼å æåºæä½³ç ICE åéï¼é次å°è¯å°ä¸ä½³çåéä¸ãçæ³æ åµä¸ï¼åéå°åæ¯ UDP(å 为é度æ´å¿«ï¼åªä½æµè½å¤ç¸å¯¹å®¹æå°ä»ä¸ææ¢å¤ )ï¼ä½ ICE æ åä¹å 许 TCP åéã
夿³¨ï¼ ä¸è¬æ¥è¯´ï¼ä½¿ç¨ TCP ç ICE åéè åªæå½ UDP ä¸å¯ç¨æè¢«éå¶ä½¿å ¶ä¸éç¨äºåªä½æµæ¶æä¼è¢«ä½¿ç¨ã䏿¯ææçæµè§å¨é½æ¯æ ICE over TCPã
æ´ä¸ªäº¤æ¢ç夿å¾è¡¨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