IceLink 3 Tuning Guide

Depending on the device and network speeds, different media capture and encode settings will result in a better user experience. This guide serves as our best recommendations, and will be updated periodically as new test results emerge.

Platforms

iOS

Minimum for two-way video chat - A5 processor or better:

  • iPhone 4S or newer
  • iPad 2nd generation or newer
  • iPad Air
  • iPad Mini
  • iPod 5th generation or newer

Recommended for two-way video chat - A6 processor or better:

  • iPhone 5 or newer
  • iPad 4th generation or newer
  • iPad Air
  • iPad Mini 2nd generation or newer

Minimum for three-way video chat - A7 processor or better:

  • iPhone 5S or newer
  • iPad Air
  • iPad Mini 2nd generation or newer

Recommended for three-way video chat - A8 processor or better:

  • iPhone 6 or newer
  • iPad Air 2 or newer

Video Capture Recommendations

If the chipset is A5 or A5X, set the video preset to AVCaptureSessionPresetLow.

Otherwise, set the video preset to AVCaptureSessionPreset640x480.

// https://github.com/fahrulazmi/UIDeviceHardware/blob/master/UIDeviceHardware.m

- (NSString *) platform
{
    size_t size;
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
    char *machine = malloc(size);
    sysctlbyname("hw.machine", machine, &size, NULL, 0);
    NSString *platform = [NSString stringWithUTF8String:machine];
    free(machine);
    return platform;
}

- (bool)isA5Chipset
{
    NSString *platform = [self platform];
    return ([platform startsWithValue:@"iPhone4,"] || // iPhone 4S
            [platform startsWithValue:@"iPad2,"] ||   // iPad 2 and Mini
            [platform isEqualToString:@"iPod5,1"]);   // iPod 5
}

- (bool)isA5XChipset
{
    NSString *platform = [self platform];
    return ([platform isEqualToString:@"iPad3,1"] || // iPad 3
            [platform isEqualToString:@"iPad3,2"] ||
            [platform isEqualToString:@"iPad3,3"]);
}

Android

Minimum for two-way video chat - 1GHz single-core or better:

  • Google Nexus S
  • Samsung Galaxy S

Recommended for two-way video chat - 1.4GHz dual-core or better:

  • Google Nexus 4
  • Samsung Galaxy S3

Minimum for three-way video chat - 1.6GHz quad-core or better:

  • Google Nexus 5
  • Samsung Galaxy S4

Recommended for three-way video chat - 2.4GHz quad-core processor or better:

  • Google Nexus 6
  • Samsung Galaxy S5

Video Capture Recommendations

If the CPU core count is 1, set the video width, height, and frame-rate to 320, 240, and 15.

If the CPU core count is 2, set the video width, height, and frame-rate to 320, 240, and 30.

Otherwise, set the video width, height, and frame-rate to 640, 480, and 30.

// http://stackoverflow.com/questions/30119604/how-to-get-the-number-of-cores-of-an-android-device
private int getNumberOfCores() {
    if(Build.VERSION.SDK_INT >= 17) {
        return Runtime.getRuntime().availableProcessors()
    }
    else {
       // Use saurabh64's answer
       return getNumCoresOldPhones();
    }
}

/**
 * Gets the number of cores available in this device, across all processors.
 * Requires: Ability to peruse the filesystem at "/sys/devices/system/cpu"
 * @return The number of cores, or 1 if failed to get result
 */
private int getNumCoresOldPhones() {
    //Private Class to display only CPU devices in the directory listing
    class CpuFilter implements FileFilter {
        @Override
        public boolean accept(File pathname) {
            //Check if filename is "cpu", followed by a single digit number
            if(Pattern.matches("cpu[0-9]+", pathname.getName())) {
                return true;
            }
            return false;
        }
    }

    try {
        //Get directory containing CPU info
        File dir = new File("/sys/devices/system/cpu/");
        //Filter to only list the devices we care about
        File[] files = dir.listFiles(new CpuFilter());
        //Return the number of cores (virtual CPU devices)
        return files.length;
    } catch(Exception e) {
        //Default to return 1 core
        return 1;
    }
}

Desktop

Video Capture Recommendations

If the CPU core count is 1, set the video width, height, and frame-rate to 320, 240, and 15.

If the CPU core count is 2, set the video width, height, and frame-rate to 320, 240, and 30.

Otherwise, set the video width, height, and frame-rate to 640, 480, and 30.

Networks

2G / GPRS

  • Average download speed: 50kbps
  • Average upload speed: 25kbps

A connection is generally not possible.

2G / EDGE

  • Average download speed: 100kbps
  • Average download speed: 50kbps

An audio-only connection may be possible.

  • Recommended Opus encoder bitrate: 32kbps

3G / Basic

  • Average download speed: 200kbps
  • Average upload speed: 100kbps

An audio-only connection should be possible.

  • Recommended Opus encoder bitrate: 32kbps

3G / HSPA

  • Average download speed: 1.5mbps
  • Average upload speed: 0.75mbps

A low-quality audio/video connection should be possible.

  • Recommended Opus encoder bitrate: 32kbps
  • Recommended VP8/H.264 encoder bitrate: 256kbps

3G / HSPA+

  • Average download speed: 4mbps
  • Average upload speed: 1.5mbps

An audio/video connection should be possible.

  • Recommended Opus encoder bitrate: 48kbps
  • Recommended VP8/H.264 encoder bitrate: 384kbps

3G / DC-HSPA+

  • Average download speed: 8mbps
  • Average upload speed: 3mbps

A high-quality audio/video connection should be possible.

  • Recommended Opus encoder bitrate: 48kbps
  • Recommended VP8/H.264 encoder bitrate: 512kbps

4G / LTE

  • Average download speed: 15mbps
  • Average upload speed: 7.5mbps

A high-quality audio/video connection should be possible.

  • Recommended Opus encoder bitrate: 64kbps
  • Recommended VP8/H.264 encoder bitrate: 512kbps

Wrap Up

If we missed something, or if you have a suggestion on a way to improve this guide, please let us know by contacting support@frozenmountain.com or visiting support.frozenmountain.com.

Thank you, and happy coding!