导读:本文来自 LiveVideoStack 线上分享第三季,第十期阿里巴巴闲鱼事业部无线开发专家陈炉军带来的分享内容,针对闲鱼APP在当下流行的跨平台框架Flutter的大规模实践,介绍其在音视频领域碰到的一些困难以及解决方案。
大家好,我是阿里巴巴闲鱼事业部的陈炉军,本次分享的主题是 Flutter 浪潮下的音视频研发探索,主要内容是针对闲鱼APP在当下流行的跨平台框架 Flutter 的大规模实践,介绍其在音视频领域碰到的一些困难以及解决方案。
分享内容主要分为四个方面,首先会对 Flutter 有一个简单介绍以及选择 Flutter 作为跨平台框架的原因,其次会介绍 Flutter 中与音视频关系非常大的外接纹理概念,以及对它做出的一些优化。之后会对闲鱼在音视频实践过程中碰到的一些 Flutter 问题提出了一些解决方案—— TPM 音视频框架。最后是闲鱼 Flutter 多媒体开源组件的介绍。
Flutter
Flutter 是一个跨平台框架,以往的做法是将音频、视频和网络这些模块都下沉到 C++ 层或者 ARM 层,在其上封装成一个音视频的 SDK ,供 UI 层的 PC 、 iOS 和 Android 调用。
而 Flutter 做为一个 UI 层的跨平台框架,顾名思义就是在 UI 层也实现了一个跨平台开发。可以预想的是未Flutter发展的好的话,会逐渐变为一个从底层到 UI 层的一个全链路的跨平台开发,技术人员分别负责 SDK 和 UI 层的开发。
在 Flutter 之前已经有很多跨平台 UI 解决方案,那为什么选择 Flutter 呢?我们主要考虑性能和跨平台的能力。
以往的跨平台方案比如 Weex,ReactNative,Cordova 等等因为架构的原因无法满足性能要求,尤其是在音视频这种性能要求几乎苛刻的场景。
而诸如 Xamarin 等,虽然性能可以和原生 App 一致,但是大部分逻辑还是需要分平台实现。
我们可以看一下,为什么 Flutter 可以实现高性能:
原生的native组件渲染以 IOS 为例,苹果的UIKit通过调用平台自己的绘制框架 QuaztCore 来实现 UI 的绘制,图形绘制也是调用底层的 API ,比如 OpenGL 、 Metal 等。
而 Flutter 也是和原生 API 逻辑一致,也是通过调用底层的绘制框架层 SKIA 实现 UI 层。这样相当于 Flutter 他自己实现了一