活动回顾:Flutter实时音视频应用场景实践
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实时音视频应用场景实践的更多相关文章
- 了不起的WebRTC:生态日趋完善,或将实时音视频技术白菜化
本文原文由声网WebRTC技术专家毛玉杰分享. 1.前言 有人说 2017 年是 WebRTC 的转折之年,2018 年将是 WebRTC 的爆发之年,这并非没有根据.就在去年(2017年),WebR ...
- 从零到一,使用实时音视频 SDK 一起开发一款 Zoom 吧
zoom(zoom.us) 是一款受到广泛使用的在线会议软件.相信各位一定在办公.会议.聊天等各种场景下体验或者使用过,作为一款成熟的商业软件,zoom 提供了稳定的实时音视频通话质量,以及白板.聊天 ...
- 声网Agora 实时音视频服务正式上线 HTC VIVE Sync App,支持非 VR 用户
全球实时互动云服务开创者和引领者声网Agora(纳斯达克股票代码:API)宣布其视频 SDK 现已集成到领先的 VR/XR 远程协作及会议应用 HTC VIVE Sync App 中. 通过集成声网A ...
- Qcon 实时音视频专场:实时互动的最佳实践与未来展望
互动直播.线上会议.在线医疗和在线教育是实时音视频技术应用的重要场景,而这些场景对高可用.高可靠.低延时有着苛刻的要求,很多团队在音视频产品开发过程中会遇到各种各样的问题.例如:流畅性,如果在视频过程 ...
- 如何基于 ZEGO SDK 实现 Flutter 一对一音视频聊天应用?
之前的文章发布了ZEGO SDK实现Android端音视频通话应用的开发教程,不少开发者反馈很实用,能不能也出一版Flutter的教程. 有求必应,这不小编来了- 我们封装了ZEGO Flutter ...
- 实时音视频互动系列(上):又拍云UTUN网络详解
如何定义实时音视频互动, 延迟 400ms 内才能无异步感 实时音视频互动如果存在1秒左右的延时会给交流者带来异步感,必须将视频播放延迟限制在400ms以内,才能给用户较好的交互体验. 当延迟控制在4 ...
- 实时音视频互动系列(下):基于 WebRTC 技术的实战解析
在 WebRTC 项目中,又拍云团队做到了覆盖系统全局,保证项目进程流畅.这牵涉到主要三大块技术点: 网络端.服务端的开发和传输算法 WebRTC 协议中牵扯到服务端的应用协议和信令服务 客户端iOS ...
- 融云携新版实时音视频亮相 LiveVideoStack 2019
4 月 19 日,LiveVideoStack 2019 音视频大会在上海隆重开幕,全球多媒体创新专家.音视频技术工程师.产品负责人.高端行业用户等共襄盛会,聚焦音频.视频.图像.AI 等技术的最新探 ...
- 小程序升级实时音视频录制及播放能力,开放 Wi-Fi、NFC(HCE) 等硬件连接功能
“ 小程序升级实时音视频录制及播放能力,开放 Wi-Fi.NFC(HCE) 等硬件连接功能.同时提供按需加载.自定义组件和更多访问层级等新特性,增强了第三方平台的能力,以满足日趋丰富的业务需求.” 0 ...
- BBR在实时音视频领域的应用
小议BBR算法 BBR全称Bottleneck Bandwidth and RTT,它是谷歌在2016年推出的全新的网络拥塞控制算法.要说明BBR算法,就不能不提TCP拥塞算法. 传统的TCP拥塞控制 ...
随机推荐
- 使用laravel开发微信公众的一个大坑,适合新手学习的laravel接入微信接口
最近使用laravel做微信公众号二次开发,发现网上能够参考的资料基本上很少,很多地方都讲的不够详细,致使许多新手采坑无数,所以这篇文章讲一下如何使用laravel接入微信接口,实现微信公众号二次开发 ...
- 在Vue中使用键盘事件,回调函数被执行两次
暂时先不考虑v-for的key,查看下面的代码 <template> <div> <form @submit.prevent="addTask"> ...
- xlsx纯前端导出表格,完善边框等样式
仅用xlsx是无法实现文字样式及表格边框的style的,因此配合使用xlsx-style 以下源码直接复制过去用 // 源码什么的都不需要改动 import * as XLSXStyle from ' ...
- C# 获取系统已安装的.NET版本
获取系统已安装的.NET版本,来确定当前应用可运行的环境. 微软已经有相应的完整文档,请参考:确定已安装的 .NET Framework 版本 - .NET Framework | Microsoft ...
- Python-趣味小程序
1.效果 2.代码 import sys import time def print_act(word): #print('\n'+' '+'\r') #让光标回到行首 sys.stdout.writ ...
- ADB-安装配置
一.只要下载ADB安装包即可 就这4个文件: 备注:如果下载放入到D盘去解压,打开dos窗口那么就要进入到D盘,然后再去执行adb命令,输入adb查看它是否安装成功 二.ADB命令简单使用 查看连接设 ...
- C++ ATL + WTL 选择文件
1 #include "stdafx.h" 2 #include "CStringHelper.h" 3 #include "AFileEngine. ...
- 2020-08-23:描述HTTPS和HTTP的区别。
福哥答案2020-08-23: 1.地址区别http:http://开头.https:https://开头. 2.默认端口区别http:端口80.https:端口443. 3.数据传输区别http:明 ...
- 2022-01-20: 矩形区域不超过 K 的最大数值和。 给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。 题目数据保证总会存在一
2022-01-20: 矩形区域不超过 K 的最大数值和. 给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和. 题目数据保证总会存在一 ...
- 2021-07-11:给定一个棵完全二叉树,返回这棵树的节点个数,要求时间复杂度小于O(树的节点数)。
2021-07-11:给定一个棵完全二叉树,返回这棵树的节点个数,要求时间复杂度小于O(树的节点数). 福大大 答案2021-07-11: 右树最左节点层数==左树最左节点层数,左树是满二叉树,统计左 ...