Android多人视频聊天应用的开发(二)一对一聊天
在上一篇《Android多人视频聊天应用的开发(一)快速集成》中我们讨论了如何配置Agora Android SDK,本文我们将探索使用Agora进行一对一视频聊天的奥秘。
鉴权
APP ID鉴权
所谓APP ID,就是在 Agora创建每个项目都有的一个唯一标识。App ID 可以明确你的项目及组织身份,并在 joinChannel 方法中作为参数,连接到 Agora 实时网络中,实现实时通信或直播功能。不同的App ID在Agora实时网络中的通话是完全隔离的;Agora 提供的频道信息、计费、管理服务也都是基于 App ID。
申请APP ID的操作很简便,只要在Agora官网https://dashboard.agora.io/projects右侧栏目的“项目”中点击“添加新项目”,只需输入项目名就可生成APP ID,全过程如下图所示:
找到,把“<#YOUR APP ID#>”替换为图中的马赛克里的字符串。
<string name="agora_app_id"><#YOUR APP ID#></string> |
以上就是APP ID鉴权的全过程。
尽管App ID鉴权在最大程度上方便了开发者使用 Agora 的服务。但App ID 鉴权的安全性不佳,一旦有别有用心的人非法获取了你的 App ID,他就可以在 Agora 提供的SDK中使用你的App ID。如果你的项目对安全性要求高,或者增加用户权限设置的话,建议采用Token鉴权。
Token鉴权
在通信和直播场景中存在着多个角色,而每种角色又对应着一些默认权限。比如在直播场景中,主播可以发布流、订阅流、邀请嘉宾;观众可以订阅流、申请连麦;管理员则可以踢人或禁言。
Token鉴权的步骤比APP ID鉴权稍微复杂一些,在上文项目列表中查看 App ID 的地方,启用该项目的 App Certificate:
首先,点击激活项目右上方的 编辑 按钮。
将你的 App Certificate 保存在服务器端,且对任何客户端均不可见。当项目的 App Certificate 被启用后,你必须使用 Token。例如: 在启用 App Certificate 前,你可以使用 App ID 加入频道。但启用了 App Certificate 后,你就必须使用 Token 加入频道。后台如何用App Certificate生成Token本文不做赘述。
初始化Agora
RtcEngine 类包含应用程序调用的主要方法,调用 RtcEngine 的接口最好在同一个线程进行,不建议在不同的线程同时调用。
目前 Agora Native SDK 只支持一个 RtcEngine 实例,每个应用程序仅创建一个 RtcEngine 对象 。 RtcEngine 类的所有接口函数,如无特殊说明,都是异步调用,对接口的调用建议在同一个线程进行。所有返回值为 int 型的 API,如无特殊说明,返回值 0 为调用成功,返回值小于 0 为调用失败。
IRtcEngineEventHandler接口类用于SDK向应用程序发送回调事件通知,应用程序通过继承该接口类的方法获取 SDK 的事件通知。
接口类的所有方法都有缺省(空)实现,应用程序可以根据需要只继承关心的事件。在回调方法中,应用程序不应该做耗时或者调用可能会引起阻塞的 API(如 SendMessage),否则可能影响 SDK 的运行。
private RtcEngine mRtcEngine; /** throw new RuntimeException("Agora初始化失败了,检查一下是哪儿出错了\n" + Log.getStackTraceString(e)); private final IRtcEngineEventHandler mRtcEventHandler = new IRtcEngineEventHandler() { @Override @Override private void onRemoteUserLeft() { //文案可随意定制 private void onRemoteUserVideoMuted(int uid, boolean muted) { SurfaceView surfaceView = (SurfaceView) container.getChildAt(0); Object tag = surfaceView.getTag(); |
打开视频模式
enableVideo()方法用于打开视频模式。可以在加入频道前或者通话中调用,在加入频道前调用,则自动开启视频模式,在通话中调用则由音频模式切换为视频模式。调用 disableVideo() 方法可关闭视频模式。
setVideoProfile()方法设置视频编码属性(Profile)。每个属性对应一套视频参数,如分辨率、帧率、码率等。 当设备的摄像头不支持指定的分辨率时,SDK 会自动选择一个合适的摄像头分辨率,但是编码分辨率仍然用 setVideoProfile() 指定的。
该方法仅设置编码器编出的码流属性,可能跟最终显示的属性不一致,例如编码码流分辨率为 640x480,码流的旋转属性为 90 度,则显示出来的分辨率为竖屏模式。
/** |
设置本地视频显示属性
setupLocalVideo( VideoCanvas local )方法用于设置本地视频显示信息。应用程序通过调用此接口绑定本地视频流的显示视窗(view),并设置视频显示模式。 在应用程序开发中,通常在初始化后调用该方法进行本地视频设置,然后再加入频道。退出频道后,绑定仍然有效,如果需要解除绑定,可以调用 setupLocalVideo(null) 。
/** |
加入一个频道
joinChannel(String token,String channelName,String optionalInfo,int optionalUid )方法让用户加入通话频道,在同一个频道内的用户可以互相通话,多个用户加入同一个频道,可以群聊。 使用不同 App ID 的应用程序是不能互通的。如果已在通话中,用户必须调用 leaveChannel() 退出当前通话,才能进入下一个频道。
/** |
设置远端视频显示属性
setupRemoteVideo( VideoCanvas remote)方法用于绑定远程用户和显示视图,即设定 uid 指定的用户用哪个视图显示。调用该接口时需要指定远程视频的 uid,一般可以在进频道前提前设置好。
如果应用程序不能事先知道对方的 uid,可以在 APP 收到 onUserJoined 事件时设置。如果启用了视频录制功能,视频录制服务会做为一个哑客户端加入频道,因此其他客户端也会收到它的 onUserJoined 事件,APP 不应给它绑定视图(因为它不会发送视频流),如果 APP 不能识别哑客户端,可以在 onFirstRemoteVideoDecoded 事件时再绑定视图。解除某个用户的绑定视图可以把 view 设置为空。退出频道后,SDK 会把远程用户的绑定关系清除掉。
/** if (container.getChildCount() >= 1) { SurfaceView surfaceView = RtcEngine.CreateRendererView(getBaseContext()); surfaceView.setTag(uid); |
离开当前频道
leaveChannel()方法用于离开频道,即挂断或退出通话。
当调用 joinChannel() API 方法后,必须调用 leaveChannel() 结束通话,否则无法开始下一次通话。 不管当前是否在通话中,都可以调用 leaveChannel(),没有副作用。该方法会把会话相关的所有资源释放掉。该方法是异步操作,调用返回时并没有真正退出频道。在真正退出频道后,SDK 会触发 onLeaveChannel 回调。
/** public void onEncCallClicked(View view) { @Override leaveChannel(); |
管理摄像头
switchCamera()方法用于在前置/后置摄像头间切换。除此以外Agora还提供了一下管理摄像头的方法:例如setCameraTorchOn(boolean isOn)设置是否打开闪光灯、setCameraAutoFocusFaceModeEnabled(boolean enabled)设置是否开启人脸对焦功能等等。
/** |
将自己静音
muteLocalAudioStream(boolean muted)方法用于静音/取消静音。该方法可以允许/禁止往网络发送本地音频流。但该方法并没有禁用麦克风,不影响录音状态。
/** mRtcEngine.muteLocalAudioStream(iv.isSelected()); |
暂停本地视频流
muteLocalVideoStream(boolean muted)方法用于暂停发送本地视频流,但该方法并没有禁用摄像头,不影响本地视频流获取。
/** mRtcEngine.muteLocalVideoStream(iv.isSelected()); FrameLayout container = (FrameLayout) findViewById(R.id.local_video_view_container); |
运行效果
拿两部手机安装编译好的App,如果能看见两个自己,说明你成功了
通过本文的学习,我们已经掌握了利用Agora进行一对一聊天的技巧,接下来的文章中,我将继续介绍多人聊天室等知识。
转载于:https://blog.51cto.com/dongfeng9ge/2095626
Android多人视频聊天应用的开发(二)一对一聊天相关推荐
- Android多人视频聊天应用的开发(三)多人聊天
在上一篇<Android多人视频聊天应用的开发(二)一对一聊天>中我们学习了如何使用声网Agora SDK进行一对一的聊天,本篇主要讨论如何使用Agora SDK进行多人聊天.主要需要实现 ...
- [跳舞吧多人视频空间]ADS集成开发环境先容
[跳舞吧多人视频空间]ADS集成开发环境先容 2012年01月11日 [b]跳舞吧[/b][b]视频空间美女主播聊天交友,尽在[/b][b]同城聊天室[/b][b]跳舞吧 [/b] ADS全称为ARM ...
- android 多人视频,Android QQ 5.0 正式版:全新界面、精彩动态、多人视频/音频
Android QQ 5.0 正式版发布,包括新的用户界面.动态内容自定义.多人视频/音频/文件传输等新功能.Android 用户可以点击链接下载体验,iOS 用户还需等待正式上架 App Store ...
- Android聊天软件的开发(二)--数据库
一,服务器数据库 服务器端的数据库是MySQL,使用Hibernate实现数据的增删改查.主要存储的数据有:用户信息,好友列表. 其中,好友列表中的friend_list ...
- Android多人视频聊天应用的开发(一)快速集成
自从2016年,鼓吹"互联网寒冬"的论调甚嚣尘上,2017年亦有愈演愈烈之势.但连麦直播.在线抓娃娃.直播问答.远程狼人杀等类型的项目却异军突起,成了投资人的风口,创业者的蓝海和用 ...
- node + uni-app 开发即时通讯聊天室,实现用户一对一聊天
项目效果 项目代码 chat.vue <template><view class="content"><header-bar :title=title ...
- 基于Qt的类QQ气泡聊天的界面开发(二)
http://blog.csdn.net/esonpo/article/details/25974999 1:使用Qt下面的QListview来实现QQ类似效果,差强人意 2:使用QWebview加载 ...
- android高德显示指定位置,高德地图开发(二)地图上显示指定位置
我们在用地图软件搜索的时候,搜索结果会在地图上以红点显示,现在我们来实现一个在地图上显示指定位置的程序,先看效果图. 要实现这么个功能,首先要能将地图视图中心移动到以指定位置:还有在指定位置绘制一个点 ...
- (Agora声网)多人视频聊天应用的开发(三)多人聊天
转载于:Android多人视频聊天应用的开发(三)多人聊天-玖哥的书房-51CTO博客 http://blog.51cto.com/dongfeng9ge/2104587 本系列文章结合声网官方在Gi ...
最新文章
- ts引入公共方法_vue3+TS+ant2.0 实践指南
- win32 api setwindowlong 第2个参数_第 6 篇:分页接口
- python章节总结_《Python深度学习》第一章总结
- C++尽量以const,enum,inline替换#define
- 深度学习(一)——MP神经元模型, BP算法, 神经元激活函数, Dropout
- 临界区,互斥量,信号量,事件的区别
- 2020运动相机推荐_2020年最好的全景运动相机推荐
- iPhone 12 Pro真机照首曝光:无刘海再添实锤?
- Android学习之路-----倒计时欢迎界面(更有条理)
- CentOS 7 常用命令
- 「leetcode」763. 划分字母区间:【记录最远位置与双指针】详解
- 【博客427】通过redfish协议操控服务器
- Selenium2学习笔记一
- 一文详解Adobe Photoshop 2020安装教程
- stylus 设置全局样式_vue 公共样式处理_全局styl文件
- ckfinder的使用及了解config.xml的配置
- java basefont_itext 文本域 字体样式设置
- Eclipse 版本对应的 JDK版本要求
- 提升STEAM教师能力素养提升路径
- docker重启后启动失败Failed to start Docker Application Container Engine.
热门文章
- 少侠,看你骨骼惊奇,传你几招IT武林绝技,可好?
- js获取keyCode
- 3 分钟生成一个单元测试报告,这个样式爱了
- unity--google支付--billing4.0
- 676_AUTOSAR_TR_Methodology_文档阅读3
- 《概率论与数理统计》-第二章 随机变量及其分布-第一节 离散型随机变量及其分布-笔记
- uni-app使用第三方UI组件库的引入方式(ThorUI)
- 不拘一格-网飞的自由与责任工作法
- 江南怎么用计算机弹,怎样在电脑上玩江南百景图
- 使用Office UI fabric react icons显示图标