实现音视频通话
CallLib 是在 RTCLib 基础上,额外封装了一套音视频呼叫功能 SDK。它包含了单人、多人音视频呼叫的各种场景和功能,通过集成它,您可以自由地实现音视频呼叫场景的各种玩法。
房间人数上限
考虑移动设备的带宽(主要是在多路视频情况下),建议单次通话或房间内,视频不超过 16 人,纯音频不超过 32 人。超过此上限可能影响通话效果。
步骤 1:服务开通
您在融云创建的应用默认不会启用音视频服务。在使用融云提供的任何音视频服务前,您需要前往控制台,为应用开通音视频服务。
具体步骤请参阅开通音视频服务。
服务开通、关闭等设置完成后 15 分钟后生效。如需通过 SDK 判断您的 App 是否已成功开通服务,可使用 CallLib 的 isVoIPEnabled 方法。
步骤 2:SDK 导入
您需要导入融云音视频通话能力库 CallLib,和 RTC 业务所依赖的即时通讯能力库 IMLib。根据您的业务需求,可选择导入美颜扩展库。
具体步骤请参阅导入 CallLib SDK。
步骤 3:代码混淆
若开发者发布的 App 启用代码混淆,请务必在 app/proguard-rules.pro 文件添加如下配置:
-keepattributes Exceptions,InnerClasses
-keepattributes Signature
#RongRTCLib
-keep public class cn.rongcloud.** {*;}
#RongIMLib
-keep class io.rong.** {*;}
-keep class cn.rongcloud.** {*;}
-keep class * implements io.rong.imlib.model.MessageContent {*;}
-dontwarn io.rong.push.**
-dontnote com.xiaomi.**
-dontnote com.google.android.gms.gcm.**
-dontnote io.rong.**
-ignorewarnings
步骤 4:权限配置
在 AndroidManifest.xml 中声明权限
在 AndroidManifest.xml
中声明 SDK 需要的所有权限:
<!-- 音视频需要网络权限和监听网络状态权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 摄像头采集需要 -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- 音频采集需要 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
配置运行时权限
如果您的应用需要支持 Android 6.0(API 级别 23)或更高版本的设备,您还需要在 App 用户使用对应功能时(例如发起呼叫、接听)请求摄像头(CAMERA
)、麦克风(RECORD_AUDIO
)权限。详见 Android 开发者官方文档运行时权限与请求权限的工作流。
步骤 5:初始化
音视频 SDK 是基于即时通信 SDK 作为信令通道的,所以要先初始化 IM SDK。如果不更换 AppKey,在整个应用生命周期中,初始化一次即可。建议在 Application 的 onCreate()
方法内,或在音视频功能模块的加载位置处调用。
初始化配置(InitOption
)中封装了区域码(AreaCode)配置。SDK 将通过区域码获取有效的导航服务地址、文件服务地址、数据统计服务地址、和日志服务地址等配置。
- 如果 App Key 属于中国(北京)数据中心,您无需传入任何配置,SDK 会使用默认配置。
- 如果 App Key 属于海外数据中心,则必须传入有效的区域码(AreaCode)配置。请务必在控制台核验当前 App Key 所属海外数据中心后,找到 AreaCode 中对应的枚举值进行配置。
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
String appKey = "YourAppKey"; // example: bos9p5rlcm2ba 从控制台申请的 AppKey
InitOption initOption = new InitOption.Builder().build();
RongCoreClient.init(this, appKey, initOption);
}
}
融云 SDK 默认采用了多进程机制(如需修改进程模式,参考[进程说明]文档),初始化之后,应用会启动以下进程:
- 应用的主进程
<应用包名>:ipc
。此进程是 IM 通信的核心进程,和主进程任务相互隔离。io.rong.push
:融云默认推送进程。该进程是否启动由推送通道的启用策略决定。详细说明可参考启用推送。
步骤 6:通话事件处理
SDK 提供针对来电、通话状态、通话记录的事件处理机制。