WebRTC P2P 原理分析:从原理到运用
简介
WebRTC(Web Real-Time Communication)是一项开源的技能,旨在完成实时音视频以及数据通讯,而无需安装任何插件或扩展。WebRTC 允许用户之间经过 P2P(Peer-to-Peer)模式进行实时通讯,减轻服务器的担负并进步通讯功率。本文将对 WebRTC P2P 通讯原理进行详细分析,并讨论其在各种运用场景中的实践运用。
一、WebRTC P2P 通讯原理
1. 基本组件
WebRTC P2P 由以下几个首要组件组成:
- Camera 和 AudioRecord:经过 Camera(Camera1 或 Camera2)和 AudioRecord 类访问音视频设备。处理 Android 设备的权限请求,以便访问摄像头和麦克风。
- PeerConnectionFactory:创立 RTCPeerConnection 和 RTCDataChannel 实例的核心类。
- RTCPeerConnection:完成 P2P 通讯,处理音视频编解码、网络通讯等。负责处理信令进程、交流媒体信息以及协调 NAT 穿透。
- RTCDataChannel:用于在 P2P 通讯中传输非音视频数据,如文字、图片、文件等。完成低推迟、牢靠的数据通讯通道。
- VideoTrack 和 AudioTrack:代表视频轨迹和音频轨迹。操作音视频流,例如增加到 RTCPeerConnection 中,完成音视频的传输。
- VideoRenderer:用于显示远端视频流。为本地和远端视频流分别创立 VideoRenderer 实例,如 SurfaceViewRenderer 或 TextureViewRenderer。将视频流烘托到 Android 界面上。
- EglBase:在烘托视频时,或许需求运用 EglBase 类。EglBase 供给了 OpenGL ES 上下文,用于烘托视频到 Android 视图(如 SurfaceViewRenderer 或 TextureViewRenderer)中。
- 音频编解码器:WebRTC 支撑多种音频编解码器,如 Opus、G.711、iSAC 等。依据 SDP 信息主动选择适宜的编解码器。
- 视频编解码器:WebRTC 支撑多种视频编解码器,如 VP8、VP9、H.264 等。依据 SDP 信息主动选择适宜的编解码器。
- 编解码器设置与优化:在特定场景下,或许需求对编解码器的参数进行调整,以获得更好的音视频质量或下降带宽占用。例如,调整视频编码器的分辨率、帧率、码率等参数。
- 硬件编解码器支撑:在 Android 渠道上,能够运用 MediaCodec 进行硬件编解码。并且运用硬件编解码器能够明显下降 CPU 占用,大大进步编解码性能。
- ICE(Interactive Connectivity Establishment):处理网络协议,用于在复杂的网络环境中树立 P2P 衔接。帮忙 WebRTC 客户端在 NAT 和防火墙等环境中找到可用的通讯路径。
- STUN(Session Traversal Utilities for NAT):STUN 服务器帮助 WebRTC 客户端获取公网 IP 地址和端口,以便在 NAT 环境中树立 P2P 衔接。STUN 服务器经过向 WebRTC 客户端回来其公网地址,使客户端能够在信令进程中交流这些信息。
- TURN(Traversal Using Relays around NAT):当 STUN 服务器无法树立直接的 P2P 衔接时,TURN 服务器充任中继,将客户端的数据中转至另一个客户端。尽管这会增加通讯推迟,但能保证通讯成功。TURN 服务器一般与 STUN 服务器一起布置,作为 WebRTC NAT 穿透的备选计划。
经过这些组件,你能够在 Android 渠道上完成 WebRTC P2P 通讯,包含音视频和数据传输。这些组件共同构成了 WebRTC 在 Android 端的基础设施,能够帮助你完成高效、安稳的实时通讯运用
2. 信令流程
WebRTC 不包含信令协议,因此需求开发者依据需求自定义信令进程。信令首要用于协调两边树立 P2P 衔接、交流音视频编码信息、网络地址等。以下是一个典型的信令流程:
- UserA 衔接信令服务器并回来衔接成功的呼应。
- UserA 发送参加房间的信令并回来参加成功的呼应。
- UserA 创立 PeerConnection 和增加音视轨迹。
- UserB 衔接信令服务器并回来衔接成功的呼应。
- UserB 发送参加房间的信令并回来参加成功的呼应。
- UserB 创立 PeerConnection 和增加音视轨迹。
- 信令服务器告诉 UserA, UserB 参加到了房间中。
- UserA 调用 createOffer() 办法生成一个 SDP(Session Description Protocol)描绘,包含 UserA 的音视频编信息和网络地址。
- UserA 发送 SDP 描绘给信令服务器,然后转发给 UserB。
- UserB 接收到 UserA 的 SDP 描绘,并调用 setRemoteDescription() 设置为远端描绘。
- UserB 调用 createAnswer() 办法生成一个 SDP 描绘,包含 UserB 的音视频编码信息和网络地址。
- UserB 发送 ANSWER SDP 描绘给 信令服务器 ,然后转发给 UserA。
- UserA 接收到 UserB 的 answer SDP 描绘,并调用 setRemoteDescription() 设置为远端描绘。
- UserA 和 UserB 分别生成 ICE(Interactive Connectivity Establishment)候选,即可用的网络地址。
- UserA 和 UserB 经过信令服务器互相交流 ICE 候选,并设置为本地和远端 ICE 候选。
- UserA 和 UserB 经过 ICE 候选树立 P2P 衔接。
- 成功树立P2P 衔接,能够进行通讯了
3. NAT 穿透和 STUN/TURN 服务器
在实践网络环境中,大多数用户都位于 NAT(网络地址转换)环境之下。NAT 会导致用户之间无法直接树立 P2P 衔接。为了处理这个问题,WebRTC 运用了 ICE 协议,结合 STUN(Session Traversal Utilities for NAT)和 TURN(Traversal Using Relays around NAT)服务器进行 NAT 穿透。
- STUN:STUN 服务器帮助用户获取公网 IP 地址和端口,供其他用户树立衔接。
- TURN:当 STUN 服务器无法完成 NAT 穿透时,TURN 服务器作为中继,将用户的数据中转至另一个用户。尽管这会增加通讯推迟,但能保证通讯成功。
二、WebRTC运用场景
WebRTC 技能在很多运用场景中都有广泛的运用,首要包含以下几个方面:
1. 实时音视频通讯:
- 点对点视频聊天:如 Google Meet、Zoom 等实时视频通话运用。
- 多人视频会议:企业级多人视频会议系统,如飞书、钉钉、腾讯会议、 Cisco Webex、Microsoft Teams 等。
- 在线教育:远程教育、在线训练和在线讲堂等,如腾讯讲堂、网易云讲堂等。
- 电子健康:远程医疗咨询、在线心理咨询等。
- 客户支撑:在线客服系统,供给实时音视频客户支撑。
2. 实时数据传输和文件共享:
- P2P 文件共享:直接在浏览器之间传输文件,如 ShareDrop、WebDrop 等。
- 在线协作东西:实时文档编辑、在线白板等,如 飞书文档、Google Docs、Microsoft Office 365 等。
- 多人游戏:根据浏览器的实时多人游戏,如 pixelstreaming。
- 实时数据同步:实时数据同步,如物联网设备状态同步。
3. 实时媒体流处理:
- 实时视频监控:运用 WebRTC 进行低推迟的实时视频监控。
- 实时直播:音频和视频直播,如 Facebook Live、Twitch 等。
- 实时录屏和远程桌面:支撑远程桌面访问、帮忙和实时录屏等功能。
- 实时音视频处理:实时滤镜、美颜、布景替换等。
4. 物联网(IoT)和边际计算:
- 实时设备操控:在浏览器中直接操控物联网设备。
- 边际计算:将音视频处理和数据处理使命散布到边际设备上,减轻服务器担负。
- 远程团队协作:运用 WebRTC 完成远程工程师对设备的实时操控和诊断。
5. 交际网络:
- 交际运用:如 QQ、微信、Facebook、WhatsApp 等运用中的实时音视频聊天功能。
- 直播渠道:如 TikTok、抖音、快手 等短视频渠道的实时互动直播功能。
由于 WebRTC 能够在不依赖插件或外部运用的情况下完成实时通讯,因此在各种需求实时音视频通讯和数据传输的场景中都能够发挥重要作用。
后续我将陆续根据 WebRTC 完成如下运用,P2P音视频通话->视频会议->实时多人在线玩游戏(云游戏)->低推迟远程操控等。请敬请期待吧。
三、总结
WebRTC 是一项强壮的实时通讯技能,经过 P2P 衔接为用户供给高效、低推迟的音视频和数据通讯。在处理 NAT 穿透问题上,WebRTC 结合了 STUN 和 TURN 服务器。在广泛的运用场景中,WebRTC 体现出了其巨大的潜力。跟着技能的不断发展,相信未来 WebRTC 在各个领域的运用将会愈加丰富和广泛。