本文主要是介绍WebRTC 实现一对一通信,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
WebRTC 实现一对一通信
- WebRTC 实现一对一通信
- 需要使用的 API 简介
- 相关术语
- 一对一通话流程
- 参考
WebRTC 实现一对一通信
需要使用的 API 简介
- getUserMedia:用于从用户的摄像头和麦克风获取媒体流。通过调用该API的方法,可以请求用户授权,并获取音频和视频的本地媒体流用于后续处理和传输。
方法:navigator.mediaDevices.getUserMedia() - RTCPeerConnection:用于在浏览器之间创建点对点连接,处理音视频流的传输和通信。通过这些方法,可以创建连接、交换媒体信息、处理ICE候选等,实现音视频通话功能。
方法:new RTCPeerConnection(), createOffer(), createAnswer(), setLocalDescription(), setRemoteDescription(), addIceCandidate(),onicecandidate(),ontrack(),addTrack()。
相关术语
- SDP(Session Description Protocol):SDP是一种用于描述媒体流参数的协议。在WebRTC中,设备之间通过交换SDP来协商媒体流的设置。SDP描述了媒体流的编解码器、分辨率、传输协议等信息。
- ICE(Interactive Connectivity Establishment):ICE是一种用于处理网络连通性和NAT穿越的技术。它允许设备在不同的网络环境中建立直接连接。ICE使用候选项(Candidates)来表示设备的网络地址,通过交换候选项,设备可以找到合适的路径建立连接。
- STUN(Session Traversal Utilities for NAT)服务器:STUN服务器用于帮助设备发现自己的公共IP地址和端口,以克服NAT限制。设备可以通过向STUN服务器发送请求,获取自己的公共地址,并将其用作候选项。
- TURN(Traversal Using Relays around NAT)服务器:TURN服务器是作为备选方案的中继服务器。如果设备无法直接建立点对点连接(例如,由于防火墙或限制),它可以通过TURN服务器中继数据流。
一对一通话流程
上述流程图,其实就做了两件事:
- 媒体协商:PeerA与PeerB通过交换双方的SDP(会话描述协议),确定媒体类型、媒体格式等。
- 网络协商:通过交换ICE候选项(Candidate),确定对方的网络位置。
两个协商都成功以后,就能实现双方的音视频通话了,也就是媒体传输。
协商过程中,因为PeerA与PeerB并不知道彼此位置的存在,PeerA与PeerB不能直接通信,这就是需要中间人来传话,中间人就是信令服务器。
ICE是一种应用在公网的技术,帮助Peer实现自己身份(地址)的确认。事实上,在许多场景中,我们都是基于局域网进行生产开发,也就是每一端都清楚彼此的身份(固定IP),就能知道对方的身份(固定IP),所以ICE的过程是不必要的,可以直接将自己的candidate告诉对方。
关于局域网下P2P通信以及协商流程见下图:
参考
- https://juejin.cn/post/7267892210304565303
- https://blog.csdn.net/qq_27890899/article/details/135019080
- https://blog.csdn.net/qq_18286031/article/details/126226393
这篇关于WebRTC 实现一对一通信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!