本文介绍了使用低代码集成(含UI)方式快速接入互动直播Android端的方法。
前提条件
环境要求
系统版本:支持Android 5.0及以上版本。
API版本:支持21及以上版本。
CPU架构:支持实体设备架构armeabi-v7a、arm64-v8a。
其他:不支持视频采集旋转,不支持USB外接摄像头。
集成步骤
强烈推荐直接克隆Demo源码,更改配置参数即可运行。
流程概览
添加SDK依赖 > 添加配置权限 > 添加proguard配置(可选) > 完成工程编码。
第一步:添加SDK依赖
SDK依赖可通过远程依赖或文件依赖方式添加。推荐使用远程依赖方式。
方式1:远程添加依赖(推荐)
1.配置依赖仓库。
// 仓库地址 allprojects { repositories { maven { url 'https://maven.aliyun.com/nexus/content/repositories/releases' } } }
2.添加SDK依赖。
def LATEST_VERSION = '' // Android_SDK_LATEST_VERSION
dependencies { api "com.aliyun.roompaas.biz:liveroom:${LATEST_VERSION}" }
方式2:添加文件依赖
1.下载并解压SDK。登录低代码音视频工厂控制台>应用管理>低代码集成,下载最新Android端SDK。
2.复制aar文件到主工程下的libs文件夹中。
3.配置aar依赖。在
build.gradle
文件下的dependencies字段下添加代码:implementation fileTree(dir: "libs", include: ["*.jar", ""*.aar""])
第二步:添加权限配置
添加完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初始化及认证。代码示例如下:
// SDK初始化&认证
LivePrototype.InitParam param = new LivePrototype.InitParam();
param.appId = "<应用Id>"; //在阿里云本产品控制台应用管理中获取
param.appKey = "<应用Key>"; //在阿里云本产品控制台应用管理中获取
param.serverHost = "<服务端地址>"; //请参见服务调用地址使用说明文档,在服务部署完成之后获取“服务调用地址”
param.serverSecret = "<服务端接口密钥>"; //请参见服务调用地址使用说明文档,在服务部署完成之后获取“密钥”
param.userId = "<用户身份标识>";//自定义用户id,仅支持英文和数字,最大长度36位
LivePrototype.getInstance().init(this, param);
2. 主播端开启直播。代码示例如下:
// 主播端: 开启直播
String currentUserId = Const.getCurrentUserId();
LivePrototype.OpenLiveParam param = new LivePrototype.OpenLiveParam();
param.role = LivePrototype.Role.ANCHOR;
param.nick = "用户" + currentUserId;
LivePrototype.getInstance().setup(this, param, new Callback<String>() {
@Override
public void onSuccess(String liveId) {
// 此处获取到liveId
}
@Override
public void onError(String errorMsg) {
}
});
3. 观众端观看直播。代码示例如下:
// 观众端: 观看直播
String liveId = "71973fb0-****-****-****-ebb20bd9d650";//此处替换为主播开播后的获取到的liveId
String currentUserId = Const.getCurrentUserId();
LivePrototype.OpenLiveParam param = new LivePrototype.OpenLiveParam();
param.role = LivePrototype.Role.AUDIENCE;
param.nick = "用户" + currentUserId;
param.liveId = liveId;
LivePrototype.getInstance().setup(this, param, new Callback<String>() {
@Override
public void onSuccess(String liveId) {
}
@Override
public void onError(String errorMsg) {
}
});
4. 完成接入。
如您对直播间没有额外的定制需求,到此您已经完成互动直播Android端的接入,可以直接运行体验。效果如下图。
如您需要对直播间进行扩展开发,请参见Android端扩展开发。
常见问题
如何调用SDK中的插件服务?
继承 BaseComponent
之后,可以拿到直播服务 LiveService
、互动服务 ChatService
,然后对其做相关操作,以下罗列了常用的方法调用。
// -------------------- 直播间相关操作 ------------------------
// 判断当前是否是主播身份
boolean owner = roomChannel.isOwner();
// 更新直播公告
roomChannel.updateNotice("新公告", null);
// 直播间踢人
roomChannel.kickUser("<被踢人用户Id>", null);
// -------------------- 直播插件相关操作 ------------------------
// 切换前后摄像头
liveService.getPusherService().switchCamera();
// 开启/关闭美颜
liveService.getPusherService().setBeautyOn(true);
// -------------------- 互动插件相关操作 ------------------------
// 用户禁言 (60为禁言时长, 单位:秒)
chatService.banComment("<被禁言用户Id>", 60, null);
// 发送弹幕
chatService.sendComment("<弹幕信息>", null);
// 发送自定义消息
chatService.sendCustomMessageToAll("<自定义消息>", null);
如何监听SDK中的事件?
在 onInit
中设置事件监听,参考如下代码说明。
@Override
public void onInit(LiveContext liveContext) {
super.onInit(liveContext);
// 直播间事件监听
roomChannel.addEventHandler(new SampleRoomEventHandler() {
@Override
public void onEnterOrLeaveRoom(RoomInOutEvent event) {
// 用户进出直播间监听
}
@Override
public void onRoomNoticeChanged(String notice) {
// 群公告发生改变
}
});
// 直播插件事件监听
liveService.addEventHandler(new SampleLiveEventHandler() {
@Override
public void onLiveStarted(LiveCommonEvent event) {
// 直播开始
}
@Override
public void onLiveStopped(LiveCommonEvent event) {
// 直播结束
}
@Override
public void onPusherEvent(LiveEvent event) {
// 主播端才能收到的事件
switch (event) {
case PUSH_STARTED:
// 推流开始
break;
case PUSH_STOPPED:
// 推流结束
break;
}
}
});
// 互动插件事件监听
chatService.addEventHandler(new SampleChatEventHandler() {
@Override
public void onCommentReceived(CommentEvent event) {
// 收到弹幕消息
}
@Override
public void onCustomMessageReceived(CustomMessageEvent event) {
// 收到自定义消息
}
@Override
public void onLikeReceived(LikeEvent event) {
// 收到点赞信息变化
}
@Override
public void onCommentMutedOrCancel(MuteCommentEvent event) {
// 收到禁言事件
}
@Override
public void onCommentAllMutedOrCancel(MuteAllCommentEvent event) {
// 收到全员禁言事件
}
});
}
为什么直播的渲染区域有黑边?如何去除?
渲染区域黑边是为了保证渲染的View区域和实际渲染内容区域不一致时,内容能够完全在屏幕上展示出来,类似于 ImageView
中 ScaleType
的 fitCenter
和 centerCrop
的区别。
如果需要去除该黑边,请在 setup
方法中设置 LivePrototype.OpenLiveParam#liveShowMode
为 CanvasScale.Mode.ASPECT_FILL
即可。
扩展阅读
如您需要进行扩展开发,请参见Android端扩展开发。