WebRTC-iOS:3 步跑通 P2P 音视频通话演示
WebRTC-iOS3 步跑通 P2P 音视频通话演示【免费下载链接】WebRTC-iOSA simple native WebRTC demo iOS app using swift项目地址: https://gitcode.com/gh_mirrors/we/WebRTC-iOS从零做音视频通话应用最先卡住你的通常不是编解码而是两台设备如何互相发现并完成协商。WebRTC-iOS 是一个 Swift 编写的原生 WebRTC 演示目标很明确让两台 iOS 设备之间跑通 P2P 音视频通话。先看能力边界两台 iOS 设备完成 offer/answer 协商建立 P2P 音视频通道另含一条数据通道仓库自带 Node.js / Swift 两种信令服务器本地调试够用非生产可用信令服务器是纯广播实现在线设备超过几台就会串台没有 TURN 兜底两台设备分属不同 NAT 时可能连不通模拟器无法调用真实摄像头视频会切换为文件播放备齐环境与依赖Xcode 12.1 以上、目标设备 iOS 12 以上、Node.js 加 npm跑 Node 版信令服务器想用 Swift 版信令服务器则需 macOS 10.15 以上。要看真实摄像头画面至少准备两台真机。把通话演示跑上两台设备克隆仓库git clone https://gitcode.com/gh_mirrors/we/WebRTC-iOS。此时你应看到WebRTC-Demo-App/iOS 工程和signaling/两套信令服务器实现两个目录启动 Node 版信令服务器进入signaling/NodeJS目录执行npm install再运行node app.js。终端打印 Signaling server is now listening on port 8080把信令地址指向宿主机修改WebRTC-Demo-App/Sources/Config.swift里的defaultSignalingServerUrl为ws://宿主机IP:8080。局域网里的其他设备访问不到localhost打开WebRTC-Demo-App/WebRTC-Demo.xcworkspace选真机或模拟器运行。此时界面应显示 Signaling status: Connected说明已连上服务器两台设备分别运行应用一台点Send offer另一台等远程 SDP 到达后点Send answer。双方本端与远程 Candidate 数量开始累加、连接建立后即可对话点Video按钮开始推送摄像头画面弄懂两台设备如何完成协商 两个陌生人在交换电话号码前得先通过中间人把号码互相递过去换完号码就自行通话中间人不再参与。这里的信令服务器干的就是中间人的活只把 SDP描述用什么编解码、哪个端口的会话号码和 ICE 候选列表在两边来回递送P2P 通道一旦建立音视频流不再经过它。值得读的 4 个文件WebRTCClient.swift封装RTCPeerConnectionoffer/answer 生成、媒体轨创建、数据通道、静音与扬声器切换都在这是项目核心SignalingClient.swift把 SDP 和候选项序列化成 JSON 经 WebSocket 收发能看清信令的最短路径Config.swift信令地址与 STUN 服务器配置的唯一定制点signaling/NodeJS/app.js整个服务器只有 27 行广播代码看完就明白它为何不能直接用于生产出问题时先查这三处对方始终收不到 offer现象点了 Send offer对端界面一直不出现远程 SDP原因defaultSignalingServerUrl还是ws://localhost:8080局域网设备访问不到这台机器修复地址改成运行服务器那台机器的 IP重新编译运行模拟器里视频黑屏现象连接成功但视频区域始终是黑的原因模拟器不支持视频采集项目改用RTCFileVideoCapturer播放本地文件修复换真机运行并点Video按钮开启摄像头采集两台设备不在同一网络时连接卡住现象offer 和 answer 交换完连接迟迟不通原因项目只配了公共 STUN没有 TURN 服务器兜底对称型 NAT 无法打洞修复先把两台设备放同一局域网验证跨网络则自建 TURN 服务器下一步能做什么以这个演示的WebRTCClient为骨架换上真正的房间机制替代广播信令和自托管 TURN 服务就能演化成生产级通话应用的雏形数据通道上还可以加屏幕共享、文字聊天这类能力。【免费下载链接】WebRTC-iOSA simple native WebRTC demo iOS app using swift项目地址: https://gitcode.com/gh_mirrors/we/WebRTC-iOS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考