我想开发一个实时通讯产品,选第三方SDK的话,声网sdk是否是一个好的选择?

1. 简介在如今的移动互联网时代,音视频相关应用已经深入到我们日常生活的方方面面。而在它背后的音视频技术也是非常成熟了,短视频编辑、带货直播、视频语音通话等应用形式无不体现着音视频技术给我们生活带来的便利。而这次就去实际体验一下,接入声网的音频 SDK ,并打造一个音视频通话应用。2. 账户注册与项目创建首先要做的就是在声网(https://www.agora.io/cn)上注册账号,并完成实名认证。登录之后就进到管理界面了,在左侧有一系列选项可以操作,直接进到项目管理,创建我们的 VideoChat 项目。在项目创建的安全模式上,选择 APPID + Token 的方式。为了提高项目的安全性,Agora 后续会取消对 APP ID 鉴权方案的支持。当项目创建完成后就有了对应的 APP ID ,这个在后续代码开发中会用到的。除此之外,我们还需要生成 Token ,在项目管理页去生成一个临时 Token 。这个临时 Token 是有时效的,仅供测试使用,如果有自己的后端开发,到生产环境再去生成正式 Token。同样,这个 Token 字符串在后续开发中也会用到的。3. SDK 下载与集成创建项目并准备好 APP ID 和 Token 之后,就可以在官网上下载音频 SDK 了。下载解压后的内容如上所示。libs 文件夹内有对应不同 CPU 架构的 so 动态库,还有动态库对应的头文件以及 Java 版本的 Jar 包,可分别进行 C++ 版本和 Java 版本的集成。这里就只用到 Java 版本来演示了,其实 Java 版本里面很多方法都是走到 native 调用了,而 native 调用的就是 so 动态库里面的方法。用 C++ 版本集成的话,还需要自己写 JNI 代码将 Java 与 C++ 连接起来,不如直接用 Java 版本来的快。SDK 集成有两种方式,一种是直接使用 JCenter 来集成,在 build.gradle 里面添加一行代码就行。dependencies {
implementation 'io.agora.rtc:full-sdk:3.1.3'
}
版本号可以在官网上查询,目前最新版本就是 3.1.3 了。当然还可以通过加载 jar 包和 so 动态库的方式进行集成,把 agora-rtc-sdk.jar 和各版本 so 拷贝到对应目录下,如下图所示:另外别忘了在 app 目录下的 build.gradle 中添加如下代码:dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
}
少了这行代码,可解析不到添加的 jar 包。以上,就完成了整个 SDK 的工程接入,接下来就是代码开发环节了。4. 应用开发我们要开发的是一款音视频通话应用,就像微信视频一样,想想会有哪些内容。首先要通过 Camera 采集我们的画面,然后通过麦克风录制我们的声音,再通过网络传输给到对方,并且能够听到对方的声音,在屏幕上显示画面。想一想这些内容要是纯 Android 开发的话,那涉及的东西可多了,四五个人都不一定能 hold 住,而使用专业的音视频 SDK ,一个人就能搞定大部分工作了。接下来就要去完成这样的开发工作,具体代码可以在 Github 上获取:
https://github.com/glumes/agora-sdk-demo
4.1 权限申请首先是权限申请,涉及到 Camera、网络、存储、录制等等内容,在官网上也有给出具体权限列表,如下:<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="io.agora.tutorials1v1acall">
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<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.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
// 如果你的场景中涉及读取外部存储,需添加如下权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
// 如果你使用的是 Android 10.0 及以上设备,还需要添加如下权限:
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
...
</manifest>
具体代码可见 Github :https://github.com/glumes/agora-sdk-demo/blob/main/app/src/main/java/com/glumes/videochat/MainActivity.kt4.2 引擎创建接下来就是创建 RtcEngine ,SDK 的很多方法都是通过 RtcEngine 来调用的。// 声明 RtcEngine
private RtcEngine mRtcEngine;
// 创建 RtcEngine
private void initializeEngine() {
try {
mRtcEngine = RtcEngine.create(getBaseContext(), getString(R.string.agora_app_id), mRtcEventHandler);
} catch (Exception e) {
Log.e(TAG, Log.getStackTraceString(e));
throw new RuntimeException("NEED TO check rtc sdk init fatal error\n" + Log.getStackTraceString(e));
}
}
在创建 RtcEngine 的时候需要用到 APP ID ,前面已经提过,在创建项目时就已经有了。最后一个参数是 mRtcEventHandler ,它是一个 IRtcEngineEventHandler 类型的抽象类,类里面定义了很多方法,去响应 RtcEngine 不同状态的回调,比如连接成功,连接失败、加入频道、离开频道、网络状态改变等等。如果有需要对应用的性能做一些监视,那么就可以在 IRtcEngineEventHandler 的回调方法做相关统计和埋点。4.3 实现 Camera 画面预览RtcEngine 把 Camera 相关操作都封装在 SDK 内了,通过几行代码就能实现 Camera 画面预览。4.3.1 创建 Camera 画面预览控件 View首先要有一个控件去承接显示 Camera 的画面输出内容,可以用 SurfaceView 也可以用 TextureView ,但并不需要我们去创建控件,而是用 Agora SDK 提供的方法。// 使用 SurfaceView 的场景
SurfaceView mLocalView = RtcEngine.CreateRendererView(getBaseContext());
// 使用 TextureView 的场景
TextureView mLocalView = RtcEngine.CreateTextureView(getBaseContext());
TextureView 是 Agora SDK 在 3.1.0 版本才提供的,它与 SurfaceView 的区别在于 TextureView 可以对画面进行缩放、旋转和平移,而 SurfaceView 更适合在视频通话和直播场景使用。有了显示的 View 之后,要把它添加到当前 Activity 的控件树上,后面 Camera 画面就会输出到这里。4.3.2 配置 Camera 输出并开启预览接下来就是让 Camera 输出画面了,可实际上不用写一行关于 Camera 的代码,三行代码就可以搞定。// 开启视频
mRtcEngine.enableVideo();
// 初始化本地视图
mRtcEngine.setupLocalVideo(new VideoCanvas(mLocalView, VideoCanvas.RENDER_MODE_HIDDEN, 0));
// 开启预览
mRtcEngine.startPreview();
通过以上代码就能在屏幕上显示我们的画面了,默认是前置摄像头的内容。具体代码可见 Github :https://github.com/glumes/agora-sdk-demo/blob/main/app/src/main/java/com/glumes/videochat/CameraPreviewActivity.kt在代码开发中,首先要启用视频模块,默认是关闭的,通过 disableVideo 也可以关闭。而音频模块默认就是开启的,也可以通过 enableAudio 和 disableAudio 来开启关闭音频模块。之后就是通过 setupLocalVideo 方法来初始化本地视图,主要是设置本地用户视频信息的,也就是我们的画面要在 SurfaceView 中如何显示,配置信息都是通过 VideoCanvas 类下发的,它有多种参数类型。// VideoCanvas 构造函数类型
VideoCanvas (View view)
VideoCanvas (View view, int renderMode, int uid)
VideoCanvas (View view, int renderMode, String channelId, int uid)
VideoCanvas (View view, int renderMode, int uid, int mirrorMode)
VideoCanvas (View view, int renderMode, String channelId, int uid, int mirrorMode)
其中 renderMode 就是指定我们的画面在 SurfaceView 如何显示,有如下类型:RENDER_MODE_HIDDEN
优先保证视窗被填满。视频尺寸等比缩放,直至整个视窗被视频填满。如果视频长宽与显示窗口不同,多出的视频将被截掉。RENDER_MODE_FIT
优先保证视频内容全部显示。视频尺寸等比缩放,直至视频窗口的一边与视窗边框对齐。如果视频长宽与显示窗口不同,视窗上未被填满的区域将被涂黑RENDER_MODE_FILL
视频尺寸进行缩放和拉伸以充满显示视窗默认情况下都是使用 RENDER_MODE_HIDDEN 模式的。另外还有 mirrorMode 这样的属性来设置是否要画面镜像。完成了画面显示配置之后,直接调用 startPreview 就能在屏幕上看到画面啦,是不是很简单!4.3.3 Camera 更多的配置操作简单的背后其实是 Agora SDK 做了很多封装工作,比如 Camera1 和 Camera2 的调用逻辑、Camera 输出的分辨率策略、前后摄像头选择等等。我们可以在开启预览前通过 setCameraCapturerConfiguration 方法来配置自己想要的 Camera 信息。// 配置 Camera 信息
mRtcEngine.setCameraCapturerConfiguration(new CameraCapturerConfiguration(CAPTURER_OUTPUT_PREFERENCE_AUTO,CAMERA_FRONT));
Camera 参数信息主要是在 CameraCapturerConfiguration 类中,它的两个参数都是枚举类型,其中第二个参数指定了使用前置还是后置摄像头。第一个参数就是关于 Camera 输出分辨率的一些策略,Agora SDK 并没有给出接口让我们指定 Camera 输出宽是多少,长是多少,而且根据使用场景组合了三个策略,更方面我们去调用了。 CAPTURER_OUTPUT_PREFERENCE_AUTO
(默认)自动调整采集参数。 CAPTURER_OUTPUT_PREFERENCE_PERFORMANCE
优先保证设备性能。 CAPTURER_OUTPUT_PREFERENCE_PREVIEW
优先保证视频预览质量。通过以上操作,就完成了 Camera 画面预览显示。4.4 加入通话频道接下来就要去加入一个频道,并和同一频道内的朋友进行通信。// 函数原型
joinChannel ( String
token,String channelName,String optionalInfo,int optionalUid)
// 具体调用
private void joinChannel() {
// 得到 Token
String token = getString(R.string.agora_access_token);
// Token 和 频道名要匹配
mRtcEngine.joinChannel(token, "demoChannel1", "", 0);
}
通过 joinChannel 方法加入,其中 token 就是我们之前创建好的,而频道名称也是创建 token 时指定的,这两者要匹配起来。optionalInfo 是可选的字符串。optionalUid 是用户 ID,也是可选项,如果不指定(设为 0),SDK 会自动分配一个,并在 onJoinChannelSuccess 回调方法中返回。当我们加入频道成功后,会回调 IRtcEngineEventHandler 中的 onJoinChannelSuccess 方法。通过 leaveChannel 方法,我们可以离开当前频道,同样会回调 IRtcEngineEventHandler 中的 onLeaveChannel 方法。4.5 音视频数据编码格式参数设置加入频道后,我们就要和频道内的朋友们通信。要把我们的画面和声音发送给对方,那肯定要将数据进行编码,然后经过网络传输送给对方。
注意:音频和视频的参数都一定要在加入频道前设定好,也就是 joinChannel 方法调用之前,在其之后调用是不生效的。
4.5.1 视频编码参数设置这里我们要指定视频编码的分辨率、帧率、码率、视频等信息,通过 setVideoEncoderConfiguration 方法。mRtcEngine.setVideoEncoderConfiguration(new VideoEncoderConfiguration(
// 视频分辨率
VideoEncoderConfiguration.VD_640x360,
// 帧率
VideoEncoderConfiguration.FRAME_RATE.FRAME_RATE_FPS_15,
// 码率
VideoEncoderConfiguration.STANDARD_BITRATE,
// 视频方向
VideoEncoderConfiguration.ORIENTATION_MODE.ORIENTATION_MODE_FIXED_PORTRAIT));
在更早的 Agora SDK 版本中是通过 setVideoProfile 来设定的,还可以指定具体的宽高、帧率数值。最新版本换成了 VideoEncoderConfiguration 来配置,并且配置的参数是都已经定义好了相关的常量,不用自己写 720、1280 这样的 Magic Number 了。参数的设置并不是一成不变的,因为网络或者性能等因素会有一些波动,但还是会取最接近我们设定的值。4.5.2 音频编码参数设置而音频相关的参数,则是通过 setAudioProfile 方法来设置。mRtcEngine.setAudioProfile(
// 设置音频采样率、码率、编码模式和声道数
Constants.AudioProfile.DEFAULT.ordinal(),
// 设置音频的应用场景
Constants.AudioScenario.DEFAULT.ordinal());
音频我们可以设置采样率、码率、编码模式以及声道数。和视频参数设置一样,我们不用指定具体的数值,Agora SDK 都根据业务使用场景做了封装,根据需要来设置就好啦。音频 AudioProfile 有如下的配置:音频的应用场景也有如下:一般来说,我们使用默认的配置 DEFAULT 就好了。4.6 用户加入并显示对方画面当设置好了自己的数据编码参数,并且也成功加入了频道,接下来就是去接收频道内其他人的画面和信息了。具体代码可见 Github:https://github.com/glumes/agora-sdk-demo/blob/main/app/src/main/java/com/glumes/videochat/VideoChatActivity.kt4.6.1 判断是否有用户加入频道当 IRtcEngineEventHandler 中的 onUserJoined 方法回调时,代表有人加入了当前频道,此时就可以建立并初始化远端用户视图了。如果启用了视频录制功能,视频录制服务也会回调 onUserJoined 方法,相当于有个机器人加入该频道,此时要区分开来,不能为机器人建立远端视频,然后它不会发送视频流的,建立了也是黑屏的。为了避免机器人加入带来的误判,在 2.9.0 版本后更建议在 onRemoteVideoStateChanged 方法回调中去建立远端用户视图。onRemoteVideoStateChanged 方法顾名思义就是当远端用户状态发生改变时就会调用,其中定义了如下几个状态: REMOTE_VIDEO_STATE_STARTING
本地用户已接收远端视频首包 REMOTE_VIDEO_STATE_DECODING
远端视频流正在解码,正常播放 REMOTE_VIDEO_STATE_STOPPED
远端视频默认初始状态 REMOTE_VIDEO_STATE_FROZEN
远端视频流卡顿 REMOTE_VIDEO_STATE_FAILED
远端视频流播放失败当状态是 REMOTE_VIDEO_STATE_STARTING 或者 REMOTE_VIDEO_STATE_DECODING 时,我们认定有朋友加入频道了,此时建立远端用户视图。@Override
public void onRemoteVideoStateChanged(final int uid, int state, int reason, int elapsed) {
if (state == Constants.REMOTE_VIDEO_STATE_STARTING){
runOnUiThread(new Runnable() {
@Override
public void run() {
setupRemoteVideo(uid);
}
});
}
}
其中 onRemoteVideoStateChanged 回调方法中 state 参数代表状态,uid 用来标识远端用户 id,如果有多个朋友加入了该频道,我们就要用 uid 来区分一下用户,避免漏了或者重复建立远端用户视图。4.6.2 建立远端用户视图接下来建立远端用户视图,和建立 Camera 预览视图方法基本一致。// 由 Agora SDK 创建 SurfaceView
mRemoteView = RtcEngine.CreateRendererView(getBaseContext());
// 把 SurfaceView 添加到当前 Activity 的布局控件树上
mRemoteContainer.addView(mRemoteView);
// Camera 画面预览就用 setupLocalVideo 方法,远端用户就用 setupRemoteVideo 方法
mRtcEngine.setupRemoteVideo(new VideoCanvas(mRemoteView, VideoCanvas.RENDER_MODE_HIDDEN, uid));
同样是由 Agora SDK 去创建 SurfaceView ,把它添加到控件容器上,最后通过 setupRemoteVideo 方法完成建立,整个逻辑和 Camera 视图建立是类似的,就是最后调用的方法不一样了。4.7 应用运行并视频通话当建立好了远端用户视图,理论上现在就可以显示自己和对方的画面了,并互相听到声音了。用两台手机分别运行程序,可以验证效果如下:另外在官网上还可以查看当前项目的流量使用情况:每个月有 10000 分钟的流量赠送,可以放心使用5. 项目开发总结通过以上的 SDK 接入和代码示例就已经完成了一个简单的双人音视频通话。而 Agora SDK 提供的功能远非如此。我们还可以对当前频道的音视频进行控制,选择是否静音、是否关闭画面等等;我们还可以切换频道,参与频道的通话;我们还可以将项目打造成多人的音视频通话,为每个加入频道的用户建立远端视图。更多的音视频相关功能都可以通过 Agora SDK 来实现了。总结一下整体的接入流程也是非常方便的:
SDK 集成 -> 权限设置 -> Camera 预览 -> 加入频道 -> 显示画面 -> 在线通话
以上的每个步骤在文章中都有讲解,希望在你的使用过程中会有一些帮助!!!「本文为个人原创,首发于 声网开发者社区」详情: https://rtcdeveloper.com/t/topic/20054
2020-04-15 16:43
环球网综合如今,实时音视频互动已成为生活中无处不在的场景,特别是疫情带来的“生活场景线上化”,使亿万用户涌到线上,为线上应用带来了巨大流量。当实时音视频变成主流互动方式,这项服务不仅仅是满足实时互动的功能,而是需要提供稳定可靠的服务保障。作为实时音视频云PaaS服务商,声网Agora为全球200多个国家和地区的15万+应用提供实时音视频技术支撑和服务保障。疫情期间,声网日均通话分钟数较日常增长近一倍,达15.6亿分钟(按流计时为62.4亿分钟)。4月15日,声网Agora举办主题为“一切都是为了服务好150,000+APP”AgoraShare线上媒体分享会。声网Agora客户成功总监郭磊就“生活场景线上化“背后技术服务的难点与挑战进行了解读。他认为,“在大规模、高并发的情况下,保障线上服务稳定可靠;高质量的、全生命周期的技术服务;以及为开发者提供更友好、更便捷的服务。是各种生活场景线上化的背后,作为PaaS云服务商主要面临的3大挑战。”声网Agora数据平台和数据产品负责人何丰也对声网Agora推出的RTC行业首个质量监控与数据分析工具--水晶球(Agora Analytics)的特性和优势进行了分享,他指出,“水晶球是行业内第一个让企业和开发者能够全面了解到自己终端用户使用体验的大数据分析产品,我们希望通过水晶球,为企业和开发者提供安全、省心的实时音视频互动体验。“同时他还透露,通过使用水晶球,企业对于终端用户的投诉反馈,实现了从“天”到“秒”级的效率提升。疫情期间,整个声网都坚守着“停工不停服务”,7*24小时服务的承诺没有因疫情而有丝毫改变。运维、服务、研发团队随时在线,保证对客户需求和问题的及时响应。郭磊称,“疫情期间,我们通过Team Viewer线上工具进行客户联调,将客户现场拜访变成了线上远程拜访。对于一些紧急上线需求,我们的服务工程师也会紧急驻场帮助客户上线。我们的解决方案架构师也在疫情期间冒着大雪前往新东方进行驻场,对新东方提供全天7*24小时无间断的服务保障。”生活场景线上化:6年无全网事故的技术服务挑战学习、工作等各种生活场景线上化的背后,对实时音视频云服务商提出了诸多挑战,郭磊认为主要体现在以下3个方面:在大规模、高并发的情况下,保障线上服务稳定可靠 疫情给线上应用和云服务商带来了巨大的流量,同时对平台的技术能力也是一项前所未有的考验,郭磊称,“疫情期间,我们看到一些知名平台和应用都出现了延迟、卡顿或无法进入等情况。但声网在面临此次流量的冲击中“扛住”了压力,续写了成立6年以来无全网事故的记录。这在整个云服务领域都是特别难得的。“能够帮助客户和合作伙伴把实时音视频那部分的压力扛住是声网的本分。没有技术可以做到100% 稳定,声网会始终保持诚惶诚恐、如履薄冰的心态,不断从技术、服务、机制、流程上加强,努力去追求这个100%。在面对新东方提出将全国线下课转移到线上需求时,声网Agora内部从CEO到服务团队、研发团队都如履薄冰、枕戈待旦。声网Agora与新东方直播团队通力合作,7天之内将新东方旗下80多个分校和子机构的上百万线下师生搬到线上“新东方云教室”。在面对突发流量、资源紧张的情况下快速完成平稳扩容,确保了质量稳定、上线后零故障。郭磊透露,“每天凌晨3、4点还有服务工程师在响应,帮助客户调查问题,成功转移新东方百万师生的背后是声网人的专业和努力。”高质量的、全生命周期的技术服务 声网Agora服务覆盖社交泛娱乐、在线教育、远程办公、远程医疗、电商直播等10余行业的100多个应用场景。服务的企业包含小米、陌陌、抖音、The Meet Group、新东方、VIPKID、好未来等行业巨头、独角兽、创业者和中小开发者。所服务企业的业务广泛覆盖了全球200多个国家和地区,因此,声网Agora需要提供多时区、多语言的7*24小时实时音视频服务,才能保障各行业、各地区、各类企业的服务需求。不同行业在使用RTC服务的过程中所遇到的痛点和需求都是不同的,郭磊称,“社交泛娱乐、在线教育、企业协作等行业场景对实时音视频技术有着不同的要求。”社交泛娱乐类应用更关注产品的快速开发上线、场景迭代创新以及如何持续提升用户体验;在线教育类应用,由于整体获客成本较高,需要保障师生上课质量体验,就特别要求实时质量透明,以及事后出现问题时可追溯、可调查。而在企业协作场景中,除了要保证音视频交互的流畅度,包括多人场景中的回声、降噪等音频处理之外,还对保障数据安全和合规性提出了更高要求,郭磊强调,“声网的SDK在安全合规上做了很多保障,这样客户可以放心使用我们的SDK,不用担心因为介入第三方SDK而导致合规的问题。”受疫情影响,海外应用也在持续上量,有些甚至出现爆发式增长。美国社交游戏应用公司Bunch在声网Agora的实时音视频用量从2月以来增长了200倍以上,进入了17个国家appstore的前20社交应用榜单。来自沙特阿拉伯的Noon Academy与多个中东国家的教育部合作,通过当地的K12教育机构为学生继续上课提供保障。郭磊介绍,“疫情期间,在声网Agora服务工程师的配合下,Noon Academy的业务在一周内全部(从原有的方案)迁移到声网,保证了资源和本地覆盖的质量。基于对声网的肯定和质量保障,Noon Academy也在快速开拓中东及以外的新市场。”为开发者提供更友好、更便捷的服务 除了企业客户,在声网平台上也有大量的中小开发者,因此,声网还致力于为开发者提供更加友好、便捷的服务。一方面声网为开发者提供简单易用的API,只需要几行代码,30就分钟就能轻松集成,做到了iOS、Android、Web、Windows、macOS、小程序、Linux等18个平台覆盖和对6000多款终端机型的支持。另一方面,声网还提供丰富的开发者工具和完善的开发者服务,可以大大节省前期的投入,例如提供每月1万分钟免费使用时长、免费的开发者社区支持和免费演示应用程序测试和使用。水晶球:每天7000亿质量数据
只为让企业和开发者安全和省心作为日均提供15.6亿分钟实时音视频使用时长的PaaS服务商,声网解决的不是单一场景的问题, 而是要解决在全球范围内、各种条件下、不同使用场景间,都能稳定工作的复杂问题。在何丰看来,“企业应用在使用声网的服务为自己的客户创造价值时,希望声网所提供的服务是能掌控、够安全、少操心的。所以我们希望通过水晶球,为企业和开发者提供安全、省心的实时音视频互动体验。”在全球范围内提供实时音视频互动,保障服务质量有非常多的挑战,例如全球分布的用户、终端设备差异、网络环境差异、用户使用习惯、APP集成方式、数据链路过长等等,任何一个挑战带来的影响,都会影响到用户体验。而终端用户的问题反馈链太长, 让很多企业应用和开发者都变得很无助,不仅影响效率,甚至更多时候会面临用户的流失。为了解决这一问题,声网Agora推出了行业内第一个让企业和开发者能够全面了解到自己终端用户使用体验的大数据分析产品“水晶球” 。据何丰介绍,通过使用水晶球,企业对于终端用户的投诉反馈,实现了从“天”到“秒”级的效率提升。水晶球是声网Agora 为企业和开发者提供的全周期通话质量监测、回溯和分析的解决方案,致力于帮助企业和开发者及时发现问题、定位原因,并最终解决问题,提升用户体验。目前,在水晶球平台上,每天有15.6亿分钟的体验评估指标、7000亿质量数据规模,何丰指出,“这包含全链路各个环节的质量和系统运行数据(不包含客户个人数据以及通话内容),例如画面分辨率、是否卡顿、是否清晰等,并且在全球范围内进行实时收集和实时反馈。不仅能对个例的实时互动质量进行分析、调查,还能从全局的角度对大盘的整体情况进行分析。“具体而言,何丰以一场2000人的直播活动举例,“直播活动整体质量怎么样?主播是否有问题?哪个主播有问题?是不是所有用户都能非常流畅的看视频?质量问题是不是集中在某个区域?或某一类设备?这些可视化数据都可以快速帮助发现问题,快速反馈、提升解决效率。“2019年Q4 水晶球已上线了2.0版,除延续了1.0的通话调查功能外,还同时支持数据洞察、实时数据、自动诊断等beta功能。对于企业和开发者而言,使用水晶球不仅可以优化客服人员工作效率,还能有效提升运营人员的响应速度,并帮助管理层快速分析做决策、实时把脉相应产品和业务的策略。据了解,从2018年开始,abc360英语选择声网为其提供在线教育解决方案,同时将水晶球打通内部系统,将课时质量结果实时显示在CRM里,及时发现课中问题,快速定位问题、解决问题。abc360相关人士曾表示,“水晶球给了业务一个基本的判定问题的依据,非常重要,极大提升了我们内部工作效率;未来结合水晶球分析结果我们可以主动诊断用户设备和网络情况,给予用户改进建议,提升上课质量。”责编:花争版权作品,未经环球网 huanqiu.com 书面授权,严禁转载,违者将被追究法律责任。阅读数(197)不感兴趣不感兴趣广告软文重复、旧闻文章质量差文字、图片、视频等展示问题标题夸张、文不对题与事实不符低俗色情欺诈或恶意营销疑似抄袭其他问题,我要吐槽确定*请填写原因感谢您的反馈,我们将会减少此类文章的推荐
投诉

我要回帖

更多关于 通信软件开发 的文章