GoogleWebRTC for iOS 设置SDP和ICE顺序错误导致不互通

环境: GoogleWebRTC 1.1.31999 Xcode 13 iOS 15 问题描述: 1、 学习WebRTC时,先用simple-peer实现了浏览器和浏览器之间的音视频互通。 2、然后结合浏览器的经验,基于GoogleWebRTC for iOS实现了iOS真机和浏览器直接的互通 3、 最后在测试iOS真机之间的互通时,基本不互通,测试失败。排查了很长时间,最后定位为API调用顺序错误 应先设置远端SDP,再设置远端ICE,具体到API就是,先设置 调用 setRemoteDescription,然后再调用 addIceCandidate // 收到远端SDP和ICE信息后 [peerConnection setRemoteDescription:remoteSDP completionHandler:^(NSError * err){ [peerConnection addIceCandidate:remoteICE]; } ];

November 18, 2021 · 1 min · holdsky

WebRTC初学Demo

webrtc介绍 简介实现基本的数据通道文件传输修改传输速度限制选择并读取文件数据自动下载文件完整代码音视频通话https访问音视频流完整代码屏幕共享捕捉屏幕完整代码NAT穿透之STUN/TURN信令服务器信令服务实现完整代码 详细请访问 简介 WebRTC(网页实时通信技术),是一系列为了建立端到端文本或者随机数据的规范,标准,API和概念的统称。 任何实现了WebRTC标准的软件之间均可通信,如PC浏览器–手机浏览器、浏览器–App、App–App。通信双方是对等的,但通常还要引入服务端,以便于对等端能够找到对方。 移动端浏览器对WebRTC的支持 Android 4.4以上 iOS 11以上 WebRTC应用不需要非常高性能就能够平稳运行、拥有良好体验。对于WebRTC来说,获取特定硬件的权限也不是必需的。Web应用和原生应用对比: 原生应用会比Web应用更快,拥有更高级别的硬件权限;混合应用的运行速度更慢,不能使用移动设备的全部权限。 原生应用在不同的平台上的代码复用度有待提高;混合应用开发起来会更快,更省钱 结论:如果高性能和极致体验不是软件的必不可少的要求,那么,在绝大多数情况下,用户根本注意不到原生和混合WebRTC应用之间的差别。 实现基本的数据通道 对浏览器而言,WebRTC API处于底层且十分复杂。不过我们可以使用封装好的高级别的API—- simple-peer 是一个基础的,非常洁净的低层P2P连接封装器.下面的示例是 simple-peer 的一个标准例子。 <html> <body> <style> #outgoing { width: 100%; word-wrap: break-word; white-space: normal; } </style> <form> <textarea id="incoming"></textarea> <button type="submit">submit</button> </form> <pre id="outgoing"></pre> <script src="simplepeer.min.js"></script> <script> const p = new SimplePeer({ initiator: location.hash === '#1', trickle: false }) p.on('error', err => console.log('error', err)) p.on('signal', data => { console.log('SIGNAL', JSON.stringify(data)) document.querySelector('#outgoing').textContent = JSON.stringify(data) }) document.querySelector('form').addEventListener('submit', ev => { ev.preventDefault() p.signal(JSON.parse(document.querySelector('#incoming').value)) }) p.on('connect', () => { console.log('CONNECT') p.send('whatever' + Math.random()) }) p.on('data', data => { console.log('data: ' + data) }) </script> </body></html> 演示步骤: ...

October 19, 2021 · 9 min · holdsky