文档

Android端集成

更新时间:

本文介绍了使用标准集成(无UI)方式接入Android端的方法。适用于互动直播、互动课堂等场景产品。

前提条件

环境要求

  • 系统版本:支持Android 5.0及以上版本。

  • API版本:支持21及以上版本。

  • CPU架构:支持实体设备架构armeabi-v7a、arm64-v8a。

  • 其他:不支持视频采集旋转,不支持USB外接摄像头。

集成步骤

流程概览

添加SDK依赖 > 添加配置权限 > 添加proguard配置(可选)> 完成工程编码

第一步:添加SDK依赖

SDK依赖可通过远程依赖或文件依赖方式添加。推荐使用远程依赖方式。

  • 方式1:远程添加依赖(推荐)

    1.配置依赖仓库。

    // 仓库地址
    allprojects {
        repositories {
            maven { url 'https://maven.aliyun.com/nexus/content/repositories/releases' }
        }
    }

    2.添加SDK依赖。

    def LATEST_VERSION = '1.6.0.20220218004'
    dependencies {
        api "com.aliyun.roompaas.biz:biz:${LATEST_VERSION}"
        api "com.aliyun.roompaas.biz:chat:${LATEST_VERSION}"
        api "com.aliyun.roompaas.biz:live:${LATEST_VERSION}"
    }
  • 基于文件添加依赖(不推荐)

    1.下载并解压SDK。登录低代码音视频工厂控制台>应用管理>标准集成,下载最新Android端SDK。

    2.复制aar文件到主工程下的libs文件夹中。

    3.配置aar依赖。在build.gradle文件下的dependencies字段下添加依赖配置:

    implementation fileTree(dir: "libs", include: ["*.jar", ""*.aar""])

    4.同步当前工程。sync

第二步:添加权限配置

添加完SDK依赖后,打开 AndroidManifest.xml 文件,添加如下权限配置。

<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.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

第三步:添加proguard配置(可选,取决于线上应用是否开启混淆)

SDK中使用了反射,如果您的应用中打开了混淆开关,则需要添加proguard配置。请打开 proguard-rules.pro 文件,添加如下-keep类的配置。

-dontnote *.**
-dontwarn *.**

# live sdk
-keep class com.aliyun.** { *; }
-keep class com.alivc.** { *;}
-keep class com.cicada.** { *; }

# lwp
-keep class com.alibaba.dingpaas.** { *; }
-keep class com.dingtalk.mars.** { *; }
-keep class com.dingtalk.bifrost.** { *; }
-keep class com.dingtalk.mobile.** { *; }
-keep class org.android.spdy.** { *; }

# fastjson
-dontwarn com.alibaba.fastjson.**
-keepattributes Signature
-keepattributes *Annotation*

第四步:工程编码

  1. 完成SDK初始化。

    GetTokenApi.getToken是调用业务服务端的请求。业务服务端结合AccessKey ID和AccessKey Secret通过pop接口调用getLoginToken获取。

    RoomEngine.getInstance().init(this,
            new EngineConfig.Builder()
                    .appId("应用Id【在阿里云本产品控制台应用管理中获取】") 
                    .appKey("应用Key【在阿里云本产品控制台应用管理中获取】") 
                    .deviceId("设备Id【保持跟getToken时的入参一致,推荐CommonUtil#getDeviceId】")
                    .tokenInfoGetter(new TokenInfoGetter() {
                        @Override
                        public void getTokenInfo(String userId, Callback<TokenInfo> callback) {
                            // 这里通过自己的服务端来获取Token信息
                            GetTokenApi.getToken(userId, callback);
                        }
                    })
                    .build(),
            new Callbacks.Log<>(TAG, "init engine")
    );
  2. 建连认证

    RoomEngine.getInstance().auth(userId, new Callback<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            // 认证成功
        }
        @Override
        public void onError(String errorMsg) {
            // 认证失败
        }
    });
  3. 房间相关API调用

    通过RoomEngine来获取到RoomChannel实例,进而对房间进行相关操作。

    通过RoomChannel.getPluginService来获取插件服务,进而调用插件服务相关方法。

    // 获取RoomChannel
    Result<RoomChannel> result = RoomEngine.getInstance().getRoomChannel(roomId);
    if (!result.success) {
        // 注意检查返回结果(登录未成功时,会走到这里)
        showToast(result.errorMsg);
        return;
    }
    
    roomChannel = result.value;
    // 获取插件服务
    chatService = roomChannel.getPluginService(ChatService.class);
    liveService = roomChannel.getPluginService(LiveService.class);
    // 监听事件
    roomChannel.setEventHandler(this::onRoomEvent);
    chatService.setEventHandler(this::onChatEvent);
    liveService.setEventHandler(this::onLiveEvent);
    // 进房间
    roomChannel.enterRoom(nick, new Callback<Void>() {
        @Override
        public void onSuccess(Void data) {
            RoomDetail roomDetail = roomChannel.getRoomDetail();
            onEnterRoomSuccess(roomDetail);
        }
        @Override
        public void onError(String errorMsg) {
            onEnterRoomError(errorMsg);
        }
    });
  4. SDK登出。需要断开长连接通道时,调用RoomEngine.logout进行注销登录。

  5. 更多接口请查看Android接口列表

常见问题

已经集成了阿里播放器,集成场景化SDK时冲突了,如何解决?

SDK内部集成了阿里播放器,对于已经集成过阿里播放器的情况,使用exclude来做排除。以Aliyunplayer5.1.5-full版本为例,在build.gradle文件。

dependencies {
    api("com.aliyun.roompaas.biz:liveroom:${VERSION}"){
        exclude (group: 'com.aliyun.sdk.android', module: 'AliyunPlayer')            
        exclude (group: 'com.aliyun.sdk.android', module: 'AlivcArtc')            
        exclude (group: 'com.aliyun.sdk.android', module: 'AlivcArtp')            
        exclude (group: 'com.alivc.conan', module: 'AlivcConan')        
    }
}

android {
    packagingOptions {        
        pickFirst 'lib/armeabi-v7a/liblive-openh264.so'
        pickFirst 'lib/arm64-v8a/liblive-openh264.so'
        pickFirst 'lib/armeabi-v7a/libalivcffmpeg.so'                
        pickFirst 'lib/arm64-v8a/libalivcffmpeg.so'   
    }
}

  • 本页导读 (1)
文档反馈