一年一度的 WWDC 开幕了。我们看了来自各个勤劳媒体的回顾与解读。在这些新功能中,最吸引我们的还是最新更新的 FaceTime。

这次 FaceTime 不仅开始支持群组视频通话,还可以在视频通话时,判断谁在说,并自动放大他的视频窗口。乍看上去,很是惊艳。不过如果是基于声网视频通话SDK来实现,并不复杂,只需调用几个接口即可实现。

其实,在近些年的各种大型活动上,有不少与视频通话相关的“惊艳”功能,都成为当时的热门话题。我们今天来分享几个往年的“热门话题”,并讲解基于声网SDK如何来实现。

FaceTime 视频窗口自动调节

FaceTime 这次更新后新增多人群组视频通话。在通话过程中,如果你正在说话,那么你的视频窗口就会自动放大。( 点击这里观看视频)

其实这个功能通过声网 SDK 很容易实现,开发者不需要懂得如何玩转AI,只需要使用几个接口即可。我们在 SDK 中首先要实现多人视频通话功能,然后利用接口回调用户uid,了解是哪位用户正在说话,然后调整UI,让该用户窗口变为最大。具体调用的接口如下:

- (int)enableAudioVolumeIndication:(NSInteger)intervalsmooth:(NSInteger)smooth;//启用说话者音量提示
- (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engineactiveSpeaker:(NSUInteger)speakerUid;//返回正在说话的用户uid
FaceTime:视频预览

从 FaceTime 诞生起就有一个功能,在发起视频通话后,即便通话未被接听,用户也能在自己手机上看到自己的视频画面。

从实现角度来讲,我们只需要在开始发送音频、视频流之前,将视频数据渲染至界面上就可以达到这个效果。具体的接口调用如下:

setupLocalVideo()//设置预览视图
startPreview()//启动视频预览

Google Duo:Knock Knock

在2016年的 Google I/O 上,Google 发布了一款即时通讯工具 Allo,以及一款视频通话应用 Google Duo。两年过去了,Allo 项目已经被暂停,而主打视频通话的 Duo 却有着令人欣喜的用户增长。

在 Duo 中,有一个“Knock Knock”功能,在视频通话接通之前,被呼叫的一方能看到对方的实时视频画面,而呼叫的一方则看不到。就好像,有人敲了你的门,你凑近门眼,看到门外是朋友还是家人。

如果基于声网 SDK 来实现,我们只需要利用 API 控制好对音频、视频流的发送逻辑即可。在视频通话被接听之前,呼叫方与被呼叫方需要调用的接口如下。

呼叫方:

muteLocalAudioStream(true)//禁止发送音频
muteLocalVideoStream(false)//发送视频
joinChannel()//进入频道

被呼叫方:

muteLocalAudioStream(true)//禁止发送音频
muteLocalVideoStream(true)//禁止发送视频
setupRemoteVideo()//绑定主叫方视图
joinChannel()//进入频道

在通话被接听后,我们需要将此前的部分接口参数进行修改,具体如下。

呼叫方:

muteLocalAudioStream(false)//发送音频
setupRemoteVideo//设置远端视频显示属性

被呼叫方:

muteLocalAudioStream(false)//发送音频
muteLocalVideoStream(false)//发送视频

Snapchat:实时贴纸

在视频通话中,给自己添加各种贴纸和特效,现在已经不算非常新奇了。而最初,Snapchat 在直播中加入该功能时,确实艳惊四座,随即便成为了一种趋势。再回望昨晚的 WWDC,苹果不也给 FaceTime 增加了同类功能么?

首先,开发者可以通过自研的美颜库,或第三方库来对视频进行前处理,然后通过声网 SDK 进行渲染和传输。在这里,开发者可以通过以下两种方式来调用SDK的接口。

方式一:利用自采集 API

   setExternalVideoSource(true, useTexture: true, pushMode: true)pushExternalVideoFrame()

方式二:自定义视频源(视频通话 SDK 2.1及以上版本支持)

步骤 1:实现 AgoraVideoSourceProtocol 的接口,构建自定义的 Video source 类

  • 在获取 Buffer 类型 (bufferType) 的实现中指定视频采集使用的 Buffer 类型
  • 在初始化视频源 (shouldInitialize) 中准备好系统环境,进行初始化参数等设置
  • 在启动视频源 (shouldStart) 中开始采集视频数据
  • 将采集到的数据通过 AgoraVideoFrameConsumer Protocol 定义的接口传给 Media Engine
  • 在停止视频源 (shouldStop) 中停止采集视频数据
  • 在释放视频源 (shouldDispose) 中释放硬件等系统资源

步骤 2:创建自定义的视频源对象

步骤 3:通过 Media Engine 的设置视频源 (setVideoSource) 方法把自定义的视频源对象设置给 Media Engine

步骤 4:Media Engine 会在适当的实际调用自定义视频源中实现的AgoraVideoSourceProtocol 的方法

以上,我们仅以 iOS 为例,列出了其中的接口调用逻辑。当然对于其他操作系统,比如 macOS、Android 等系统,我们只需要少做调整也可以实现。详细的接口与参数,请访问开发文档阅读。想自己实现 FaceTime?自己动手尝试一下吧。

如果你基于声网SDK尝试实现了其它效果,并写在自己的博客中,欢迎在评论中分享。

如何快速实现FaceTime多人视频效果相关推荐

  1. Android 集成 Agora SDK 快速体验 RTC 版多人视频聊天|掘金技术征文

    RTC (Real-Time Communication) 作为实时通讯领域的"新贵",在互动直播.远程控制.多人视频会议.屏幕共享等领域广受好评,如果你还不了解 RTC ,Tak ...

  2. 视频照片合成软件哪个好?快速把手机照片做成视频,简单操作,效果精美!

    视频照片合成软件哪个好?怎么把照片合成视频?如何快速把手机照片做成视频? 这是我用数码大师把手机照片合成视频的效果截图: 第一步:快速导入多张照片,为照片配上文字 点击"添加相片" ...

  3. (Agora声网)多人视频聊天应用的开发(一)快速集成

    转载于:Android多人视频聊天应用的开发(一)快速集成-玖哥的书房-51CTO博客 http://blog.51cto.com/dongfeng9ge/2095621 本系列文章结合声网官方在Gi ...

  4. 【数字人生成】快速免费生成可以用于视频制作的数字人

    [背景] 有些条件下不具备录像和录音的条件,如果能够用虚拟方法,仅通过一张照片就让自己的数字人形象出镜做视频,甚至可以换成更丰富的数字形象来做视频,可以大大提高视频制作的效率和自由度. [问题] 视频 ...

  5. 如何快速实现移动端短视频功能?

    在"互联网+"概念被炒的如火如荼的今天,短视频以视频短.传播快.生产流程简单.制作门槛低.参与性强等特点在互联网所有的热门的焦点中脱颖而出,出现在公众的视野里.那么如何快速实现移动 ...

  6. 在抖音里怎么快速涨粉,抖音视频怎么发最容易上热门

    在抖音里怎么快速涨粉,抖音视频怎么发最容易上热门 新人运营抖音短视频,在试错期结束后要注意内容创作的标准化. 在抖音里怎么涨粉?抖音的形式从短视频变为直播.图片.长视频:变现形式也从广告扩展到直播.电 ...

  7. (Python)从零开始,简单快速学机器仿人视觉Opencv---运用四:图像损痕修复

    教程: 博主之前写了24节关于使用OpenCV的教程,欢迎大家阅读: (Python)从零开始,简单快速学机器仿人视觉Opencv-第一节:OpenCV的图像读取显示及保存 (Python)从零开始, ...

  8. 【游戏开发实战】Unity从零开发多人视频聊天功能,无聊了就和自己视频聊天(附源码 | Mirror | 多人视频 | 详细教程)

    文章目录 一.前言 二.思考问题与解决方案 1.思考问题 2.解决方案 2.1.Unity中如何开启摄像头并对图像进行采样 2.2.图像如何中转给其他客户端 2.3.如何实现清晰度切换 2.4.客户端 ...

  9. (Agora声网)多人视频聊天应用的开发(二)一对一聊天

    转载于:Android多人视频聊天应用的开发(二)一对一聊天-玖哥的书房-51CTO博客 http://blog.51cto.com/dongfeng9ge/2095626 本系列文章结合声网官方在G ...

最新文章

  1. 将动态库添加到VC程序中
  2. 如何自学Android--转
  3. HALCON基于形状匹配详解
  4. Sqlite学习笔记(五)SQLite封锁机制
  5. Leetcode--198. 打家劫舍
  6. boost 获取时间
  7. 恒大汽车:仍在就出售新能源汽车生活项目等资产进行磋商
  8. 后端开发工具:反编译工具、VS插件、.NET Framework源码地址
  9. JAVA延迟执行(thread方式和timer方式)
  10. Oracle 逗号分割的字符串转换为可放入in的语句
  11. PyQt5+爬虫打造磁力链接搜索工具
  12. EndNote X7如何在论文中嵌入中文定格式要求的参考文献
  13. Camera+收入超500万美金,VPlayer能否击败其神话?
  14. Nginx常用Rewrite(伪静态规则)WordPress/PHPCMS/ECSHOP/ShopEX/SaBlog/Discuz/DiscuzX/PHPWind/Typecho/DEDECMS...
  15. 30本从禁书到名著的阅读书单
  16. MsgBox函数用法小结
  17. Android游戏开发学习笔记(三):视频的播放
  18. 即时通讯软件都有哪些类型?哪些适合企业内部使用?
  19. Java动态性——反射机制学习笔记
  20. python网络爬虫方向的第三方库_Python网络爬虫中常用第三方库总结

热门文章

  1. win7 64位下自行编译OpenCV2.4.10+CUDA toolkit 5.5的整个过程以及需要注意的问题(opencv+cuda并行计算元素的使用)...
  2. asp.net实现bt和pt—tracker request
  3. iPhone SDK开发基础之iPhone程序框架
  4. firefox扩展开发(八) :控件激活
  5. 测试基础-01-软件测试的定义与分类
  6. Spring MVC 自定义验证器示例
  7. mysql 如何选择2行_MYSQL – 从大表中的第二行中选择数据
  8. jquery和css的区别是什么?
  9. 零基础转行Web前端开发自学靠谱吗?菜鸟学习前端的方法分享
  10. 7-4 sdut-运输计费问题 (10 分)python