CloudHub 文档中心
下载中心 文档中心

RTC 音视频互动


快速集成 SDK

准备

1.需要集成 SDK 的工程

2.cloudhub_rtc.aar 包

集成 SDK

已 AndroidStudio 为例:

1.复制 cloudhub_rtc.aar 到项目中,复制 cloudhub_rtc.aar 到需要集成的项目中的 Module 的 libs 文件夹中,libs 文件夹需要与 src 文件夹同层级,如图所示:

![](/images/androidsdk/android-integrate.png)

如果不存在 libs 文件夹,右键 module-New-Directory, 输入 libs, 创建

![](/images/androidsdk/android-integrate-libs.png)

2.gradle 中添加依赖

```gradle
repositories{
    flatDir{
        dirs'libs'
    }
}
```

同时,在 dependencies 节点下,添加 api(name:'cloudhub_rtc',ext:'aar')

如图所示

![](/images/androidsdk/android-integrate-api.png)

如果有其他 module 依赖添加 aar 的 module,需要在其他 module 中,同样添加 aar 的依赖

例如:有2个 module,module1 和 module2,module2 中依赖了 aar,module1 依赖 module2,需要在 module1 中同样添加 module2到 aar 包

module1 的 build.gradle 如图所示:

![](/images/androidsdk/android-integrate-module.png)

3.添加权限

```xml
<uses-permission android:name="android.permission.CAMERA"/>

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

<uses-permission android:name="android.permission.RECORD_AUDIO"/>

<uses-permission android:name="android.permission.BLUETOOTH"/>

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
```

实现音视频直播

创建音视频直播界面

根据实际业务场景需要,创建音视频直播用户界面

可以参考 Android 音视频 SDK DEMO 中的示例代码

申请权限

调用 checkSelfPermission 方法,在开启 Activity 时检查并获取 Android 移动设备的摄像头和麦克风使用权限。

private List<String> mPermissionList = new ArrayList<>();

private String[] mPermissions = new String[]{
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.CAMERA,
            Manifest.permission.RECORD_AUDIO};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    requestPermission();
}

public void requestPermission() {
    mPermissionList.clear();
    for (String permission : mPermissions) {
        if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
            mPermissionList.add(permission);
        }
    }
    if (!mPermissionList.isEmpty()) {
        ActivityCompat.requestPermissions(this, mPermissionList.toArray(new String[mPermissionList.size()]), 100);
    } else {
        attemptLogin();
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 100 && grantResults.length > 0) {
        boolean isFlage = false;
        for (int i = 0; i < grantResults.length; i++) {
            if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
                isFlage = true;
                Toast.makeText(this, permissions[i] + getString(R.string.permission_denied), Toast.LENGTH_SHORT).show();
            }
        }
    }
}

初始化 RtcEngine

在调用其他 API 前,需要创建并初始化 RtcEngine 对象。

在此之前,需要申请 APPID ,参考 创建 CloudHub 账号并获取 AppId

String appId = Constants.APPID;
RtcEngine.initEngine(getApplicationContext(), "订阅", null, appId);

您还需要在初始化时注册监听的回调事件,关于事件的具体信息,参考 概览

开启音视频并设置视频相关配置

// Audio volume prompts time interval
RtcEngine.enableAudioVolumeIndication(1000);
// Enable Local Audio
RtcEngine.enableLocalAudio(true);
// Enable Local Video
RtcEngine.enableLocalVideo(true);
// Local HD Acquisition
RtcEngine.setLocalVideoHD();
RtcEngine.enableVideo(true);
// Sets the video encoding properties
RtcEngine.setVideoEncoderConfiguration(320, 240, 10, RtcEngine.ORIENTATION_MODE_ADAPTIVE);

设置用户信息

JSONObject properties = new JSONObject();
properties.put("username", mUserName);
properties.put("id", mMySelfId);

加入频道

RtcEngine.joinChannel(mChannelId, mMySelfId, Constants.TOKEN, properties.toString());

处理频道内回调

根据业务需求,在相关回调函数内处理。参考 RtcEngineListener

离开频道

根据场景需要,调用 leaveChannel 离开当前直播频道。

RtcEngine.leaveChannel();

更多方法及示例代码

可以参考 概览 中的方法说明 和 Android 音视频 SDK DEMO 中的相关实现

其他说明

aar 包更新问题

如果 aar 有更新,直接替换 aar 包可能不生效,可参考 android studio 替换 AAR 后源码不刷新问题解决