开发准备
设备以及系统要求
- 系统要求:Android 4.3 (API 18) 及以上
- Java 版本: Java 8+
开发环境
下载和导入实时音视频 SDK
SDK 主要包含 demo 代码、SDK jar 包,以及 SDK 依赖的动态库文件。 其中,release 目录下是需要拷贝到您的 Android 工程的所有文件,以目前主流的 armeabi-v7a 架构为例,具体如下:
文件名称 | 功能 | 大小 | 备注 |
---|---|---|---|
qndroid-rtc-x.y.z.jar | SDK 库 | 834 KB | 必须依赖 |
libqndroid_rtc.so | 连麦 | 5.9 MB | 必须依赖 |
libqndroid_beauty.so | 美颜 | 452 KB | 不用自带美颜,可以不依赖 |
libqndroid_amix.so | 混音 | 343 KB | 不用混音功能,可以不依赖 |
- 将 qndroid-rtc-x.y.z.jar 包拷贝到您的工程的 libs 目录下
- 将动态库拷贝到您的工程对应的目录下,例如:armeabi-v7a 目录下的 so 则拷贝到工程的 jniLibs/armeabi-v7a 目录下
导入后生成的 APK 与未导入前相比,大小增加了 4.1M(包含美颜动态库)。需要注意的是,armabi 下的动态库(so 文件)是没有软编能力的,即 armabi 下仅支持硬编码,不支持软编码。若无特殊情况建议使用 armeabi-v7a 下的动态库。
具体可以参考 SDK 包含的 demo 工程,集成后的工程示例如下:
您也可以添加sdk的文档链接方便开发查阅:
- 首先找到工程中.idea/libraries/目录下的对应依赖包配置文件,然后添加如下链接配置
- 然后打开Android Studio设置菜单,开启文档提示:
当然,您也可以使用之前配置的任何快捷键
- 现在,开发过程中就可以查看对应接口的文档提示了:
下方的蓝色链接还可以跳转到外部查看
修改 build.gradle
打开工程目录下的 build.gradle,确保已经添加了如下依赖,如下所示:
dependencies {
implementation files('libs/qndroid-rtc-x.y.z.jar')
}
如果您使用的版本是 2.5.0+,那么为了给您提供更好的使用体验,请务必依赖如下 dns 解析库:
dependencies {
implementation 'com.qiniu:happy-dns:0.2.17'
}
添加混淆
如果工程中添加了混淆,则七牛的包也需要添加混淆规则,在 proguard-rules.pro 文件下添加以下代码:
-keep class org.webrtc.** {*;}
-dontwarn org.webrtc.**
-keep class com.qiniu.droid.rtc.**{*;}
-keep interface com.qiniu.droid.rtc.**{*;}
添加相关权限
在工程的 AndroidManifest.xml 中增加如下 uses-permission
声明:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
在 Android 6.0 (API 23) 开始,用户需要在应用运行时授予权限,而不是在应用安装时授予,并分为正常权限和危险权限两种类型。在实时音视频 SDK 中,用户需要在进入音视频通话房间前动态申请 CAMERA
、RECORD_AUDIO
、WRITE_EXTERNAL_STORAGE
权限,具体可参考 Android 官方文档。
Track 和 master 概念介绍
为了实现 单用户多路流 的场景,我们在 v2.x.x 版本对底层做了大规模的重构。原来 v1.x.x 版本中流和用户是一一绑定的,一个用户只能发布一个流,所以类似于订阅的操作仅需要指定 userId 内部即可定位到相对应的流,在 v2.x.x 版本中有了多路流的功能,即是一个用户可发布多个视频画面,在 v1.x.x 版本中无法实现,所以用户需要理解 Track 这个概念。
一条 Track 就是一条音频轨或一条视频轨,在 v2.x.x 版本中一个用户可以采集和发布任意数量的 Track,同时在订阅的时候也可指定订阅任意数量的 Track。对于上层开发来说即可非常灵活地实现各种需求,比如同时发布音频轨道、视频轨道和屏幕共享轨道,这在在线教育场景和在线会议场景中是很常见的。
针对 v1.x.x 版本和 v2.x.x 版本的兼容,我们提供了一个 master 概念,在 v2.x.x 使用只有一条音频 Track 和一条视频 Track (视频 Track 可以为相机采集、屏幕采集、外部数据导入) 时,可以设置这两条 Track 为 master 轨道,此时这两条 Track 的结合即可认为是 v1.x.x 版本下的一路流,当然也可以只设置一条 Track 作为 master 轨道,满足纯音频/纯视频通话场景的使用。需要注意的是,同一用户最多只能设置一条音频 Track 和一条视频 Track 为 master 轨道。