功能及服务问题

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

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

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

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

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

现阶段支持 iOS 5.X-8.X、Android 2.3-5.X 和 Win XP/7/8。不久之后将支持 Web 浏览器和 iMac。

4. iOS 客户端是否支持最新的64位系统?

支持的。我们的客户端 SDK 将在第一时间升级,以支持最新系统版本。

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

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

6. 支持哪些网络接入?

支持 Wifi/4G/3G/2.5G 网络。在2.5G 低带宽的情况,能够保证流畅的语音通话。

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

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

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

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

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

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

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

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

安全问题

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

采用信令加密(TLS)和媒体流加密(SRTP)的手段,以保证信息安全。

2. 应用使用了 JusTalk Cloud,账户安全是否有风险?

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

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

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

开发问题

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

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

2. 如何使用 JusTalk Cloud 开发应用并上线,整个流程是怎么样的?

(1)注册账号成功;
(2)创建应用之后,下载相应的 SDK 并集成到自己的 APP 之中;
(3)在 JusTalk Cloud 开发环境中集成测试完成之后,点击上线申请;
(4)待审核通过,开发应用就会由我们的生产环境上提供服务。
*具体操作,可以参考新手指引

Portal 使用相关

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

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

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

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

Sample 使用相关

1. Sample 中 OpenSSL 相关文件的作用是什么?

Sample 使用 OpenSSL 相关文件是为了在 Sample 中测试 RSA 鉴权模式。客户不需要将 OpenSSL 相关文件导入到客户自己的 App 中。
OpenSSL 相关文件包括:
iOS 平台:
include/openssl 下所有头文件
lib/ios/libcrypto.a
lib/ios/libssl.a
Android 平台:
libs/bcprov-jdk15on-152.jar
Windows 平台:
signer 目录中所有文件及工程
bin/signer.dll

登录相关

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. 在长连接重连的过程中,我调用API的login方法,具体该如何进行?

现在 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. 在同一局域网内两个sample终端通话质量不好并且卡顿是为什么?

JusTalk Cloud SDK 在通话中会进行点对点探测,一般在同一个局域网之内的两个终端通话,媒体数据会直接通过点对点的方式传输,视频质量应该比较好。但是以下几个情况下会出现质量不好的情况:
两个终端分别接入同一热点 2.4G 和 5G 网络。在这种情况下一般测试质量都不好。2.4G 和 5G 网络是同一热点的不同网络,不同热点设备对这类连接的处理方式有不同。
有些热点 2.4G 和 5G 网络不能直接连接,此时媒体数据将通过服务器中转,造成了质量下降。
有些热点 2.4G 和 5G 网络可以直接连接,但是质量也不好,丢包,抖动都可能较大,所以也造成质量下降。
两个终端在同一网络的不同子网中。
不同子网的网络行为与网关或者路由器有关。有些情况能够穿透网关或者路由器,有些情况不能穿透,就造成媒体数据通过服务器中转,引起质量下降。

即时消息相关

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

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

SDK 集成相关

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

SDK 支持 iOS 64 位平台,不支持 iOS 64 位模拟器。 SDK 不支持 Android 64 位平台。

2. 集成iOS SDK之后,在通话开始或者关闭出现异常,堆栈信息如下,是什么问题?

集成iOS SDK后,可能存在的异常堆栈信息

可能的原因是客户集成 SDK 的 App 同时连接了 JusTalk Cloud SDK 的库文件和其他第三 方的音视频引擎库文件,例如 腾讯云音视频SDK 等。这些 SDK 中都有相同的公共函数, 同时连接导致运行时错误。公共函数例如是语音或者视频的编解码,图像处理函数等。 集成 SDK 不能同时连接第三发音视频 SDK 文件。

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

-keep class com.justalk.cloud.** { *; }
-keep interface com.justalk.cloud.** { *; }
-keep class com.justalk.ui.MtcNotify { *; }

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

会收到 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. 通话建立时如何将自己的昵称带给对方?

iOS 平台:
调用 MtcCallDelegateCall 接口,第二个参数 displayName 传入自己的昵称 void MtcCallDelegateCall(NSString *number, NSString *displayName , NSString *peerDisplayName, BOOL isVideo)
Android 平台: 调用 com.justalk.cloud.juscall.MtcCallDelegate.call 接口,第二个参数 displayName 传入自己的昵称 public static void call(String number, String displayName, Strin g peerDisplayName, boolean isVideo)

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

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

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

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

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

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

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

Android呼叫时相机设备异常

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

6. 通话集成之后,之前几次呼叫都可以接通,现在呼叫之后,那个终端没有弹出通话界面, 是什么原因?

一个可能的原因是那个终端登录的帐号,在其他设备上登录了,导致那个设备上帐号已经 登出。此时 SDK 会通知界面 MtcLogoutedNotification 事件。但是 UI 没有对该事件处理, 所以再次呼叫那个帐号,对应的终端将不会收到呼叫了。 如果确定不是上述原因,就需要日志具体确定问题。

7. Mtc_CallGetPeerName 和 Mtc_CallGetPeerDisplayName 有什么不同?

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

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

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

9. 集成SDK之后可以拨打电话,但是呼叫接通后对方看不到视频,并且呼叫方终端没有弹出通话界面,是什么原因?

可能是没有调用初始化 CallDelegate。
iOS 平台调用 MtcCallDelegateInit 接口,类似代码如下:
- (BOOL)application:(UIApplication *)application didFinishLaunch
ingWithOptions:(NSDictionary *)launchOptions {
Zmf_AudioInitialize(NULL);
Zmf_VideoInitialize(NULL);
if (Mtc_Init(MY_APP_KEY) != ZOK) {
return NO;
}MtcCallDelegateInit();
...
}

Android 平台调用 com.justalk.cloud.MtcCallDelegate.init 接?口,类似代码如下:
public class JApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
ZmfAudio.initialize(this);
ZmfVideo.initialize(this);
MtcApi.init(this, getString(R.string.JusTalkCloud_AppKey));
MtcCallDelegate.init(this);
...
}
}

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

Xcode显示正常但仍可运行

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

如何去掉捕获所有异常

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

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

12. iOS平台上将别人打过来的声音改成系统自带声音改如何操作?

不能实现。