平台视频渲染技术有哪些

网易智企 TOP1 231

平台视频渲染技术主要从Apple,Android,Windows等三个平台讲述。分别对应技术:OpenGL、Metal、Vulkan、Direct3D。

Apple 主要使用早期的 OpenGL 和 最新的 Metal 2种渲染技术,目前 WebRTC 中 iOS 和 Mac 这2个平台都实现了 OpenGL 和 Metal 2种渲染方式。

WWDC 2014 发布了 Metal,仅支持 iOS 8 以及 A7 以上的设备;

WWDC 2015 Metal 支持在 OS X 上运行,2012 之后生产的,系统版本在 El Capitan(10.11)之上的 Mac 设备 ;

WWDC 2016 Metal 性能优化,一些新技术,比如 Tessellation(曲面细分)可用于实现细节层次,高效调整以适应不同材质等。最重要的应该是引入了 Metal Performance Shaders,内置了一系列常用的图像处理 kernel,方便进行图像效果处理 ;

WWDC 2017 发布了 Metal 2。名字上是图形 API 更新,实际上更多是内部实现的优化,以及加入一系列调试工具,API 层面并没有多大改变。硬件方面要求一致,系统版本支持 iOS 11,macOS High Sierra,tvOS 11 ;

WWDC 2018 iOS 12、macOS 10.14 之后弃用 OpenGL ES,系统的一些框架全面改成默认 Metal 支持 ;

WWDC 2019、2020、2021 都有发布关于 Metal 的更新,包括机器学习、计算机视觉、AR/VR 与 Metal 的交互。

  • Android 主要支持 OpenGL 和 Vulkan

在 Android 平台上,GPU 渲染的 API 有两套,一套是 OpenGL-ES,另一套是7.0后推出的 Vulkan。目前 WebRTC 中 Android 平台实现了 OpenGL 的渲染方式,网易云信后期也将考虑支持 Vulkan。

Vulkan 是一个用于图形和计算设备的编程接口,Vulkan 是一个跨平台的 2D 和 3D 绘图应用程序接口(API),最早由科纳斯组织在2015年游戏开发者大会(GDC)上发表。

Vulkan 是用于高性能 3D 图形的低开销、跨平台 API。Vulkan 是 Khronos Group(OpenGL 标准的维护组织)开发的一个新 API,它提供了对现代显卡的一个更好的抽象,与 OpenGL 和 Direct3D 等现有 API 相比,Vulkan 可以更详细的向显卡描述你的应用程序打算做什么,从而可以获得更好的性能和更小的驱动开销。Vulkan 的设计理念与 Direct3D 12 和 Metal 基本类似,但 Vulkan 作为 OpenGL 的替代者,它设计之初就是为了跨平台实现的,可以同时在 Windows、Linux 和 Android 开发。甚至在 Mac OS 系统上,Khronos 也提供了 Vulkan 的 SDK,虽然这个 SDK 底层其实是使用 MoltenVK 实现的。

  • Windows 主要支持 OpenGL、Direct3D 和 Vulkan

在 Windows 平台下的视频播放技术主要有以下三种:GDI、Direct3D 和 OpenGL;包括上面提到的 Vulkan 也支持 Windows 平台。以及早期的 DirectDraw,目前微软已放弃支持。

Direct3D 是微软公司在 Microsoft Windows 系统上开发的一套 3D 绘图 API,是 DirectX 的一部份,目前广为各家显示卡所支持。1995年2月,微软收购了英国的 Rendermorphics 公司,将 RealityLab 2.0 技术发展成 Direct3D 标准,并整合到 Microsoft Windows 中,Direct3D 在 DirectX 3.0 版本中开始出现。后来在 DirectX 8.0 发表时与 DirectDraw 编程介面合并并改名为 DirectX Graphics。Direct3D 与 Windows GDI 是同层级组件。它可以直接调用底层显卡的功能。与 OpenGL 同为电脑绘图软件和电脑游戏最常使用的两套绘图 API。

Simple DirectMedia Layer(SDL)是一个跨平台开发库,主要提供对音频,键盘,鼠标,操纵杆的操作,通过 OpenGL 和 Direct3D 来实现直接访问图像硬件。主要应用在视频播放软件,模拟器和游戏开发。SDL 官方支持 Windows,Mac OS X,Linux,iOS 和 Android。

由于微软想主推 Direct3D,因此微软对于 OpenGL 的支持并不积极。目前 WebRTC 中并没有实现 Windows 平台的渲染,目前网易云信使用的是开源的SDL框架,但由于其太重,因此后期会考虑直接实现 Direct3D。

  • 什么是 EGL

EGL 是 OpenGL ES 和本地窗口系统(Native Window System)之间的通信接口,它的主要作用:

  1. 与设备的原生窗口系统通信;
  2. 查询绘图表面的可用类型和配置;
  3. 创建绘图表面;
  4. 在 OpenGL ES 和其他图形渲染 API 之间同步渲染;
  5. 管理纹理贴图等渲染资源;

OpenGL ES 的平台无关性正是借助 EGL 实现的,EGL 屏蔽了不同平台的差异。

作者:陶金亮-网易云信资深音视频工程师,原文标题:WebRTC 视频渲染

本文为删减版,阅读完整版请点击下方链接。

回复

我来回复
  • 暂无回复内容

联系我们
关注微信
关注微信
分享本页
返回顶部