功能及服务问题

1. 视频通话最高支持多大的分辨率?

JusTalk Cloud SDK 提供的视频通话功能最高支持1080P。但实际使用过程中,由于受到手机自身性能的限制,客户端最高分辨率为 720P,目前暂支持 iPhone 6/iPhone 6 Plus/Samsung S6等高端机型。

2. 是否支持高清语音通话?

支持采样率为16KHz的高清语音。相比传统的8KHz的语音更清晰,具有高保真的音质。

3. 客户端支持哪些操作系统?

现阶段支持 iOS、Android 和 Windows。不久之后将支持 Web 浏览器和 Mac。

4. 市场上的手机众多,性能各异,是否能够灵活适配这些机型?

独创的 MDM 设备管理器,能够协助客户端自动获取对应机型的参数,让开发者无需担心机型适配问题。

5. 网络切换时,通话是否会中断?

不中断。JusTalk Cloud 采用自主研发的接入服务器。在网络发生切换时,通话不中断且不影响通话质量。

6. 语音通话和视频通话的流量消耗如何?

JusTalk Cloud 采用动态码率的方式。在网络好时,它提升视频的分辨率;网络不佳时,会相应下降以保证通话的流畅度与清晰度。语音 一般的码率为20Kbps,0.3MB/min(上下行总流量);视频一般的码率为300Kbps,4.5MB/min(上下行总流量)。 *以中移动70元/G为例,每分钟语音通话的流量费为2分钱。

7. 服务器端能支持多少在线用户?

我们在全球多点部署服务器,采用支持亿级用户系统方案。系统架构支持并行扩容,性能可以随时做增量,对用户量支持是没有上限的。

8. JusTalk Cloud 业务性能如何得到保障?

我们的研发团队由各方面的技术专家组成,经过多年开发配合,JusTalk Cloud的性能有保障,且得到了大量应用的验证。同时我们拥有 一批经验丰富的运维工程师,提供运营管理平台和工具,运营团队对平台保持7x24小时的运营监控,全力保障系统正常运行。

安全问题

1. 如何保证信息的安全?

为保证信息安全,信令是采用私有的加密协议,媒体流通过SRTP。

2. 如何保障JusTalk Cloud提供业务和服务的安全性?

要使用 JusTalk Cloud 的业务,首先需要为所有用户创建唯一的 ID,这个 ID 可以是任意的字符串。它可以和你的应用的账户体系里的用户 ID 一致,也可以是经过加密算法得出的字符串。

3. 如何保障JusTalk Cloud提供业务和服务的安全性?

JusTalk Cloud 目前的业务数据主要由两类:音视频业务数据和 IM 业务数据。
我们 SDK 的业务数据都是经过加密的,无论是音视频业务数据还是 IM 业务数据,在网络上传输时,其安全性是有保障的。对于需要经 过我们服务器存储和中转的 IM 业务数据和部分音视频业务数据,我们是绝不会以任何形式碰触或者监控的。

开发问题

1. 开发过程中,音视频是否需要设置分辨率、帧率等媒体参数?

无需设置。相比传统的网络,移动网络的波动很大。所以我们采购动态码率的方式来适应网络的变化,媒体的参数都是动态变化,无需设置。

2. 在 Portal 网站了创建的两个应用,这两个应用的帐号是否可以互通?

如果两个应用是使用同一个 Portal 注册用户创建的,则这两个应用的帐号是可以互通的。

Portal 使用相关

1. Portal 是否可以上传多个 Push 参数?

可以上传多个 Push 参数。不同的 Push 参数应该使用不同 BundleId 或者 PackageName 区分。

2. 在 Portal 网站了创建的两个应用,这两个应用的帐号是否可以互通?

如果两个应用是使用同一个 Portal 注册用户创建的,则这两个应用的帐号是可以互通的。

登录相关

1. 调用登录接口返回值为0是否表明已经登录成功?如果不是那该如何判断是否 登录成功?

登录接口返回 0 仅表示接口调?用成功,不表明登录已经成功。只有收到登录成功的事件通 知才表明登录成功。
iOS 平台:
MtcLoginOkNotification 事件通知
Android 平台:
MtcApi.MtcLoginOkNotification 事件广播
Windows 平台:
MtcApi.MtcLoginOkNotification 事件

2. MtcLogoutOkNotification 和 MtcLogoutedNotification 有什么区别?

MtcLogoutOkNotification 表示主动调用登出接口后已经登出的事件通知;
MtcLogoutedNotification 表示没有调用登录接口,但是收到已登出的事件。一般是当前设备登录的帐号在其他设备上登录,导致当前 设备被踢下线的时候。
现在 JusTalk Cloud 一个帐号只能在一个设备上登录。在第二个设备上登录成功之后,服务器将通知前一个设备帐号下线。此时 UI 将收 到 MtcLogoutedNotification 通知。

3. 调用登录接口 MtcApi.login 返回 1 是什么原因?

返回 1 表示该接口重复调用。应用启动的时候只需要调用一次登录接口,然后等待登录成功或者失败的事件通知即可,不需要重复调用登 录接口。登录接口返回 0 或者 1 只能说明这个接口调用是否成功,在接口调用成功的情况下,才会收到相应事件的通知。获取登录状态可 以通过调用 Mtc_CliGetState 接口。

4. 在长连接重连的过程中,具体该如何进行?

现在 UI 如果要影响长连接的行为有两个接口,Mtc_CliNetworkChanged 和 Mtc_CliWakeup;
Mtc_CliNetworkChanged 是在检测到有网络连接和没有网络连接的时候调用:
没有网络连接的时候,参数为 MTC_ANET_UNAVAILABLE,这时候终端会停止尝试连接;
在有网络连接的时候,参数为 MTC_ANET_WIFI 或者 MTC_ANET_MOBILE,这时候终端会立刻开始重试连接。
Mtc_CliWakeup 是在程序切换前台和后台的时候调用:
在程序切换到后台的时候,参数为 ZFALSE,这时候终端重试连接和保活发送的间隔会拉大以减少耗电;
在程序切换到前台的时候,参数为 ZTRUE,这时候终端重试连接和保活发送的间隔会缩小;
第一次重连间隔是3秒,之后每次重连间隔翻倍,直到10分钟为止。最终10分钟发起一次重连。10分钟重连是指不做任何操作的情况下,如果调用 CliNetworkChanged, 或 CliWakeup 会立即重试。

即时消息相关

1. Mtc_ImSendFile 这个接口调用多次,SDK 内部有没有做好队列发送?是否支持同时发送?

内部没有排队机制,多次调用会同时发。

SDK 集成相关

1. SDK 是否支持 64 位平台?

SDK 支持 iOS 64 位平台, SDK 支持 Android 64 位平台。

2. Android 平台对代码进行混淆的时候,需要保护哪些?

-dontwarn com.justalk.* -keep class com.justalk.**{*;} -keepattributes InnerClasses
#不混淆R类里及其所有内部static类中的所有static变量字段 -keep public
class **.R {
public *; }
防止运行的时候找不到资源导致crash

3. 通话中对方开关摄像头会收到什么事件通知?

如果需要接收到摄像头状态改变的通知,需要在摄像头状态改变时调用
Mtc_CallVideoSetSend(ZUINT iCallId, ZUINT iState); 摄像头打开:iState 为 EN_MTC_CALL_TRANSMISSION_NORMAL 摄像头关闭:iState 为 EN_MTC_CALL_TRANSMISSION_CAMOFF 那么摄像头状态改变时,对端会收到 MtcCallVideoReceiveStatusChangedNotification 事件通知,里面 MtcCallVideoStatusKey 的 值,定义分别为:
/**< @brief Transmission is normal, 'nrml'. */
EN_MTC_CALL_TRANSMISSION_NORMAL = 0x6E726D6C,
/**< @brief Transmission is paused for camera is off, 'coff'. */
EN_MTC_CALL_TRANSMISSION_CAMOFF = 0x636F6666,
/**< @brief Transmission is paused, 'pasd'. */
EN_MTC_CALL_TRANSMISSION_PAUSE = 0x70617364,
/**< @brief Transmission is pause for QoS reason, 'pqos'. */
EN_MTC_CALL_TRANSMISSION_PAUSE4QOS = 0x70716F73

通话功能集成相关

1. SDK中Mtc_Call相关接口中使用iCallID是否和服务器收到的通话状态通知中 的callID一样?

不一样。终端可以调用 Mtc_CallGetServerCallId 获取服务器的 callId。除此之外的所有 SDK 接口和事件通知中的 iCallId 表示的是通话 相关的本地资源。通话状态通知中的 callId 表示 的是通话相关的服务器资源。这两个资源生命周期是不同的,不能通用。

2. 在通话中,如果一方应用异常退出,应该怎么处理?

现在 SDK 默认处理是在等待 30 秒没有收到对方媒体数据时就会主动挂断通话。对方应用异常退出,或者对方断网事件过长都会触发该处 理。

3. 现在呼叫等待时间是多长?

60 秒。超时后服务器将主动挂断通话。

4. Android 呼叫时会出现下面的提示,是什么原因?

出现该提示一般是打开摄像头失败,请先检查系统设置是否允许了使用摄像头的权限。或者第三发权限控制软件中是否设置允许使用摄像头。

5. Mtc_CallGetPeerName 和 Mtc_CallGetPeerDisplayName 有什么不同?

Mtc_CallGetPeerName 是获取对方登录的 ID
Mtc_CallGetPeerDisplayName 是首先获取对方的昵称,如果没有昵称就是对方登录 的 ID。对方的昵称是对方调用 MtcCallDelegateCall 接口的第二个参数 displayName

Android呼叫时相机设备异常

6. A 呼叫 B,B 此时断网,A 挂断,B 网络恢复,此时 B 会弹出通话界面,并 且马上就结束,是什么原因?是否可以避免这种情况?

产生这个现象的原因是 B 网络恢复后,连续收到建立通话消息和结束通话消息。
A 呼叫 B 时,建立通话消息发送到服务器上,A 挂断时发送了结束通话消息,不是取消前 一个消息(服务器没有取消前一个消息的功 能)。这些消息会在服务器上缓存一段时间 (60 秒)。如果 B 在缓冲的时间内网络恢复,则将收到缓存的消息。如果 B 在缓冲时间 之 外网络恢复,则缓存消息已被删除,B 不会收到这些消息,也将不会出现弹出通话界面 并立刻结束的现象。 一种方式避免产生这个现 象,是在收到建立通话消息的时候延迟一段时间(例如 0.5 秒) 再显示通话界面,如果立刻收到结束通话的消息,就不显示通话界面。

7. 在使用 Xcode 调试代码的时候,出现下面的异常,但是 Xcode 可以继续 运行,是什么原因?

上面的异常发生在内部在重连的时候,对应的对象已经释放掉了。这种是内部抛出了异 常,但不是一个问题,只有在 debug 的时候才会 被 Xcode 捕获下来,你可以去掉捕获所有 异常的选项。在下图中去掉 All Exceptions 部分。

8. 拨打方等待接听的音乐文件是哪个?是否可以修改?修改音乐是直接替换文 件名吗?

替换 RingBack.wav 文件,一般是 8kHz 采样,PCM 格式。