产品百科 |Ali RTC Android 基本功能介绍

简介: 阿里云 RTC 的基本功能包含初始化 SDK、加入频道、本地发布和订阅远端、离开频道等。当您成功初始化 SDK,您可以进行本地预览视频功能,进行简单的预览和测试。当您操作本地发布和订阅远端时,可以设置手动或者自动模式。

前提条件

在实现基本功能前,请您确保下载最新 SDK,请参见 SDK 下载

获得加入频道必须的频道鉴权令牌(Token):

  • 您可以在控制台生成临时 Token 校验加入频道是否成功,详情请参见控制台生成 Token
  • 在安全要求更高的场景下,建议您在服务端生成 Token,详情请参见服务端生成 Token

说明 本文中的实现方法为主要功能方法,仅供参考,您可以根据业务需求进行实际开发。

操作步骤

  1. 初始化 SDK。您需要创建 AliRtcEngine 实例,并注册回调。相关回调有 AliRtcEngineEventListener 和 AliRtcEngineNotify,具体回调接口请参见回调及监听
mEngine = AliRtcEngine.getInstance(getApplicationContext());
mEngine.setRtcEngineEventListener(mEventListener);
mEngine.setRtcEngineNotify(mEngineNotify);
  1. 说明该接口只能在主线程调用,暂不支持多实例。mEventListener:操作回调监听(回调接口都在子线程)。
private AliRtcEngineEventListener mEventListener = new AliRtcEngineEventListener() {
};
  1. mEngineNotify:SDK 事件通知(回调接口都在子线程)。
private AliRtcEngineNotify mEngineNotify = new AliRtcEngineNotify() {    
};
  1. 本地预览。在创建完 AliRtcEngine 实例后,您可以创建 canvas 布局进行本地预览视频。
//创建canvas,canvas为SophonSurfaceView或者它的子类。
AliRtcEngine.AliVideoCanvas canvas = new AliRtcEngine.AliVideoCanvas();
//SDK内部提供进行播放的视图。
SophonSurfaceView surfaceView = new SophonSurfaceView(this);
surfaceView.setZOrderOnTop(true);
surfaceView.setZOrderMediaOverlay(true);
mSurfaceContainer.addView(surfaceView,new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));
/* 预览窗口的视图 */
canvas.view = surfaceView; 
canvas.renderMode = AliRtcRenderModeAuto;
mEngine.setLocalViewConfig(canvas, AliRtcVideoTrackCamera);
mEngine.startPreview();
//mSurfaceContainer为包裹mCanvas的父视图。
mSurfaceContainer.getChildAt(0).setVisibility(View.VISIBLE);
  1. 建议您把 mAliVideoCanvas 之上的所有视图单独放在一个透明的父布局,因为 surfaceview 的 z-order 问题可能会挡住 contronlview 的显示。说明AliRtcRenderMirrorMode 提供三种镜像模式。
  • AliRtcRenderMirrorModeOnlyFront:只有前置摄像头预览镜像,其余不镜像。
  • AliRtcRenderMirrorModeAllEnabled:全部镜像。
  • AliRtcRenderMirrorModeAllDisable:全部不镜像。
  1. AliRtcRenderMode 渲染模式有四种模式。
  • AliRtcRenderModeAuto(推荐):自动。
  • AliRtcRenderModeStretch:拉伸填充视图,不保持视频比例。
  • AliRtcRenderModeFill:在保持视频宽高比的同时缩放,填充黑边。
  • AliRtcRenderModeClip:在保持视频宽高比的同时缩放,并裁剪以适合视图。
  1. 设置自动或者手动模式。说明阿里云 RTC Android 端默认实现自动发布和订阅,您也可以通过代码手动发布和订阅
  • 自动发布模式: 如果您打开自动发布模式,加入频道之后,SDK 将自动开始发布音视频流;如果关闭自动发布模式,则需要您调用 publish 接口之后才会发布音视频流。
  • 自动订阅模式: 如果您打开自动订阅模式,加入频道之后,SDK 将会自动订阅当前频道内其他人的音视频流;如果关闭自动订阅模式,则需要您调用 subscribe 接口之后才会订阅其他人的音视频流。
/**
*设置自动发布和订阅,只能在加入频道之前设置。
*@param autoPub:是否自动发布。取值:true|false。
*@param autoSub:是否自动订阅。取值:true|false。
*/
mEngine.setAutoPublish(true, true);
  1. 加入频道。
AliRtcAuthInfo userInfo = new AliRtcAuthInfo();
userInfo.setConferenceId(/* 频道ID */);
userInfo.setAppid(/* 应用ID */);
userInfo.setNonce(/* 随机码 */);
userInfo.setTimestamp(/* 时间戳*/);
userInfo.setUserId(/* 用户ID */);
userInfo.setGslb(/* GSLB地址*/);
userInfo.setToken(/*鉴权令牌Token*/);
if(mEngine != null) {    
mEngine.joinChannel(userInfo, /* 用户显示名称 */);
}
参数 描述
AppID 应用 ID,在控制台应用管理页面创建和查看。
ChannelId 频道 ID。1~64 位,支持大小写字母、数字、下划线(_)、中划线(-)。
UserId 用户 ID。1~64 位,支持大小写字母、数字、下划线(_)、中划线(-)。

说明 同一个用户 ID 在其他端登录,先入会的端会被后入会的端踢出频道。

Nonce 随机码。需要加上前缀 AK-,由字母 [a-zA-Z] 和数字 [0-9] 组成,不包含特殊字符,最大 64 字节。例如:AK-2b9be4b25c2d38c409c376ffd2372be1。
TimeStamp 频道过期时间戳。代表令牌有效时间为当前时间 + 所选择小时数。
Token 频道鉴权令牌,计算方法:token = sha256(appId + appKey + channelId + userId + nonce + timestamp)
GSLB 服务地址,该参数是数组类型,当前请使用:["https://rgslb.rtc.aliyuncs.com"],请您通过业务服务器下发到客户端 SDK,不建议您将该地址固化在客户端代码。
  1. 发布或取消发布本地流。发布本地流。
  • 自动发布模式下:加入频道成功后,即可发布本地流,无需再次调用 publish 接口。
  • 手动发布模式下:加入频道成功后,可通过以下接口发布本地流。
  1. 如果发布过程中需要变更配置或者停止发布,需要按如下流程先重新设置配置参数,然后再调用 publish 接口。
//发布本地流设置。
//true表示允许发布音频流,false表示不允许。
mEngine.configLocalAudioPublish(true);
//true表示允许发布相机流,false表示不允许。
mEngine.configLocalCameraPublish(true);
//true表示允许发布屏幕流,false表示不允许。
mEngine.configLocalScreenPublish(true);
//true表示允许发布次要视频流,false表示不允许。
mEngine.configLocalSimulcast(true, AliRtcEngine.AliRtcVideoTrack.AliRtcVideoTrackCamera);
mEngine.publish();
  1. 取消发布本地流。
mEngine.configLocalAudioPublish(false);
mEngine.configLocalCameraPublish(false);
mEngine.configLocalScreenPublish(false);
mEngine.configLocalSimulcast(false, AliRtcEngine.AliRtcVideoTrack.AliRtcVideoTrackCamera);
mEngine.publish();
  1. 发布和取消发布本地流回调代码如下所示。
private AliRtcEngineEventListener mEventListener = new AliRtcEngineEventListener() {
@Override
public void onPublishResult(int result, String publishId) {
//发布本地流回调。
}
@Override
public void onUnpublishResult(int result) {
//取消发布本地流回调。
}
}
  1. 订阅或取消订阅远程流。订阅远程流。
  • 自动订阅模式下:加入频道成功后,即可订阅远端流,无需再次调用 subscribe 接口。
  • 手动订阅模式下:加入频道成功后,可通过以下接口订阅远端流。
  1. 如果订阅过程中需要变更配置或者停止订阅,需要按如下流程先重新设置配置参数,然后再调用 subscribe 接口。
// 订阅远端音频流。
mEngine.configRemoteAudio(/* remoteUserID */, true);
// 订阅远端屏幕流。
mEngine.configRemoteScreenTrack(/* remoteUserID */, true);
// 订阅远端相机流。
mEngine.configRemoteCameraTrack(/* remoteUserID */, true, true);
// 订阅远端用户ID。
mEngine.subscribe(/* remoteUserID */);
  1. 取消订阅远程流。
mEngine.configRemoteAudio(/* remoteUserID */, false);
mEngine.configRemoteScreenTrack(/* remoteUserID */, false);
mEngine.configRemoteCameraTrack(/* remoteUserID */, true, false);
mEngine.subscribe(/* remoteUserID */);
  1. 远程流回调代码如下所示。
private AliRtcEngineNotify mEngineNotify = new AliRtcEngineNotify() {
@Override
public void onRemoteUserUnPublish(AliRtcEngine rtcEngine, String userId) {
//远端用户停止发布通知,处于OB(observer)状态。
}
@Override
public void onRemoteUserOnLineNotify(String uid) {
//远端用户上线通知。
}
@Override
public void onRemoteUserOffLineNotify(String uid) {
//远端用户下线通知。
}
@Override
public void onRemoteTrackAvailableNotify(String uid,AliRtcEngine.AliRtcAudioTrackaudioTrack,AliRtcEngine.AliRtcVideoTrack videoTrack) {
//远端用户发布音视频流变化通知。
}
public void onSubscribeResult(String uid,int result,AliRtcVideoTrack videoTrack,AliRtcAudioTrack audioTrack) {
//订阅流回调,可以做UI及数据的更新。
}
}
  1. 离开频道。
  • 对于版本号大于 1.7 的 SDK,请调用如下接口。
mEngine.leaveChannel();
  • 对于版本号小于等于 1.7 的 SDK,请增加 timeout 参数,一般设置为 1000,表示该接口的调用超时时间为 1 秒,建议您在 Activity 的 onDestroy 接口中调用。
    说明 调用 leaveChannel 接口后请不要再操作 AliRtcEngine 实例。
mEngine.leaveChannel(1000);
  1. 您可以下载示例代码,快速跑通 Demo,实现频道内和其他人进行实时音视频通话,详情请参见 Android Demo
    接口方法请参见 AliRtcEngine 接口
相关文章
|
7月前
|
XML 缓存 Android开发
Android开发,使用kotlin学习多媒体功能(详细)
Android开发,使用kotlin学习多媒体功能(详细)
162 0
|
7月前
|
安全 Linux Android开发
Android 安全功能
Android 安全功能
83 0
|
2月前
|
Android开发
Android开发表情emoji功能开发
本文介绍了一种在Android应用中实现emoji表情功能的方法,通过将图片与表情字符对应,实现在`TextView`中的正常显示。示例代码展示了如何使用自定义适配器加载emoji表情,并在编辑框中输入或删除表情。项目包含完整的源码结构,可作为开发参考。视频演示和源码详情见文章内链接。
72 4
Android开发表情emoji功能开发
|
2月前
|
安全 Android开发 iOS开发
Android vs iOS:探索移动操作系统的设计与功能差异###
【10月更文挑战第20天】 本文深入分析了Android和iOS两个主流移动操作系统在设计哲学、用户体验、技术架构等方面的显著差异。通过对比,揭示了这两种系统各自的独特优势与局限性,并探讨了它们如何塑造了我们的数字生活方式。无论你是开发者还是普通用户,理解这些差异都有助于更好地选择和使用你的移动设备。 ###
54 3
|
4月前
|
编解码 测试技术 Android开发
Android经典实战之用 CameraX 库实现高质量的照片和视频拍摄功能
本文详细介绍了如何利用CameraX库实现高质量的照片及视频拍摄功能,包括添加依赖、初始化、权限请求、配置预览与捕获等关键步骤。此外,还特别针对不同分辨率和帧率的视频拍摄提供了性能优化策略,确保应用既高效又稳定。
406 1
Android经典实战之用 CameraX 库实现高质量的照片和视频拍摄功能
|
3月前
|
Android开发 开发者
Android平台无纸化同屏如何实现实时录像功能
Android平台无纸化同屏,如果需要本地录像的话,实现难度不大,只要复用之前开发的录像模块的就可以,对我们来说,同屏采集这块,只是数据源不同而已,如果是自采集的其他数据,我们一样可以编码录像。
|
4月前
|
图形学 Android开发
小功能⭐️Unity调用Android常用事件
小功能⭐️Unity调用Android常用事件
|
6月前
|
数据库 Android开发 数据安全/隐私保护
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
267 2
|
6月前
|
Android开发
Android中如何快速的实现RecycleView的拖动重排序功能
使用`ItemTouchHelper`和自定义`Callback`,在`RecyclerView`中实现拖动排序功能。定义`ItemTouchHelperAdapter`接口,`Adapter`实现它以处理`onItemMove`方法。`SimpleItemTouchHelperCallback`设置拖动标志,如`LEFT`或`RIGHT`(水平拖动),并绑定到`RecyclerView`以启用拖动。完成这些步骤后,即可实现拖放排序。关注公众号“AntDream”获取更多内容。
125 3
|
7月前
|
移动开发 监控 Android开发
构建高效Android应用:从内存优化到电池寿命代码之美:从功能实现到艺术创作
【5月更文挑战第28天】 在移动开发领域,特别是针对Android系统,性能优化始终是关键议题之一。本文深入探讨了如何通过细致的内存管理和电池使用策略,提升Android应用的运行效率和用户体验。文章不仅涵盖了现代Android设备上常见的内存泄漏问题,还提出了有效的解决方案,包括代码级优化和使用工具进行诊断。同时,文中也详细阐述了如何通过减少不必要的后台服务、合理管理设备唤醒锁以及优化网络调用等手段延长应用的电池续航时间。这些方法和技术旨在帮助开发者构建更加健壮、高效的Android应用程序。