- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 视频嵌入链接 文档嵌入链接
- <iframe src="https://www.slidestalk.com/Baiyulan/WebRTC64439?embed&video" frame border="0" width="640" height="360" scrolling="no" allowfullscreen="true">复制
- 微信扫一扫分享
基于Web引擎扩展技术的RTC混合开发框架实践
李顺博,声网Agora Web引擎开发高级工程师。多年实时流媒体领域工作经验,负责过基于 WebRTC 的云流服务器及端侧引擎开发项目,拥有包括嵌入式等多平台实时音视频通信系统开发经验,对 RTC 在 AR/VR 领域的应用充满期待。
议题简介
原生SDK体验 + WebSDK兼容性需求
桌面端WebSDK到Native SDK的无缝迁移实践
移动端WebRTC混合开发框架
RTC WebSDK混合开发框架应用展望
总结
展开查看详情
1 .基于Web引擎扩展技术的 RTC混合开发实践 李顺博 Web引擎高级开发工程师
2 .0 1 原生SDK体验 + WebSDK兼 容性需求
3 .We b 3 . 0 “Web 2.0 was based on Ajax, Web 3.0 will be “applications that are pieced together” – with the characteristics that the apps are relatively small, the data is in the cloud, the apps can run on any device (PC or mobile), the apps are very fast and very customizable, and are distributed virally.” ---- Eric Schmidt
4 .We b RTC ( We b Re a l - T i m e C o m m u n i c a t i o n ) 浏览器自诞生之初至今的主要使命依然是内容分发,受限于复杂的网络环境,网络传输主要依靠基于TCP的HTTP/HTTPS以及WebSocket, 可靠性得到保证的同时,时延一直是大问题。 随着5G的到来,包括移动端在内的网络环境一直向着大带宽、高速率、低时延前进,同时人们对通过网络实时互动的需求也日益迫切。 经过多年沉淀,WebRTC1.0于今年1月成为W3C推荐标准和IETF标准,用户可以在基于RTMP或MSE的点播/直播技术的基础上,有了一个应 对更低时延需求的技术选择方案。
5 .基于WebRTC的Web应用面临的问题 Web平台碎片化 l 不同浏览器、同一浏览器不同版本实现不一定兼容 WebRTC实现细节不可控 l 网络传输FEC、弱网对抗、带宽估计、优先级保障等算法 l 编码解码算法等不可扩展 计算密集型算法可选项少 l 编码前处理只能选择WebAssembly l WebAssembly仅在Chrome91之后支持多线程、SIMD,且仅支持CPU 计算 l WebGL在针对特殊场景时性能不如原生平台
6 .基于WebRTC的Web应用面临的问题 解决思路 Web平台碎片化 l 统一的渲染引擎 WebRTC实现细节不可控 l 模块化RTC,结合原生平台开发 计算密集型算法可选项少 l 模块化算法任务,结合原生平台开发
7 .0 2 桌面端Web SDK到Native SDK的无缝迁移实践
8 .方案评选 Web技术开发桌面端应用 Chromium Embeded Electron Framework • Web开发技术 • C++、Java、Go、Python等都可以开发 • Node.js + Chromium renderer • 整个Chromium作为一个原生组件 • Node.js生态丰富 • 单独构建工具链 • 支持基于V8引擎的C/C++扩展 • 向后兼容 • 工具链完整
9 .Agora-RTCNG-Electron PC端跨平台混合框架 基于Node Addon的拓展技术 渲染进程 l 代码加载到V8引擎中执行 V8引擎 l 向后兼容Node(V8)版本 l 异步采用事件驱动 用户层接口兼容 Node API Native l 向用户提供接口与Agora RTC NG接口兼容 主线程 SDK 自研Native SDK实现 l 多平台(Windows、MacOS) l 直连RTN l 声网自研功能
10 .异步事件驱动 事件及媒体数据上报 注册回调接口 l 主线程向任务线程注册一个回调句柄,同时创建指定 主线程 个数的事件队列 注册回调 任务线程随时通知主线程处理任务结果 Native 事件队列 事件调用 l 向队列中加入一个事件 SDK l 在如果阻塞式加入事件,可能导致主线程锁死 执行回调 主线程处理任务结果 l 主线程空闲时处理回调结果 l 任务线程需要保证external array buffer的生命周期 l external array buffer释放回调时应该释放对应buffer