Qcon 演讲纪实:详解如何在实时视频通话中实现AR功能

news/2024/3/4 8:44:50

2018年4月20日-22日,由 infoQ 主办的 Qcon 2018全球软件开发大会在北京如期举行。声网首席 iOS 研发工程师,iOS 端移动应用产品设计和技术架构负责人龚宇华,受邀分享了《基于 ARkit 和 ARcore,在实时视频通话中实现 AR 功能》,在演讲中剖析了 AR 与 VR 差异,ARKit 的工作原理,以及逐步讲解如何基于 ARKit 与声网Agora SDK 创建 AR 视频会议场景。

以下为演讲精华摘录:

首先,龚宇华简要分析了 AR 与 VR 的差别是什么,“VR 是将人置身于一个完全虚拟的场景中,它发展到极致就会像《黑客帝国》一样,你所看到的一切都是虚拟的;AR 则是在现实场景中增加虚拟元素,让两者结合,就像《钢铁侠》电影中的头盔一样,在可以查看周围环境的同时,显示虚拟元素”。不只是在电影中,现实中也有很多AR的应用案例,比如曾火爆一时的游戏 Pocketmon go。

ARKit 如何实现 AR 场景?

在演讲中,龚宇华为大家演示了如何实现一个 AR 视频会议场景,实现效果会与我们在电影《王牌特工》中所看到的场景类似(如下图),特工戴上眼镜之后,世界另一端的特工的虚拟形象就与他坐在同一张桌旁。

“就像我们说把大象放进冰箱里三步骤,我们要打开冰箱,把大象放进去,关上冰箱。那我们实现 AR 的虚拟会议室也是分三步骤,就是实现 AR、实现视频会议,然后把它两个结合起来。”龚宇华表示。最终我们会实现下图中的Demo效果。

目前,苹果和 Google 分别推出了 ARKit 和 ARCore,为我们在移动端实现 AR 场景降低了门槛。实现AR的原理是怎样的呢?我们以 ARKit为例,来看下它是如何工作的。如刚刚所说,AR 就是在实际环境中植入虚拟元素,那么首先要识别出周围环境,也就是通过 iPhone 的摄像头来实现。在手机加速计、陀螺仪的帮助下,ARKit 可以识别3D 的环境并判断手机在环境中的姿态。

通过以上实现过程,我们很容易理解 ARKit 的限制,比如:

  • 光线差:没有足够的光或光线过强的镜面反光。尝试避免这些光线差的环境。
  • 缺少纹理:如果摄像头指向一面白墙,那也没法获得特征,ARKit 也去无法找到并追踪用户。尝试避免看向纯色、反光表面等地方。
  • 快速移动:通常情况下检测和估算 3D 姿态只会借助图片,如果摄像头移动太快图片就会糊,从而导致追踪失败。但 ARKit 会利用视觉惯性里程计,综合图片信息和设备运动传感器来估计用户转向的位置。因此 ARKit 在追踪方面非常强大。

在完成环境识别之后,还需要渲染,通常我们会想到使用 OpenGL 或 Metal 渲染,但是它们的开发成本比较高,所以苹果想了一办法,就是通过 SceneKit 进行渲染。

我们可以通过以下几行代码实现 AR,也就是“将大象关进冰箱”的第一步。

 @IBOutlet weak var sceneView: ARSCNView!override func viewDidAppear(_ animated: Bool) {super.viewDidAppear(animated)guard ARWorldTrackingConfiguration.isSupported else {return}let configuration = ARWorldTrackingConfiguration()configuration.planeDetection = .horizontalsceneView.session.run(configuration)
}

实现视频通话功能

我们可以通过声网Agora SDK 来快速实现视频通话。在这样的视频通话场景中,声网Agora SDK 具备几个优势:

低延时:声网SDK 实时通讯网络,可实现全球百毫秒级音视频通话;

快速集成:开发者最快可在30分钟内完成集成;

全球化部署:支持全球200多个国家与地区。

在下载最新版声网Agora SDK 后,将其添加到我们的 AR Demo 中。通过以下代码,可以基于 Agora 实现视频会议。

 // 初始化引擎let agoraKit = AgoraRtcEngineKit.sharedEngine(withAppId: myAppId,delegate: self)// 设置为发送端agoraKit.setChannelProfile(.liveBroadcasting)agoraKit.setClientRole(.broadcaster)agoraKit.enableVideo()// 加入会议agoraKit.joinChannel(byToken: nil,channelId: “QCon2018”,info: nil,uid: 0,joinSuccess: nil)

将视频通话融入AR场景

在完成视频会议的搭建之后,我们还需要传输本地视频与音频。

let videoSource = ARVideoSource()
agoraKit.setVideoSource(videoSource) 

func session(_ session: ARSession, didUpdate frame: ARFrame) {videoSource.sendBuffer(frame.capturedImage, timestamp: frame.timestamp)
}

1agoraKit.enableExternalAudioSource(withSampleRate: 44100, channelsPerFrame: 1)
1func session(_ session: ARSession, didOutputAudioSampleBuffer audioSampleBuffer: CMSampleBuffer) {
2 agoraKit.pushExternalAudioFrameSampleBuffer(audioSampleBuffer)
3}
最后,当我们通过SDK获得了其它用户发来的音视频数据后,我们还需要将其渲染到AR环境中,实现方式如下。

 class ARVideoRenderer : NSObject, AgoraVideoSinkProtocol {var renderNode: SCNNode!func bufferType() -> AgoraVideoBufferType { return .rawData }func pixelFormat() -> AgoraVideoPixelFormat { return .I420 }func renderRawData(_ rawData: UnsafeMutableRawPointer,size: CGSize,rotation: AgoraVideoRotation) {let rgbTexture = createTexture(widthYUV: rawData, size: size, rotation: rotation)renderNode.geometry?.firstMaterial?.diffuse.contents = rgbTexture}func shouldInitialize() -> Bool { return setupMetal() }func shouldStart() { }func shouldStop() { }func shouldDispose() { }
}

我们曾在之前《基于ARKit与Agora SDK实现AR视频会议》文章中分享了详细的实现步骤,大家也可以访问声网Agora的Githu查看源码。


声网Agora有奖征文活动 正在进行中,只要分享你与声网SDK相关的开发经验博文,即有机会获得Cherry红轴机械键盘、T恤等声网定制奖品。详情请戳这里或微信咨询(ID:dorianz)。


http://www.ppmy.cn/news/296272.html

相关文章

Git学习之旅

目录 一、Git与Svn的区别 1.Svn概述 2.Git概述 3.Git与Svn的区别 二、Git工作流程 三、Git与其他相关工具的安装与配置 四、Git本地仓库的基本操作 1. 创建版本库 2. 添加文件 3. 查看仓库当前状态 4. 修改文件 4.1 提交修改文件 4.2 查看修改日志 4.3 比较文件修改前后差异…

日均语音请求量突破10亿次,百度输入法的又一个起点

文 | 魏启扬 来源 | 智能相对论(ID:aixdlun) 2020年的春节假期因为新冠疫情给所有人来了个措手不及,大量“云”服务被激活,作为在线沟通工具的输入法首当其冲,成为特殊时期接受考验的中坚力量之一&#x…

最新比树莓派好了单板计算机,2017年十大SBC产品:性价比最高的单板计算机是谁?-控制器/处理器-与非网...

以下我们选出了 10 款在 2017 年推出、最值得注意的 SBC 产品 ... 自从树莓派(Raspberry Pi)在 2012 年诞生以来,市场上有越来越多单板计算机(single board computer,SBC)涌现,几乎每个月都有新产品上市;这些 SBC 可应用于机器人、…

怎么使用devecostudio更新鸿蒙,DevEcoStudio搭载HapticsKit:带来“触”动人心的“振”撼体验...

当TA和声音结合在一起时,影音体验更加身临其境; 当TA和交互结合在一起时,指尖与屏幕的每一次触碰变得更加真实细腻; 当TA和输入结合在一起时,以另一种方式重拾键盘的美好; 当TA和游戏结合在一起时&#xff…

【双十一】程序员的高效剁手清单,是你的购物车么

又是一年双11,你的钱包它还好了咩? 过去的11月11日,程序员们的生活并未有何波澜,一如既往地敲敲代码,看看朋友圈里的恩爱,吃吃狗粮。虽然,他们一个个搞着面向“对象”编程,但离“对…

海尔简爱s11装Linux,海尔简爱S11值得买吗 海尔简爱S11全面深度评测详解

虽然市面上的笔记本电脑产品众多,但在大多数消费者的认知中,笔记本电脑一直是属于“高档耐用品”的范畴,价格便宜的通常都是一些山寨厂商的产品,不过当你真正到市场上去看一圈的时候,就会发现,像华硕、联想、宏碁这样的PC大厂同样有价格非常实惠的产品,这些产品虽然综合…

2023前端面试

VUE vue3.0性能提升主要是通过哪几个方面体现的 响应式实现优化,vue2使用数据劫持需要递归去做响应式处理,vue3使用proxy代理一步到位diff算法优化,vue2全量对比,vue3使用了静态标记、静态提升、函数缓存等去优化mvvm Model-View-ViewModel, MVVM采用双向数据绑定,ViewMod…

python入门笔记

1.python注释 多行注释的话可以选中需要注释的代码,按ctrl/ 取消注释同理 2.python变量 赋值时就会创建变量,不用声明 要指定类型变量可以强制转换 变量名:区分大小写,必须以字母或者下划线字符开头,不能以数字开头&#xf…

Linux下socket网络编程实战思考

socket网络编程是每个服务端开发人员必会技能,但是目前市面上各种web服务器容器,屏蔽了很多底层实现,导致很多socket通信细节被屏蔽,本文结合在linux下C语言socket通信说明一下网络通信的一些注意点。 目录 1.多进程模型tcp服务…

程序员节种草清单|QUANT必须拥有的10件黑科技好物

2022年的双十一 比以往时候来的更早一些 今年的双11活动于1024正式开启 全网程序员都在过节 局长收集了10件黑科技好物 机智的QUANT已经默默装进了购物车 1.机械键盘 Filco 104键忍者双模 要想代码码的快,机械键盘你的爱 神秘的“大F”,Filco&…

淘宝/天猫:畅销榜 API 返回值说明

item_search_best-天猫畅销榜 前往获取key和secret onebound.taobao.item_search_best 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_search_best 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密…

荣耀V40正式发布:三大黑科技引擎 全方位护航游戏体验

2021年荣耀新品发布会,荣耀V40正式发布。正如此次产品全新Slogan“前所未感”,荣耀V40不仅在ID设计上将理性的矩形空间和感性的色彩变幻相融合,采用1:3:9:27等比矩形序列重新划分平面,展示出一种重新定义秩序的逻辑美学&#xff0…

电商平台如何高效快速获取信息?

随着互联网的发展,电商跨境电商给我们的购物带来了巨大的便利和变化。 比如电商平台中,经常要做的就是如何获取某个平台畅销产品。这里举例,淘宝畅销榜的信息获取。 请求地址 公共参数 请求参数 请求参数:q 参数说明&#xf…

设计模式之十生成器模式

概念 生成器模式的核心是当构建生成一个对象的时候,这个对象一般比较复杂。需要包含多个步骤,虽然每个步骤具体的实现不同,但是都遵循一定的流程与规则 。建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说&#xff0c…

“卖键盘的被键盘侠喷了” | 社交网络的戾气怎么这么重

六一儿童节的时候,cherry中国在微博发起了一个抽奖活动。 很正常的抽奖,对不对?但是因为一条评论,整个画风就全都乱起来了。 火野胖次 的评论略显侵略性,官微回复表示“我问您哪句话总结出这个意思?”下面就…

foobar2000隐藏桌面悬浮窗头像_如何解锁华为手机隐藏的超能力?

华为手机有哪些过人之处? 先别着急回答 本期小编将介绍五个很多人都不知道的 华为手机隐藏超能力 想成为玩机高手? 其实很简单 01 备忘录,还可以这么玩 备忘录是大家平时工作生活中都常会用到的应用,看起来很普通,其实…

华为手机键盘android不能长按,输入法cherry经典机械键盘怎么不能长按出来数字...

[问题反馈] 输入法cherry经典机械键盘怎么不能长按出来数字 116910 电梯直达 huafans01245393877 略有小成 发表于 2020-3-10 22:30:22 来自:HUAWEI Mate 30 Pro 5G 最新回复 2020-3-11 15:54:54 输入法cherry经典机械键盘怎么不能长按出来数字,我网上搜…

工厂智慧能源-AcrelCloud-5000智慧能源综合解决方案

功能: AcrelCloud-5000能耗管理云平台采用泛在物联、云计算、大数据、移动通讯、智能传感等技术手段可为用户提供能源数据、统计分析、能效分析、用能预警、设备管理等服务,平台可以广泛应用于多种领域。 ​ 应用场所: 云平台结构&#xf…

《LCHub低代码指南》:ChatGPT会取代低代码开发平台吗?

目录 一、低代码开发平台的优势 1. 提高开发效率 2. 降低开发成本 3. 提高应用程序的质量 二、ChatGPT的优势 三、ChatGPT是否会取代低代码开发平台 四、结论 随着数字化时代的到来,低代码开发平台已经成为了企业数字化转型的重要工具之一。然而,随着人工智能技术的不…

DC LAB8SDC约束四种时序路径分析

DC LAB 1.启动DC2.读入设计3. 查看所有违例的约束报告3.1 report_constraint -all_violators (alias rc)3.2 view report_constraint -all_violators -verbose -significant_digits 4 (打印详细报告) 4.查看时序报告 report_timing -significant_digits 45. 约束组合逻辑(adr_i…
最新文章