11月7日,即构和上海GDG技术社区联合举办了实时音视频技术云上技术分享专场,来自即构科技和Bilibili的资深技术专家进行了深度分享。大会吸引了500+开发人员交流、观看,并在活动过程中与分享嘉宾进行了热烈互动,下面我们将整理嘉宾们分享的核心内容,错过活动直播的小伙伴可以继续观看学习。

本文是即构科技李展鹏带来的主题为《Flutter实时音视频应用场景实践》的技术分享。以下为主要的分享内容:

大家好,我是来自即构科技的李展鹏,目前负责参与即构音视频平台SDK的建设工作。本人从内测版本开始接触Flutter,较早开始处理Flutter应用于音视频业务的场景,今天我将和大家一起交流一下Flutter在实时音视频场景下的应用实战。

一、Flutter系统架构

首先,给大家简单介绍一下 Flutter 的整体架构。大家可以看下面这张图:

图中绿色区域是基于 Dart 语言的framework层,包含两大类UI样式、控件、动画、手势等等,是Flutter开发者们直接对接的一层。

蓝色区域则为 Flutter 的引擎层,使用C++实现,这一层是Flutter实现跨平台的关键所在。核心模块主要包括与原生交互的Channel机制、 skia 图形渲染框架,还有Dart 虚拟机等等。

橙色区域主要是一些平台特定模块。就算 Flutter 拥有跨平台的特性,但底层还是离不开原生的支持。当某些特定功能无法直接使用 Flutter 实现时,那么开发者还可以通过编写原生插件的形式进行支持。即构在Flutter中实现音视频服务也是主要从这一层进行切入。

基于这张图,我们大概可以看出Flutter的一些优缺点。

优点

Flutter的优点是跨平台,拥有双端一致的体验,性能强大;基于自研引擎渲染,易于上手。Dart 语言当初用于对标 JS 语言,在设计上更靠近脚本语言风格,相比于原生语言来说更加容易入门。

缺点

Flutter 作为一个相对来说比较新兴的框架,相比于其他框架来说避免不了存在生态不完善的问题。不少功能还需要开发者自己造轮子,使用原生语言进行双端开发。

另外,Flutter 在 Github 上的 issue 相对较多,存在较多的已知bug。例如,在音视频场景下,视频渲染这块的优化问题相比原生还是稍微逊色一些,但是其实我们可以看到 Flutter 团队一直都在积极修复各种问题,我们相信未来在稳定性方面一定会越来越好。

二、Flutter 实时音视频快速接入

即构作为专业的音视频云服务商,我们很早就开始了对Flutter技术框架的研究,下面我们来介绍 Flutter 实时音视频的快速接入。即构SDK快速接入流程包括以下几点,初始化SDK、登录房间服务器、用户推送自己的本地音视频流,然后拉取远端的音视频流。

感兴趣的开发者可以扫码体验 Express Flutter SDK,里面会有比较详细的接入指南和示例demo。

我们看到,当我们需要使用即构Flutter SDK 的时候,需要在工程根目录下的配置文件里,添加 zego_engine_engine 的依赖声明,然后通过运行 flutter pub get 的命令,即可从远端pub仓库把SDK下载下来。

在图示的代码里,我们可以看到使用即构 Flutter SDK进行快速接入主要包括以下几步。

第一步,初始化SDK,这个步骤先要从即构官网上申请唯一专属的App ID 和App sign。

第二步,登录房间。

第三步,推送本地音视频流。在推流前如果需要对视频流进行本地预览,那么还需要使用即构 SDK 基于 Flutter 提供的外接纹理模块封装好的接口,创建一个视频纹理渲染对象,获取一个 textureID。

拿到 textureID 后,通过使用 Flutter 提供的 Texture 控件,即可进行本地播放。

在这里,Flutter 对音视频场景提供了两种视频渲染方案,分别是 Texture 和 Platform View。即构同时提供两种渲染方案的接口,但基于兼容性和稳定性考虑,我们更推荐开发者使用 Texture 方案。

然后,拉流的步骤和推流类似,在这里不重复赘述。

到这里,开发者就可以实现简单的实时音视频场景了。

三、Flutter自定义视频采集方案

视频采集是整条实时音视频链路中的起点。即构SDK内置了对摄像头的视频采集,可以直接将采集到的数据进行编码推流。

但若开发者需要在采集环节进行一些定制化操作,如,采集完摄像头原始数据后还需要对接第三方的美颜前处理;或者应用场景中有多种不同的输入源,如屏幕分享、播放一段视频推流等,那么就需要使用到自定义视频采集功能。

下图是Native 框架下自定义视频采集的实现框架:

那么,Flutter框架下是否可以沿用相同的方案呢?

篇幅原因,Flutter实时音视频应用场景实践分享的后半部分:Flutter自定义视频采集方案以及Flutter的屏幕分享实战内容,大家可以通过活动资料包查看,资料包中还包括嘉宾的演讲PPT以及视频回放,扫描下方二维码即可获取活动资料包:

活动回顾:Flutter实时音视频应用场景实践的更多相关文章

  1. 了不起的WebRTC:生态日趋完善,或将实时音视频技术白菜化

    本文原文由声网WebRTC技术专家毛玉杰分享. 1.前言 有人说 2017 年是 WebRTC 的转折之年,2018 年将是 WebRTC 的爆发之年,这并非没有根据.就在去年(2017年),WebR ...

  2. 从零到一,使用实时音视频 SDK 一起开发一款 Zoom 吧

    zoom(zoom.us) 是一款受到广泛使用的在线会议软件.相信各位一定在办公.会议.聊天等各种场景下体验或者使用过,作为一款成熟的商业软件,zoom 提供了稳定的实时音视频通话质量,以及白板.聊天 ...

  3. 声网Agora 实时音视频服务正式上线 HTC VIVE Sync App,支持非 VR 用户

    全球实时互动云服务开创者和引领者声网Agora(纳斯达克股票代码:API)宣布其视频 SDK 现已集成到领先的 VR/XR 远程协作及会议应用 HTC VIVE Sync App 中. 通过集成声网A ...

  4. Qcon 实时音视频专场:实时互动的最佳实践与未来展望

    互动直播.线上会议.在线医疗和在线教育是实时音视频技术应用的重要场景,而这些场景对高可用.高可靠.低延时有着苛刻的要求,很多团队在音视频产品开发过程中会遇到各种各样的问题.例如:流畅性,如果在视频过程 ...

  5. 如何基于 ZEGO SDK 实现 Flutter 一对一音视频聊天应用?

    之前的文章发布了ZEGO SDK实现Android端音视频通话应用的开发教程,不少开发者反馈很实用,能不能也出一版Flutter的教程. 有求必应,这不小编来了- 我们封装了ZEGO Flutter ...

  6. 实时音视频互动系列(上):又拍云UTUN网络详解

    如何定义实时音视频互动, 延迟 400ms 内才能无异步感 实时音视频互动如果存在1秒左右的延时会给交流者带来异步感,必须将视频播放延迟限制在400ms以内,才能给用户较好的交互体验. 当延迟控制在4 ...

  7. 实时音视频互动系列(下):基于 WebRTC 技术的实战解析

    在 WebRTC 项目中,又拍云团队做到了覆盖系统全局,保证项目进程流畅.这牵涉到主要三大块技术点: 网络端.服务端的开发和传输算法 WebRTC 协议中牵扯到服务端的应用协议和信令服务 客户端iOS ...

  8. 融云携新版实时音视频亮相 LiveVideoStack 2019

    4 月 19 日,LiveVideoStack 2019 音视频大会在上海隆重开幕,全球多媒体创新专家.音视频技术工程师.产品负责人.高端行业用户等共襄盛会,聚焦音频.视频.图像.AI 等技术的最新探 ...

  9. 小程序升级实时音视频录制及播放能力,开放 Wi-Fi、NFC(HCE) 等硬件连接功能

    “ 小程序升级实时音视频录制及播放能力,开放 Wi-Fi.NFC(HCE) 等硬件连接功能.同时提供按需加载.自定义组件和更多访问层级等新特性,增强了第三方平台的能力,以满足日趋丰富的业务需求.” 0 ...

  10. BBR在实时音视频领域的应用

    小议BBR算法 BBR全称Bottleneck Bandwidth and RTT,它是谷歌在2016年推出的全新的网络拥塞控制算法.要说明BBR算法,就不能不提TCP拥塞算法. 传统的TCP拥塞控制 ...

随机推荐

  1. 【谷粒商城】(一)docker搭建以及项目的创建

    网络地址转换-端口转发 VmWare网络配置可以参考这篇:VMWare虚拟机网络连接设置_santirenpc的博客-CSDN博客_vmware 上网设置,真的是被折磨到了.. Docker 虚拟化容 ...

  2. Dokcer应用部署(搭建Wordpress网站)

    实现多个容器之间的协同,搭建Wordpress网站,要用到3个容器,Wordpress.MariaDB和Nginx 拉取镜像 使用docker pull拉取3个镜像: $ sudo docker pu ...

  3. Gateway同时使用断言跟过滤器查询数据库报了这个错误怎么解决?

    DynamicServerListLoadBalancer for client shop-product-sentinel initialized: DynamicServerListLoadBal ...

  4. [ZJOI2020] 序列 线性规划做法/贪心做法

    线性规划做法 同时也作为线性规划对偶的一个小小的学习笔记. 以下 \(\cdot\) 表示点积,\(b,c,x,y\) 是行向量. \(A\) 是矩阵,对于向量 \(u,v\) 若 \(\forall ...

  5. VUE旅程(2)

    继续我的vue踩坑之旅... 电商网站都会有搜索栏,输入内容后在搜索结果页面要带入搜索的关键字,需求就从这里来.代码如下: <v-search :keyword="this.$rout ...

  6. 2023-04-24:用go语言重写ffmpeg的muxing.c示例。

    2023-04-24:用go语言重写ffmpeg的muxing.c示例. 答案2022-04-24: 本程序的大体过程如下: 打开输出文件并写入头部信息. 添加音频和视频流,并为每个流创建 AVCod ...

  7. 【设计模式】使用 go 语言实现简单工厂模式

    最近在看<大话设计模式>,这本书通过对话形式讲解设计模式的使用场景,有兴趣的可以去看一下. 第一篇讲的是简单工厂模式,要求输入两个数和运算符号,得到运行结果. 这个需求不难,难就难在类要怎 ...

  8. XAF Excel Importer

    开源项目地址:https://gitee.com/easyxaf/excel-importer 前言 在XAF中有Excel导出,但没有Excel导入,一开始不理解,难道Excel导入很难实现吗,当我 ...

  9. .Net后台调用js,提示、打开新窗体、关闭当前窗体

    .Net后台调用js,提示.关闭当前窗体.打开新窗体 Response.Write("<script>window.alert('支付成功!');window.open('/Jk ...

  10. 解决适用EntityFramework生成时报错“无法解析依赖项。"EntityFramework 6.4.4" 与 ' EntityFramework.zh-Hans 6.2.0 约束:EntityFramework(=6.2.0)'不兼容。"

    起因:通过vs2022创建mvc项目时, 执行添加"包含视图的MVC5控制器(使用Entity Framework)时 点击添加,出现错误提示  解决方法: 在您的解决方案资源管理器中,右键 ...