资讯专栏INFORMATION COLUMN

5分钟快速集成UCloud实时音视频服务URTC-Andriod端

Tecode / 2033人阅读

摘要:通过集成,可以从零开始,快速搭建出实时音视频通信平台,可以应用于语音和视频社交在线教育和培训远程医疗在线会议直播等多种业务场景。使用服务之前,首先需要注册账号并且完成实名认证。确定后,自动生成。

通过集成URTC SDK,可以从零开始,快速搭建出实时音视频通信平台,可以应用于语音和视频社交、在线教育和培训、远程医疗、在线会议、直播等多种业务场景。

集成URTC SDK之前,需要在UCLOUD官网控制台创建URTC应用。

1. 登录UCLOUD控制台

在UCLOUD官网,【登录控制台】

使用URTC服务之前,首先需要注册账号 并且完成 实名认证

2.创建URTC应用

每个账号最大支持创建5个URTC应用,需要创建更多URTC应用,请联系客户经理增加配额。

可以通过2种方法:控制台、API创建URTC应用。

2.1 控制台创建URTC应用

  • 在控制台,【全部产品】-【视频服务】-【实时音视频】,找到【我的应用】

  • 点击创建应用,输入应用名称,确定后保存。

  • 确定后,自动生成AppID、AppKey。

  • 绑定AppID及AppKey到您的应用中即可开始使用。

2.2 API创建URTC应用

通过 创建URTC 应用的API,也可以创建URTC应用。具体调用API的方法,请查看API文档

3. 下载资源

4. 开发语言以及系统要求

  • 开发语言:Java
  • 系统要求:Android 4.1及以上版本的移动设备
  • Android SDK API:等级 16 或以上
  • ABI支持:armeabi-v7a、arm64-v8a

5. 开发环境

  • android studio 需要android SDK

6. 搭建开发环境

  • 下载urtc android SDK包,SDK包为aar格式,名称为ucloudrtclib开头加版本号加一串8位识别码,可以参考github上的接入demo。
  • 将aar 文件拷贝到自己的lib 目录下,然后添加到lib 中,修改要使用sdk模块目录下build.gradle,确保已经添加了如下依赖,如下所示:
    dependencies {
    implementation (name: ucloudrtclib_1.0.1_b52bc04c, ext: aar)
  • 如果项目混淆,请在混淆中添加一下urtc 混淆规则。
-keep class com.ucloudrtclib.sdkengine.**{*;}
-keep class com.ucloudrtclib.sdkengine.define.*{*;}
-keep enum com.ucloudrtclib.sdkengine.define.*{*;}

-keepclassmembers class com.ucloudrtclib.sdkengine.UCloudRtcSdkEnv {
    public static ;
}

-keepclassmembers interface com.ucloudrtclib.sdkengine.UCloudRtcSdkEngine {
    public ;
    public static ;
}
-keep class org.webrtc.** {
    *;
}

  • 目录结构

  • 添加权限

在 Android 6.0 (API 23)开始,用户需要在应用运行时授予权限,而不是在应用安装时授予,并分为正常权限和危险权限两种类型。
在实时音视频SDK 中,用户需要在进入音视频通话房间前动态申请 CAMERARECORD\_AUDIOWRITE\_EXTERNAL\_STORAGE权限,具体可以参考Android官方文档















7. 初始化

7.1 引擎环境初始化

主要配置android context sdkmode以及AppID ,测试用的SEC\_KEY,日志等级。

public class UCloudRtcApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "onCreate: " + this);
        if (TextUtils.equals(getCurrentProcessName(this), getPackageName())) {
            init();//判断成功后才执行初始化代码
        }
    }

    private void init(){
        sContext = this;
        //初始化sdk环境
        UCloudRtcSdkEnv.initEnv(getApplicationContext());
        //打印日志到logcat
        UCloudRtcSdkEnv.setWriteToLogCat(true);
        //开启log上报
        UCloudRtcSdkEnv.setLogReport(true);
        //设置log级别
        UCloudRtcSdkEnv.setLogLevel(UCloudRtcSdkLogLevel.UCLOUD_RTC_SDK_LogLevelInfo);
        //设置sdk模式(测试模式)
        UCloudRtcSdkEnv.setSdkMode(UCloudRtcSdkMode.UCLOUD_RTC_SDK_MODE_TRIVAL);
        //重连次数
        UCloudRtcSdkEnv.setReConnectTimes(60);
        //设置测试模式的用户私有秘钥
        UCloudRtcSdkEnv.setTokenSeckey(CommonUtils.SEC_KEY);

        WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics outMetrics = new DisplayMetrics();
        windowManager.getDefaultDisplay().getMetrics(outMetrics);
        CommonUtils.mItemWidth = (outMetrics.widthPixels - UiHelper.dipToPx(this, 15)) / 3;
        CommonUtils.mItemHeight = CommonUtils.mItemWidth;
        //初始化bugly日志
        CrashReport.initCrashReport(getApplicationContext(), "9a51ae062a", true);
    }
}

7.2 继承实现UCloudRtcSdkEventListener 实现事件处理

UCloudRtcSdkEventListener eventListener = new UCloudRtcSdkEventListener() {
        @Override
        public void onServerDisconnect() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    ToastUtils.shortShow(RoomActivity.this, " 服务器已断开");
                    stopTimeShow();
                    onMediaServerDisconnect() ;
                }
            });
        }
    
        @Override
        public void onJoinRoomResult(int code, String msg, String roomid) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    if (code == 0) {
                        ToastUtils.shortShow(RoomActivity.this, " 加入房间成功");
                        startTimeShow();
                    }else {
                        ToastUtils.shortShow(RoomActivity.this, " 加入房间失败 "+
                                code +" errmsg "+ msg);
                        Intent intent = new Intent(RoomActivity.this, ConnectActivity.class);
                        onMediaServerDisconnect() ;
                        startActivity(intent) ;
                        finish();
                    }
    
                }
            });
        }

7.3 获取SDK 引擎 并进行基础配置

sdkEngine.setAudioOnlyMode(true) ; 
// 设置纯音频模式
sdkEngine.configLocalCameraPublish(false) ; 
// 设置摄像头是否发布
sdkEngine.configLocalAudioPublish(true) ; 
// 设置音频是否发布,用于让sdk判断自动发布的媒体类型
sdkEngine.configLocalScreenPublish(false) ; 
// 设置桌面是否发布,作用同上
sdkEngine.setClassType(UCloudRtcSdkRoomType.UCLOUD_RTC_SDK_ROOM_SMALL) ; 
// 设置房间类型,有两种 实时会议(小班课) 和互动直播(大班课)类型可选 ,默认为实时会议(小班课)
sdkEngine.setStreamRole(URTCSdkStreamRole.URTC_SDK_STREAM_ROLE_BOTH);
// 如果是互动直播(大班课)模式,需要设置用户权限:仅上行发布、仅下行订阅、双向发布订阅权限;实时会议(小班课)会忽略这个配置
sdkEngine.setAutoPublish(true) ; 
// 是否自动发布
sdkEngine.setAutoSubscribe(true) ;
// 是否自动订阅
sdkEngine.setVideoProfile(UCloudRtcSdkVideoProfile.matchValue(mVideoProfile)) ;
// 摄像头输出等级

8. 实现音视频通话

8.1 加入房间

UCloudRtcSdkAuthInfo info = new UCloudRtcSdkAuthInfo();
        info.setAppId(mAppid);
        info.setToken(mRoomToken);
        info.setRoomId(mRoomid);
        info.setUId(mUserid);
        Log.d(TAG, " roomtoken = " + mRoomToken);
        sdkEngine.joinChannel(info); 

8.2 发布媒体流

  • 如果配置了自动发布无需调用发布视频接口,SDK会在用户成功加入房间后自动发布,只需要监听事件调用渲染接口即可。
sdkEngine.setAutoPublish(mPublishMode == CommonUtils.AUTO_MODE ? true : false);
  • 如果配置了手动发布需要调用sdkEngine引擎的publish接口 配置手动/自动发布。
sdkEngine.publish(UCloudRtcSdkMediaType mtype, boolean hasvideo, boolean hasaudio)
//回调事件
public void onLocalPublish(int code, String msg, UCloudRtcSdkStreamInfo info
  • 媒体发布类型

现在的类型包括两大类,需要传入publish接口的mtype,hasvideo,hasaudio参数各不相同,混合类型是单一类型的组合,具体代码可参阅urtcdemo的RoomActvity中的处理。

  • 混合类型:音频+屏幕捕捉、视频+屏幕捕捉
  • 单一类型
    1) 音频(mtype:urtc_sdk_media_type_video,hasvideo:false,hasaudio:true)
    2) 视频(mtype:urtc_sdk_media_type_video,hasvideo:true,hasaudio:true)
    3) 屏幕捕捉(mtype:urtc_sdk_media_type_screen,hasvideo:true,hasaudio:false)
  • 渲染本地媒体流

onLocalPublish 回调成功后,在函数中可以调用视频渲染。

localrenderview.setBackgroundColor(Color.TRANSPARENT);
sdkEngine.startPreview(info.getmMediatype(), localrenderview);
//不想渲染时可以调用停止渲染接口
sdkEngine.stopPreview(UCloudRtcSdkMediaType mediatype
  • 取消发布媒体流
sdkEngine.unPublish(UCloudRtcSdkMediaType mtype)
//回调事件
public void onLocalUnPublish(int code, String msg, UCloudRtcSdkStreamInfo info

8.3 订阅媒体流

如果配置了自动订阅无需调用订阅视频接口,SDK会在用户成功加入房间后查看房间已有的可以订阅的流并进行逐一订阅,当有新用户加入房间时也会自动订阅他推的流。
如果配置了手动订阅需要调用sdkEngine引擎的subscribe接口。

sdkEngine.setAutoSubscribe(mScribeMode == CommonUtils.AUTO_MODE ? true : false);
  • 订阅媒体流
sdkEngine.subscribe(UCloudRtcSdkStreamInfo info)
//回调事件
public void onSubscribeResult(int code, String msg, UCloudRtcSdkStreamInfo info
  • 渲染订阅的媒体流

在onSubscribeResult回调成功后,再函数中可以调用视频渲染。

sdkEngine. startRemoteView(UCloudRtcSdkStreamInfo info, UCloudRtcSdkSurfaceVideoView renderview)
//不想渲染时可以调用定制渲染接口
sdkEngine.stopPreview(UCloudRtcSdkMediaType mediatype
  • 取消订阅媒体流
sdkEngine. subscribe(UCloudRtcSdkStreamInfo info) 
//回调事件
public void onUnSubscribeResult(int code, String msg, UCloudRtcSdkStreamInfo info)

8.4 用户发布和订阅的权限控制

权限分为发布,订阅,全部权限,全部权限包括了发布和订阅。

//接口
public int setStreamRole(UCloudRtcSdkStreamRole role)
//调用
sdkEngine.setStreamRole(mRole);

8.5 离开房间

sdkEngine.leaveChannel() ;

8.6 编译、运行,开始体验吧!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/125831.html

相关文章

  • 5分钟快速集成UCloud实时视频服务URTC-Windows

    摘要:通过集成,可以从零开始,快速搭建出实时音视频通信平台,可以应用于语音和视频社交在线教育和培训远程医疗在线会议直播等多种业务场景。使用服务之前,首先需要注册账号并且完成实名认证。确定后,自动生成。通过集成URTC SDK,可以从零开始,快速搭建出实时音视频通信平台,可以应用于语音和视频社交、在线教育和培训、远程医疗、在线会议、直播等多种业务场景。 集成URTC SDK之前,需要在UCLOUD官...

    Tecode 评论0 收藏0
  • 5分钟快速集成UCloud实时视频服务URTC-Linux Ubuntu

    摘要:通过集成,可以从零开始,快速搭建出实时音视频通信平台,可以应用于语音和视频社交在线教育和培训远程医疗在线会议直播等多种业务场景。使用服务之前,首先需要注册账号并且完成实名认证。确定后,自动生成。推流成功后,即可直播观看视频。通过集成URTC SDK,可以从零开始,快速搭建出实时音视频通信平台,可以应用于语音和视频社交、在线教育和培训、远程医疗、在线会议、直播等多种业务场景。 集成URTC S...

    Tecode 评论0 收藏0
  • 5分钟快速集成UCloud实时视频服务URTC-MacOS

    摘要:通过集成,可以从零开始,快速搭建出实时音视频通信平台,可以应用于语音和视频社交在线教育和培训远程医疗在线会议直播等多种业务场景。使用服务之前,首先需要注册账号并且完成实名认证。确定后,自动生成。初始化建议在初始化的同时,初始化。通过集成URTC SDK,可以从零开始,快速搭建出实时音视频通信平台,可以应用于语音和视频社交、在线教育和培训、远程医疗、在线会议、直播等多种业务场景。 集成URTC...

    Tecode 评论0 收藏0
  • 5分钟快速集成UCloud实时视频服务URTC-Electron

    摘要:通过集成,可以从零开始,快速搭建出实时音视频通信平台,可以应用于语音和视频社交在线教育和培训远程医疗在线会议直播等多种业务场景。集成之前,需要在官网控制台创建应用。使用服务之前,首先需要注册账号并且完成实名认证。确定后,自动生成。通过集成URTC SDK,可以从零开始,快速搭建出实时音视频通信平台,可以应用于语音和视频社交、在线教育和培训、远程医疗、在线会议、直播等多种业务场景。 集成URT...

    Tecode 评论0 收藏0
  • 5分钟快速集成UCloud实时视频服务URTC-iOS

    摘要:通过集成,可以从零开始,快速搭建出实时音视频通信平台,可以应用于语音和视频社交在线教育和培训远程医疗在线会议直播等多种业务场景。使用服务之前,首先需要注册账号并且完成实名认证。确定后,自动生成。通过集成,可以快速实现实时音视频通话。通过集成URTC SDK,可以从零开始,快速搭建出实时音视频通信平台,可以应用于语音和视频社交、在线教育和培训、远程医疗、在线会议、直播等多种业务场景。 集成UR...

    Tecode 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<