导读:WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音对话或视频对话的 API。W3C 和 IETF 在2021年1月26日共同宣布 WebRTC 1.0 定稿,促使 WebRTC 从事实上的互联网通信标准成为了官方标准,其在不同场景的应用将得到更为广泛的普及。WebRTC 提供了视频会议的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台:Windows,Mac,iOS,Android。本文主要介绍各个平台的视频渲染技术。
文|陶金亮
网易云信资深音视频工程师
背景
目前业界还没有关于 WebRTC 各个平台视频渲染技术的总结,同时本人最近主要从事视频后处理超分在移动端落地的相关工作,会涉及到视频渲染模块的联动,因此刚好趁这个机会把相关的知识点进行总结一下,希望能够帮助大家更容易的理解 WebRTC 的视频渲染技术。
内容
视频 Pipline 流程
视频渲染流程
CPU 计算需要显示的内容,然后通过数据总线传给GPU
GPU 拿到数据之后开始渲染数据并保存在帧缓存区中
视频渲染技术
1. 平台视频渲染技术介绍
主要介绍 Apple、Google、Microsoft 三大平台在视频渲染方面的支持。
Apple 主要支持 OpenGL 和 Metal
Android 主要支持 OpenGL 和 Vulkan
Windows 主要支持 OpenGL、Direct3D 和 Vulkan
2. 详细介绍视频渲染技术
OpenGL 介绍
什么是 EGL
EGL 是 OpenGL ES 和本地窗口系统(Native Window System)之间的通信接口,它的主要作用:
与设备的原生窗口系统通信;
查询绘图表面的可用类型和配置;
创建绘图表面;
在 OpenGL ES 和其他图形渲染 API 之间同步渲染;
管理纹理贴图等渲染资源;
OpenGL ES 的平台无关性正是借助 EGL 实现的,EGL 屏蔽了不同平台的差异。
创建 OpenGL 上下文
在 iOS 平台使用 OpenGL ES 做视频渲染时,首先要创建 EAGLContext 对象。因为 EAGLContext 管理着 OpengGL ES 渲染上下文。该上下文中,包括了状态信息,渲染命令以及 OpenGL ES 绘制资源。为了执行 OpenGL ES 命令,你需要将创建的 EAGLContext 设置为当前渲染上下文。EAGLContext 并不直接管理绘制资源,它通过与上下文相关的 EAGLSharegroup 对象来管理。当创建 EAGLContext 时,你可以选择创建一个新的 sharegroup 或与之前创建的 EAGLContext 共享 EAGLSharegroup。
在 Android 平台上开发 OpenGL ES 应用时,类 GLSurfaceView 已经为我们提供了对 Display , Surface , Context 的管理,即 GLSurfaceView 内部实现了对 EGL 的封装,可以很方便地利用接口 GLSurfaceView.Renderer 的实现,使用 OpenGL ES API 进行渲染绘制,很大程度上提升了 OpenGL ES 开发的便利性。
创建 OpenGL View
具体运用
目前网易云信第二代实时音视频 iOS 和 Mac 的整体渲染框架,如下图:
目前网易云信第二代实时音视频 iOS 和 Mac 的 OpenGL 渲染架构,如下图:
Metal介绍
Metal 框架提供以下内容:
MTLCommandBuffer 提供的 Encoder 类型:
多线程 Metal Command Buffers
具体运用
目前网易云信第二代实时音视频 iOS 和 Mac 的 Metal 渲染架构,拓展了纹理输入渲染,如下图:
Vulkan 介绍
Vulkan 中主要的组件以及它们之间的关系
基本的 Vulkan 编程流程
这个流程和 OpenGL 的使用流程很像,就是找到设备——创建上下文——创建命令队列——准备任务——发送执行。
Vulkan 的窗口系统
Direct3D 介绍
Direct3D 11 新增以下的功能:镶嵌(Tessellation, 即曲面细分);多线程渲染(Multithread Render); 计算着色器(Compute Shader),支持 GPGPU,提供新版 HLSL 语言,与 nVidia 的 CUDA 或 OpenCL 功能类似。其他还有面向对象化的 Shader Model 5 等功能。之前 DirectX 10 还是单线程,文件访问与绘图指令共用同一个线程,容易造成画面迟缓的现象,与 DirectX 10 相比,Direct3D 11 有了更好的解决方案。DirectX 11 的 pipeline 新增 Hull Shader、Tessellator、Domain Shader 来实现 tessellation, 可以快速让成像 3D 的小三角型快速增加。至于 Computer ShadeWindows U 的实现,以 GPU 的平行处理能力与浮点运算能力来实现 CPU 的运算,能够同时支持 ATI 以及 Nvidia 的显卡,不受绘图流程的限制。DirectX11 还支持 Intel 的支持 Ray Tracing(光线跟踪)与 Rasterization(光栅化)技术,使 3D 效果更真实,更加逼真。
参考文献