About Functions and Services

1. What is the maximum resolution supported for video calls?

The video call function provided by the JusTalk Cloud SDK supports a maximum resolution of 1080P. However, during actual use, because of the performance limitations of cell phones, the client supports a maximum resolution of 720P. At present, this is supported for iPhone 6, iPhone 6 Plus, Samsung S6, and other high-end models.

2. Does this product support HD voice calls?

JusTalk Cloud supports HD voice calls with a sampling rate of 16 KHz. This provides more clarity than conventional 8KHz calls, with high-fidelity audio quality.

3. What operating systems does the client support?

At present, the client supports iOS, Android, and Windows. In the near future, support for web browsers and Mac will be available.

4. There are many cell phones on the market with various performance parameters. Can the client flexibly adapt to different models?

Our original MDM device manager helps the client to automatically obtain the device parameters, so that developers do not have to worry about adapting the client to different devices.

5. When you switch networks, will the call be interrupted?

It will not be interrupted. JusTalk Cloud uses a self-developed access server. If you switch networks, the call will not interrupted and the quality will not be affected.

6. How much traffic is consumed by voice and video calls?

JusTalk Cloud adopts a dynamic code rate approach. When your network is good, it increases the video resolution. When your network is not so good, it reduces the resolution, while maintaining a good level of smoothness and clarity.Voice: Normal code rate: 20 Kbps, 0.3 MB/min (total uplink/downlink traffic). Video: Normal code rate: 300 Kbps, 4.5 MB/min (total uplink/downlink traffic). *Using the China Mobile rate of 70 RMB/GB as an example, the traffic produced by a voice call will cost 2 cents per minute.

7. How many online users can the servers support?

Our severs are deployed at multiple sites throughout the world and use a system solution that can support hundreds of millions of users. The system architecture supports parallel expansion and the performance can be incrementally enhanced at any time. There is no limit to the number of users supported.

8. How do you guarantee the performance of the JusTalk Cloud service?

Our R&D team is composed of technical experts with various specialties. They have worked together to develop products and solutions for many years. This enables us to guarantee JusTalk Cloud's performance, which has been verified by many apps. At the same time, we have a team of experienced O&M engineers, who provide an operation and management platform and tools. The operations team monitors the platform 24/7 to ensure the system is running properly.

About Security

1. How do you ensure information security?

In order to ensure information security, we use a proprietary encryption protocol for signaling and stream media through SRTP.

2. How do you ensure the security of the businesses and services provided by JusTalk Cloud?

At present, JusTalk Cloud has two main types of business data: AV service data and IM service data. 
Our SDK's business data are encrypted, both AV and IM business data. During transmission over the network, the security of these data is guaranteed. When users need to store and transfer IM business data and some AV business data on our server, we never access or monitor the data in any way.

About Development

1. During the development process, do I need to set the resolution, frame rate, and other media parameters for the audio/video?

No. Compared to conventional networks, mobile networks have relatively large fluctuations. Therefore, we use dynamic code rates to adapt to network changes. The media parameters dynamically change, so you do not need to set them.

About Portal Use

1. Can I upload multiple Push configurations on the Portal?

Yes. You should use different BundleIds and PackageNames to differentiate the different Push configurations.

2. I created two apps on the Portal website. Can the accounts for these two apps intercommunicate?

If the two apps were created by a single registered Portal user, their accounts can intercommunicate.

About Login

1. When a call to the login interface returns a value of 0, does this indicate that login was successful? If not, how do I determine if login was successful?

When the login interface returns a value of 0, this only indicates that the interface call was successful, not that login was successful. Only the login successful event notification indicates a successful login.
iOS platform:
MtcLoginOkNotification event notification
Android platform:
MtcApi.MtcLoginOkNotification event broadcast
Windows platform:
MtcApi.MtcLoginOkNotification event

2. What is the difference between MtcLogoutOkNotification and MtcLogoutedNotification?

MtcLogoutOkNotification is the logged out event notification triggered after a manual call to the logout interface.
MtcLogoutedNotification indicates a logged out event was received, though the logout interface was not called. Generally, this occurs when the account was logged in on the current device, but then forcibly logged out because the account was logged into from another device.
At present, a JusTalk Cloud account can only be logged in on one device at a time. After a second device logs in, the server will notify the previous device of its disconnection. At this time, the UI will receive the MtcLogoutedNotification.

3. Why does a call to the login interface MtcApi.login return a value of 1?

A return value of 1 indicates that the interface has been repeatedly called. When the app is launched, it only needs to call the login interface once and then wait for the login successful or login failed notification. It does not have to repeatedly call the login interface. When the login interface returns a value of 0 or 1, this only indicates whether or not the call to the interface was successful. When the interface is called successfully, you will receive the corresponding event notification. To view the login status, you can call the Mtc_CliGetState interface.

4. How can I reconnect during a long connection?

At present, the UI has two interfaces you can use to influence long connections, Mtc_CliNetworkChanged and Mtc_CliWakeup.
Mtc_CliNetworkChanged is called when there is a detected network connection and when there is no connection:
When there is no network connection, the parameter is MTC_ANET_UNAVAILABLE. At this time, the terminal will stop trying to connect.
When there is a network connection, the parameter is MTC_ANET_WIFI or MTC_ANET_MOBILE. At this time, the terminal will immediately start trying to reconnect.
Mtc_CliWakeup is called when the program switches between the foreground and background:
When the program switches to the background, the parameter is ZFALSE. At this time, the terminal's retry connection and keep alive packet sending interval will be increased to reduce power consumption.
When the program switches to the foreground, the parameter is ZTRUE. At this time, the terminal's retry connection and keep alive packet sending interval is reduced.
The first retry connection interval is 3 seconds. This interval doubles for each subsequent retry connection attempt, until it reaches 10 minutes. Finally, a retry connection is initiated once every 10 minutes. This is the case as long as no operations are performed. If the CliNetworkChanged or CliWakeup interface is called, a reconnection attempt is initiated immediately.

About IMs

1. When the Mtc_ImSendFile interface is called multiple times, does the SDK use an internal queue? Does it support simultaneous sending?

The SDK does not have an internal queue mechanism. Multiple calls will be sent simultaneously.

About SDK Integration

1. Does the SDK support 64-bit platforms?

The SDK supports iOS and Android 64-bit platforms.

2. When Android platforms obfuscate the code, what must be protected?

-dontwarn com.justalk.*
-keep class com.justalk.**{*;}
-keepattributes InnerClasses
#Do not obfuscate the following static variable field in the R class and all its internal static classes: -keep public class **.R { public *; }
This ensures that the failure to find resources during operation will not result in a crash.

3. When the peer turns camera on or off during a call, what event notification will be received?

If you need to receive camera status change notifications, you need to call the following interface when the camera status changes: Mtc_CallVideoSetSend (ZUINT iCallId, ZUINT iState). Camera is on: iState is EN_MTC_CALL_TRANSMISSION_NORMAL Camera is off: iState is EN_MTC_CALL_TRANSMISSION_CAMOFF When the camera status changes, the peer terminal will receive the MtcCallVideoReceiveStatusChangedNotification event notification. In this notification, the MtcCallVideoStatusKey value indicates the following situations:
/**< @brief Transmission is normal, 'nrml'. */
/**< @brief Transmission is paused for camera is off, 'coff'. */
/**< @brief Transmission is paused, 'pasd'. */
/**< @brief Transmission is pause for QoS reason, 'pqos'. */

About Call Function Integration

1. Is the iCallID used in the SDK's Mtc_Call interface the same as the callID in the call status notification received by the server?

No, it is different. The terminal can call the Mtc_CallGetServerCallId interface to get the server's callId. In addition, the iCallId in all SDK interfaces and event notifications indicates the local resources relevant to the call. The callId in call status notifications indicates the server resources relevant to the call. These two resource lifecycles are different and cannot be generalized.

2. During a call, if one party's app encounters an exception and quits, how is this event processed?

At present, the SDK's default processing method is to wait for 30 seconds. If it does not receive media data from the peer within this time, it will voluntarily hang up. This process is triggered when the peer's app quits exceptionally or the peer is disconnected for too long.

3. How long does a call wait to be answered?

60 seconds for the present. After the call times out, the server will voluntarily hang up.

4. When calling with Android, why does the following prompt appear?

This prompt generally indicates that the camera could not be turned on. In this case, check that the system settings allow the client to use the camera. Or else, check that the settings in a third-party permission control app allow the client to use the camera.

5. What is the difference between Mtc_CallGetPeerName and Mtc_CallGetPeerDisplayName?

Mtc_CallGetPeerName obtains the peer's login ID.
Mtc_CallGetPeerDisplayName first obtains the peer's nickname. If the peer has no nickname, it uses the peer's login ID. The peer's nickname is the second parameter (displayName) of the MtcCallDelegateCall API called by the peer.


6. User A calls user B while user B is disconnected, so user A hangs up. When user B restores connected, user B's call interface pops up and immediately closes. Why does this happen? How can I avoid this situation?

This occurs because user B receives the establish call message and end call message in quick succession after user B restores connected.
When A calls B, an establish call message is sent to the server. When A hangs up, an end call message is sent, but it does not cancel the previous message (the server does not have a function to allow this). These messages are cached for 60 seconds on the server. If B's network connection is restored while these messages are still in the cache, B will receive the cached messages. If B's network connection is restored after the caching time expires, the messages will have been deleted from the cache and B will not receive them. In this case, the call interface will not pop up and then immediately close. One way to avoid this situation is to wait for a time (for example, 0.5 seconds) after receiving the establish call message before displaying the call interface. Therefore, if the end call message is received right away, the call interface will not be displayed.

7. When Xcode is used for code debugging and the following exception occurs, why does Xcode continue running?

The above exception occurs internally and, upon reconnection, the corresponding object has been released. This is an internally thrown exception, but not a problem. It can only be caught by Xcode during debugging. You can deselect the 'All Exceptions' option to avoid this situation. Simply remove the All Exceptions part in the image below.

8. What music file is played while the caller waits for the peer to pick up. Can it be modified? Can I just replace the file name to change the music?

Yes, you can change the music by replacing the RingBack.wav file. Generally, ringback music files use 8kHz sampling and the PCM format.