使用声网 SDK 和 UIKit 创建视频推流应用非常简单,而且声网还有许多功能,可以提高视频通话的质量和便利性。例如,我们可以在视频通话过程中使用虚拟背景,为视频通话增添趣味性。

我们可以通过以下三种方式自定义视频通话的背景:

● 使用图像作为背景

● 使用纯色背景

● 在现有背景上应用模糊效果


本教程教大家使用声网 Android SDK 和 Android UIKit 在 Android 中添加虚拟背景。

原文作者:Rishav Naskar

原文链接:

https://www.agora.io/en/blog/add-custom-backgrounds-to-your-live-video-calling-application-using-the-agora-android-uikit/

01 前期准备

● 一个声网开发者账户

● 了解如何使用声网 Android UIKit 创建直播推流 Android 应用(可在官方 GitHub 搜索查看)

● 了解 Android 开发的基础知识

● Android Studio

● 一个 Android 设备

02 设置

第一步:如果你不打算把它集成到现有的项目中,可以在 Android Studio 中创建一个新的 Android 应用程序。

第二步:前往 GitHub,克隆声网 UIKit GitHub 资源库,并在文件浏览器中打开此项目。

你会在这个克隆的 UIKit 项目中找到 agorauikit_android 目录,把这个目录复制并粘贴到你的应用程序中的父级的位置。这个目录包含了声网的 Android UIKit,是扩展工作的关键。

第三步:确保你的项目级 build.gradle 有以下内容:

allprojects {
repositories {
google()
mavenCentral()
gradlePluginPortal()
maven { url 'https://www.jitpack.io' }
flatDir {
dirs 'libs'
}
}
}

第四步:前往 UIKit 的项目级 build.gradle.kts,进行以下操作:

1.如果存在插件 maven,将其删除,因为它已被废弃。

2.移除版本代码和版本名称(如果有)。

第五步:我们将添加一个包来点击图片或从设备图库中获取图片。为此,我们需要在应用级 build.gradle 中导入 Android UIKit 和一个图片采集器包。

implementation 'com.github.dhaval2404:imagepicker:2.1'
implementation project(':agorauikit_android')

第六步:在 AndroidManifest.xml 文件中添加以下权限,以获得必要的用户权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />

大功告成啦!以上就是所有设置,接下来是写代码。

03 视频通话用户界面

我们不需要在构建用户界面方面做太多的工作,因为所有这些都已经由声网 Android UIKit 完成了。

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
​
try {
this.agView = AgoraVideoViewer(this, AgoraConnectionData(appId = "--YOUR-APP-ID--"))
​
val frameLayout: FrameLayout.LayoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT,
)
​
this.addContentView(agView, frameLayout)
​
if (AgoraVideoViewer.requestPermissions(this)) {
joinCall()
} else {
val joinButton = Button(this)
val joinString = "Allow Camera and Microphone, then click here"
joinButton.text = joinString
joinButton.setOnClickListener {
if (AgoraVideoViewer.requestPermissions(this)) {
(joinButton.parent as ViewGroup).removeView(joinButton)
joinCall()
}
}
joinButton.setBackgroundColor(Color.GREEN)
joinButton.setTextColor(Color.RED)
this.addContentView(
joinButton,
FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, 300)
)
}
} catch (e: Exception) {
Log.i(tag, "---- ERROR ----")
e.message?.let { Log.i(tag, it) }
}
}
}

使用声网 Android UIKit 进行基础的视频通话

04 使用虚拟背景

我们使用 MainActivity.kt 作为主要活动,用于启动视频通话应用程序。

导入必要的依赖

import io.agora.agorauikit_android.AgoraButton
import io.agora.agorauikit_android.AgoraConnectionData
import io.agora.agorauikit_android.AgoraVideoViewer
import io.agora.agorauikit_android.requestPermissions
import io.agora.rtc.Constants
import io.agora.rtc.IRtcEngineEventHandler
import io.agora.rtc.video.VirtualBackgroundSource
import com.github.dhaval2404.imagepicker.ImagePicker

声明一些变量

整个过程我们需要以下三个变量:

● agView : 这是 AgoraVideoViewer 类型的变量,用于调用 Android UIKIT,没有它无法进行视频调用。

● tag: 我们用这个字符串记录相关数据。我们可以选择忽略这一点,只需在记录数据时进行相应的修改就可以。

● virtualBackgroundToggle: 我们用这个布尔型变量开启或关闭虚拟背景效果,它在整个过程中非常重要。

我们可以在 Mainactivity.kt 中以如下方式添加这些内容:

private var agView: AgoraVideoViewer? = null
private val tag = "VirtualBackground"
private var virtualBackgroundToggle = false

用虚拟背景加入视频通话

我们用 joinCall() 方法来实现虚拟背景,可参照上面的视频通话用户界面。

虚拟背景会自动检测视频通话中的任何对象,不会与任何对象重叠。在声网 Android SDK 中,虚拟背景有以下 3 种方式:

● 虚拟背景图像 —— 我们可以使用任何可用的软件包从手机的相册或相机中获取图像,将其作为背景添加到我们的视频通话中。

● 虚拟背景色 —— 我们可以添加任何十六进制颜色作为背景。

● 虚拟背景模糊 —— 我们可以为现有背景添加一个额外的模糊效果,并且可以选择模糊等级:低-中-高。

private fun joinCall() {
val backgroundButton = addBackgroundButton()
this.agView?.join(channel = "test", role = Constants.CLIENT_ROLE_BROADCASTER)
​
backgroundButton.setOnClickListener {
if (!virtualBackgroundToggle) {
/* For virtual background IMAGE */
pickImageFromGallery()
​
/* For virtual background COLOR
val backgroundSource = virtualBackgroundCOLOR(0xFFB6C2) */
​
/* For virtual background BLUR
virtualBackgroundBLUR(VirtualBackgroundSource.BLUR_DEGREE_MEDIUM) */
} else {
disableCustomBackground()
}
}

关键是要记住,每次只启用上述一种虚拟背景。我使用了虚拟背景图片作为例子。我们可以开启其他两个中的任何一个,同时注释掉其他的。

切换虚拟背景

我们使用 AgoraButton 来开启/关闭 Android UIKIT 中的虚拟背景效果。

private fun addBackgroundButton(): AgoraButton {
val backgroundButton = AgoraButton(this)
backgroundButton.setBackgroundResource(R.drawable.ic_baseline_image_24)
this.agView?.agoraSettings?.extraButtons?.add(backgroundButton)
return backgroundButton
}

应用虚拟背景图像

我们采用以下步骤来应用虚拟背景图像:

● 采用合适的 intent ,使用第三方包从相册/相机中获取图像

● 当活动返回一个结果时,启用虚拟背景图像

● 选择的图像必须符合这些规范

private fun pickImageFromGallery() {
ImagePicker.with(this).crop().compress(1024).maxResultSize(1080, 1080).createIntent {
pickImageFromGalleryResult.launch(it)
}
}
​
private val pickImageFromGalleryResult = registerForActivityResult(StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
val data: Intent = it.data!!
virtualBackgroundIMG(data.data!!.path)
return@registerForActivityResult
} else {
Log.e(tag, "--- ERROR AFTER IMAGE ---")
}
}
​
private fun virtualBackgroundIMG(imgSrc: String? = null) {
val backgroundSource = VirtualBackgroundSource()

应用虚拟背景色

我们可以使用任何符合规范的十六进制颜色作为虚拟背景。

private fun virtualBackgroundCOLOR(color: Int) {
val backgroundSource = VirtualBackgroundSource()
backgroundSource.backgroundSourceType = VirtualBackgroundSource.BACKGROUND_COLOR
backgroundSource.color = color
enableVirtualBackground(backgroundSource)
}

应用虚拟背景模糊

我们可以应用三种模糊级别:低、中、高。

private fun virtualBackgroundBLUR(blurDegree: Int) {
if (blurDegree > 3 || blurDegree < 0) {
Log.i(tag, "Invalid Blur Degree")
return
}
val backgroundSource = VirtualBackgroundSource()
backgroundSource.backgroundSourceType = VirtualBackgroundSource.BACKGROUND_BLUR
backgroundSource.blur_degree = blurDegree
enableVirtualBackground(backgroundSource)
}

开启虚拟背景

最后,我们需要使用声网 Android UIKIT 和 Android SDK 开启虚拟背景。这里,我们将执行 enableVirtualBackground() 方法,你可能已经在上面找到了。

private fun enableVirtualBackground(backgroundSource: VirtualBackgroundSource) {
this.agView?.agkit?.enableVirtualBackground(true, backgroundSource)
​
this.agView?.agkit?.addHandler(object : IRtcEngineEventHandler() {
override fun onVirtualBackgroundSourceEnabled(enabled: Boolean, reason: Int) {
super.onVirtualBackgroundSourceEnabled(enabled, reason)
virtualBackgroundToggle = !virtualBackgroundToggle
Log.i(tag, "Virtual Background - ${backgroundSource.backgroundSourceType}")
println(enabled)
println(reason)
Toast.makeText(this@MainActivity, "Virtual Background Enabled", Toast.LENGTH_SHORT).show()
}
})
}

关闭虚拟背景

使用声网 Flutter UIKIT 和 Flutter SDK,只需用一行代码就能快速关闭虚拟背景!

private fun disableCustomBackground() {
this.agView?.agkit?.enableVirtualBackground(false, VirtualBackgroundSource())
Toast.makeText(this, "Virtual Background Disabled", Toast.LENGTH_SHORT).show()
}

05 总结

我们现在有了一个可以设置虚拟背景的视频通话应用程序!这个应用可以在安卓应用程序中运行。

还有一大堆很好添加的其他功能,可以进入对应文档查看。

06 测试

大家可以通过 GitHub link 试用这个应用程序。克隆资源库之后,只需在安卓设备上运行该应用,即可测试该应用。

07 其他资源

要了解更多关于声网 Android SDK 和其他用例的信息,请查看下方开发者指南。也可以查看上面上述函数的完整文档及其他函数。

1)账号注册地址

https://sso2.agora.io/cn/v4/signup/with-email

2)官方 GitHub 地址

https://github.com/AgoraIO-Community

3)更多功能汇总

https://docs.agora.io/cn/Video/API%20Reference/java/index.html

4)开发者指南

https://docs.agora.io/cn

5)上述函数的完整文档及其他函数

https://docs.agora.io/cn/Video/API%20Reference/flutter/index.html

用声网 Android UIKit 为实时视频通话应用添加自定义背景丨声网 SDK 教程的更多相关文章

  1. 转 Android RadioButton设置选中时文字和背景颜色同时改变

    主要应用在购物车,像淘宝的那样,点击以后弹出一个选择种类颜色这样的popuwindow以后,然后这个选择种类的地方要用到类似这个玩意儿. 搜了一下,效果和这个文章一致.转了. 原文地址:http:// ...

  2. Android studio3.0打开Device File Explore(文件管理器)的方法(图文教程)

    Android studio3.0打开Device File Explore(文件管理器)的方法(图文教程) 看到网上AS3.0新增加的查看手机文件的新功能,全部都是转载的,没有几个人心细的把如何打开 ...

  3. Android中ViewPager实现滑动条及与Fragment结合的实例教程

    ViewPager类主要被用来实现可滑动的视图功能,这里我们就来共同学习Android中ViewPager实现滑动条及与Fragment结合的实例教程,需要的朋友可以参考下 自主实现滑动指示条先上一个 ...

  4. Android RadioButton设置选中时文字和背景颜色同时改变

    主要应用在购物车,像淘宝的那样,点击以后弹出一个选择种类颜色这样的popuwindow以后,然后这个选择种类的地方要用到类似这个玩意儿. 搜了一下,效果和这个文章一致.转了. 原文地址:http:// ...

  5. Android中获取实时网速(2)

    一.实现思路: 1.Android提供有获取当前总流量的方法 2.上一秒 减去 下一面的流量差便是网速 3.注意计算 二.计算网速的工具类: package imcs.cb.com.viewappli ...

  6. android 移动网络实时抓包

    2G.3G环境,那就必须root进去tcpdump 方式抓. 准备: 一.root CF-auto-root: http://autoroot.chainfire.eu/ 需要清理全部数据,注意备份 ...

  7. Android下海康实时视频解码

    折腾了一个多月,终于调出来了.....首先吐槽一下海康SDK,同时也感谢之... 手头有个项目,需要实时抓取海康摄像头,我是在Android下实现的,海康官网上没有Android SDK,这里友情提醒 ...

  8. 用ADB(Android Debug Bridge)实时监测Android程序的运行

      监控Android设备上程序的运行,需要ADB的配合,具体ADB工具的介绍以及命令选项可见博客: http://blog.csdn.net/mliubing2532/article/details ...

  9. Android开发人员官方站点文档 - 国内踏得网镜像

    Android Developer 安卓开发人员官方站点无法正常訪问.即使FQ因为网络原因依旧訪问缓慢. 故整理相关字体.脚本.样式.页面资源,在踏得网server上建立了本地镜像.初始镜像时间201 ...

  10. Java实现Android,iOS设备实时监控

    Java实现Android设备实时监控 设计思路: 第一,启动一个实时截图线程,负责实时截取Android设备屏幕,保存到本地路径. 第二,在JSP页面,定义一个img对象,实时更换img对象的src ...

随机推荐

  1. t:datagrid 行编辑 类型备份

    如编辑文本类型: <t:dgCol extendParams="editor:'text'" /> 如编辑数值类型: <t:dgCol extendParams= ...

  2. MFC编辑框字符显示时无法换行的问题解决

    字符串结尾加上"\r\n": 编辑框属性设置:Auto HScroll为False,Multiline为True,Want Return为True.

  3. css/js使用小技巧记录

    1.白底小图标换色 .iconBox { position: relative; width: 19px; height: 19px; overflow: hidden; // 隐藏原本颜色的图片 . ...

  4. Java基础|03.基础语法(2)

    Java安全|03.Java基础语法(2) 00x1 单例模式 定义: 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一 ...

  5. 昨天写了个ATM系统,学了点思想

    昨天上黑马的基础课终结,有个小测验是做个ATM系统 拿到之后我就明白该怎么做了 但是在后面遇到了瓶颈 就是 不知道怎么进入下级菜单 后面稍微看了一下他的做法,学会了 就继续做了,后面就做出来了 他这个 ...

  6. 【python】第一模块 步骤四 第一课、初始正则表达式

    第一课.初始正则表达式 一.课程介绍 1.1 课程概要 步骤介绍 正则表达式入门及应用 正则的进阶 案例 综合项目实战 二.正则表达式的基本操作(多敲代码多做练习) 2.1 什么是正则表达式 什么是正 ...

  7. arduino问题记录

    1.tx.rx只能写,不能读 2.Arduino中文社区

  8. HTML悬浮div

    需求,html底部为地图,上层是各个div HTML<body> //地图 <div id='map' id="demo1"></div> &l ...

  9. 如何安装vm虚拟机软件并用该软件建立虚拟机

    一.安装vm虚拟机软件 1.双击打开虚拟机应用程序 找到VM应用程序所在的位置,双击安装 2.根据向导安装 根据提示点击下一步 点击安装之后耐心等待一会,会出现需要输入许可证的的界面,这时候不要关闭界 ...

  10. 项目:口令保管箱,批处理文件配置.bat

    #! python3 import sys import pyperclip PASSWORDS = {'email': 'F7minlBDDuvMJuxESSKHFhTxFtjVB6', 'blog ...