Clients

The Client SDK

LiveSwitch Cloud is available for client-side development on almost any modern platform. Download the LiveSwitch Client package for the platform of your choice and open the SDK archive. In the archive, you will find both examples and libraries to get you started with your app development. The Examples folder contains source code for demos that you can use as a starting point to build your own apps, and the Libraries folder contains compiled binaries for the platform to include in your apps.

Building an Example

In the Examples folder, the Chat example demonstrates the core features of LiveSwitch, including how to switch between peer-to-peer, SFU and MCU modes. It also demonstrates how to perform token-based authentication, and how to send and display a chat message. To build the example, load the project in an appropriate IDE. For C#, use Visual Studio; for Java/Android use either IntelliJ or Android Studio; and for iOS/macOS, use Xcode.

Note that when you are running the Xamarin iOS example, you should make sure that the path of the example does not have any spaces. If you try to run this example from a path with spaces, the example will not build.

Once the project has opened up in your favourite IDE, there are just a few items to modify in order to connect the app to your LiveSwitch Cloud account - the Gateway URL, Application ID, and Shared Secret. The Gateway URL is https://cloud.liveswitch.io and the Application ID and Shared Secret can be found by adding or editing your applications in the LiveSwitch Console. For more detailed instructions, click on the platform you would like to start developing on in the left navigation panel.

Client Requirements

Minimum supported version (OS, framework, browser, etc) is affected by the vendor support policy. Where a vendor deprecates support for a particular product version we will do our best to maintain support, but we cannot guarantee that these versions will be fully functional and no further performance optimizations will be performed.

Extended Support

For support beyond the scope of the platforms, frameworks, or browsers detailed here please contact sales@frozenmountain.com.

Supported Platforms and Features

We know how important it is that our software works in as many places as possible to support as many customers as possible with as many use cases as possible.

That said, not all platforms offer the foundation needed to ensure a great real-time experience, and so some features may be limited or unavailable for technical or legal reasons. The following tables detail feature support per platform, and platform version.

Cocoa

Language support: Objective-C and Swift

Platform OS iOS macOS tvOS
OS Version Latest 10.12.6+ Latest
Architectures arm64 x64 x64 arm64 x64
Media Flow sendrecv sendrecv sendrecv sendrecv sendrecv
Audio Codecs PCMU
  yes

PcmuEncoder

PcmuDecoder

  yes

PcmuEncoder

PcmuDecoder

  yes

PcmuEncoder

PcmuDecoder

  yes

PcmuEncoder

PcmuDecoder

  yes

PcmuEncoder

PcmuDecoder

PCMA
  yes

PcmaEncoder

PcmaDecoder

  yes

PcmaEncoder

PcmaDecoder

  yes

PcmaEncoder

PcmaDecoder

  yes

PcmaEncoder

PcmaDecoder

  yes

PcmaEncoder

PcmaDecoder

G.722
  yes

G722Encoder

G722Decoder

  yes

G722Encoder

G722Decoder

  yes

G722Encoder

G722Decoder

  yes

G722Encoder

G722Decoder

  yes

G722Encoder

G722Decoder

Opus
  yes

OpusEncoder

OpusDecoder

Uses libopus.

  yes

OpusEncoder

OpusDecoder

Uses libopus.

  yes

OpusEncoder

OpusDecoder

Uses libopus.

  yes

OpusEncoder

OpusDecoder

Uses libopus.

  yes

OpusEncoder

OpusDecoder

Uses libopus.

DTMF sendrecv sendrecv sendrecv sendrecv sendrecv
Video Codecs VP8
  yes

Vp8Encoder

Vp8Decoder

Uses libvpx.

  yes

Vp8Encoder

Vp8Decoder

Uses libvpx.

  yes

Vp8Encoder

Vp8Decoder

Uses libvpx.

  yes

Vp8Encoder

Vp8Decoder

Uses libvpx.

  yes

Vp8Encoder

Vp8Decoder

Uses libvpx.

VP9
  yes

Vp9Encoder

Vp9Decoder

Uses libvpx.

  yes

Vp9Encoder

Vp9Decoder

Uses libvpx.

  yes

Vp9Encoder

Vp9Decoder

Uses libvpx.

  yes

Vp9Encoder

Vp9Decoder

Uses libvpx.

  yes

Vp9Encoder

Vp9Decoder

Uses libvpx.

H.264

-

-

-

-

-

Media Capture Microphone
  yes

CocoaAudioUnitSource

Uses AudioUnit.

  yes

CocoaAudioUnitSource

Uses AudioUnit.

  yes

CocoaAudioUnitSource

Uses AudioUnit.

  yes

CocoaAudioUnitSource

Uses AudioUnit.

  yes

CocoaAudioUnitSource

Uses AudioUnit.

Camera
  yes

CocoaAVCaptureSource

Uses AVCaptureSession.

  yes

CocoaAVCaptureSource

Uses AVCaptureSession.

  yes

CocoaAVCaptureSource

Uses AVCaptureSession.

- -
Screen
  yes

CocoaScreenSource

Uses UIView.

  yes

CocoaScreenSource

Uses UIView.

  yes

CocoaScreenSource

Uses Quartz Display Services.

  yes

CocoaScreenSource

Uses UIView.

  yes

CocoaScreenSource

Uses UIView.

File
  yes

MatroskaAudioSource

MatroskaVideoSource

  yes

MatroskaAudioSource

MatroskaVideoSource

  yes

MatroskaAudioSource

MatroskaVideoSource

  yes

MatroskaAudioSource

MatroskaVideoSource

  yes

MatroskaAudioSource

MatroskaVideoSource

Media Conversion Audio
  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

Video
  yes

YuvImageConverter

Uses libyuv.

  yes

YuvImageConverter

Uses libyuv.

  yes

YuvImageConverter

Uses libyuv.

  yes

YuvImageConverter

Uses libyuv.

  yes

YuvImageConverter

Uses libyuv.

Media Playback Speakers
  yes

CocoaAudioUnitSink

Uses AudioUnit.

  yes

CocoaAudioUnitSink

Uses AudioUnit.

  yes

CocoaAudioUnitSink

Uses AudioUnit.

  yes

CocoaAudioUnitSink

Uses AudioUnit.

  yes

CocoaAudioUnitSink

Uses AudioUnit.

Display
  yes

CocoaOpenGLSink

Uses GLKView.

CocoaImageViewSink

Uses UIImageView.

  yes

CocoaOpenGLSink

Uses GLKView.

CocoaImageViewSink

Uses UIImageView.

  yes

CocoaImageViewSink

Uses NSImageView.

  yes

CocoaOpenGLSink

Uses GLKView.

CocoaImageViewSink

Uses UIImageView.

  yes

CocoaOpenGLSink

Uses GLKView.

CocoaImageViewSink

Uses UIImageView.

File
  yes

MatroskaAudioSink

MatroskaVideoSink

  yes

MatroskaAudioSink

MatroskaVideoSink

  yes

MatroskaAudioSink

MatroskaVideoSink

  yes

MatroskaAudioSink

MatroskaVideoSink

  yes

MatroskaAudioSink

MatroskaVideoSink

Media Processing Echo Cancellation
  yes

CocoaAudioUnitSource

Uses Voice-Processing I/O Unit.

  yes

CocoaAudioUnitSource

Uses Voice-Processing I/O Unit.

  yes

CocoaAudioUnitSource

Uses Voice-Processing I/O Unit.

  yes

CocoaAudioUnitSource

Uses Voice-Processing I/O Unit.

  yes

CocoaAudioUnitSource

Uses Voice-Processing I/O Unit.

Lip Sync
  yes

CocoaAudioUnitSource

Provides system timestamps.

  yes

CocoaAudioUnitSource

Provides system timestamps.

  yes

CocoaAudioUnitSource

Provides system timestamps.

  yes

CocoaAudioUnitSource

Provides system timestamps.

  yes

CocoaAudioUnitSource

Provides system timestamps.

Logging Text
  yes

NSLogProvider

Uses NSLog.

TextLogProvider

Uses NSMutableString.

  yes

NSLogProvider

Uses NSLog.

TextLogProvider

Uses NSMutableString.

  yes

NSLogProvider

Uses NSLog.

TextLogProvider

Uses NSMutableString.

  yes

NSLogProvider

Uses NSLog.

TextLogProvider

Uses NSMutableString.

  yes

NSLogProvider

Uses NSLog.

TextLogProvider

Uses NSMutableString.

GUI - - - - -

Java

Language support: Java

Platform OS Android Windows macOS Ubuntu
OS Version 8.0+ 10+ 10.12.6+ Latest LTS
JRE Version - 7+ 7+ 7+
Architectures arm32 arm64 x86 x86 x64 x64 x64
Media Flow sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv
Audio Codecs PCMU
  yes

pcmu.Encoder

pcmu.Decoder

  yes

pcmu.Encoder

pcmu.Decoder

  yes

pcmu.Encoder

pcmu.Decoder

  yes

pcmu.Encoder

pcmu.Decoder

  yes

pcmu.Encoder

pcmu.Decoder

  yes

pcmu.Encoder

pcmu.Decoder

  yes

pcmu.Encoder

pcmu.Decoder

PCMA
  yes

pcma.Encoder

pcma.Decoder

  yes

pcma.Encoder

pcma.Decoder

  yes

pcma.Encoder

pcma.Decoder

  yes

pcma.Encoder

pcma.Decoder

  yes

pcma.Encoder

pcma.Decoder

  yes

pcma.Encoder

pcma.Decoder

  yes

pcma.Encoder

pcma.Decoder

G.722
  yes

g722.Encoder

g722.Decoder

  yes

g722.Encoder

g722.Decoder

  yes

g722.Encoder

g722.Decoder

  yes

g722.Encoder

g722.Decoder

  yes

g722.Encoder

g722.Decoder

  yes

g722.Encoder

g722.Decoder

  yes

g722.Encoder

g722.Decoder

Opus
  yes

opus.Encoder

opus.Decoder

Uses libopus.

  yes

opus.Encoder

opus.Decoder

Uses libopus.

  yes

opus.Encoder

opus.Decoder

Uses libopus.

  yes

opus.Encoder

opus.Decoder

Uses libopus.

  yes

opus.Encoder

opus.Decoder

Uses libopus.

  yes

opus.Encoder

opus.Decoder

Uses libopus.

  yes

opus.Encoder

opus.Decoder

Uses libopus.

DTMF sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv
Video Codecs VP8
  yes

vp8.Encoder

vp8.Decoder

Uses libvpx.

  yes

vp8.Encoder

vp8.Decoder

Uses libvpx.

  yes

vp8.Encoder

vp8.Decoder

Uses libvpx.

  yes

vp8.Encoder

vp8.Decoder

Uses libvpx.

  yes

vp8.Encoder

vp8.Decoder

Uses libvpx.

  yes

vp8.Encoder

vp8.Decoder

Uses libvpx.

  yes

vp8.Encoder

vp8.Decoder

Uses libvpx.

VP9
  yes

vp9.Encoder

vp9.Decoder

Uses libvpx.

  yes

vp9.Encoder

vp9.Decoder

Uses libvpx.

  yes

vp9.Encoder

vp9.Decoder

Uses libvpx.

  yes

vp9.Encoder

vp9.Decoder

Uses libvpx.

  yes

vp9.Encoder

vp9.Decoder

Uses libvpx.

  yes

vp9.Encoder

vp9.Decoder

Uses libvpx.

  yes

vp9.Encoder

vp9.Decoder

Uses libvpx.

H.264
  yes

openh264.Encoder

openh264.Decoder

Uses libopenh264.

- -
  yes

openh264.Encoder

openh264.Decoder

Uses libopenh264.

  yes

openh264.Encoder

openh264.Decoder

Uses libopenh264.

  yes

openh264.Encoder

openh264.Decoder

Uses libopenh264.

  yes

openh264.Encoder

openh264.Decoder

Uses libopenh264.

Media Capture Microphone
  yes

android.AudioRecordSource

Uses AudioRecord.

  yes

android.AudioRecordSource

Uses AudioRecord.

  yes

android.AudioRecordSource

Uses AudioRecord.

  yes

java.SoundSource

Uses TargetDataLine.

  yes

java.SoundSource

Uses TargetDataLine.

  yes

java.SoundSource

Uses TargetDataLine.

  yes

java.SoundSource

Uses TargetDataLine.

Camera
  yes

android.CameraSource

Uses Camera.

  yes

android.CameraSource

Uses Camera.

  yes

android.CameraSource

Uses Camera.

  yes

java.sarxos.VideoSource

Uses Webcam Capture.

  yes

java.sarxos.VideoSource

Uses Webcam Capture.

  yes

java.sarxos.VideoSource

Uses Webcam Capture.

  yes

java.sarxos.VideoSource

Uses Webcam Capture.

Screen
  yes

android.MediaProjectionSource

Uses MediaProjection.

android.ViewSource

Uses View.

  yes

android.MediaProjectionSource

Uses MediaProjection.

android.ViewSource

Uses View.

  yes

android.MediaProjectionSource

Uses MediaProjection.

android.ViewSource

Uses View.

  yes

java.ScreenSource

Uses Robot.

  yes

java.ScreenSource

Uses Robot.

  yes

java.ScreenSource

Uses Robot.

  yes

java.ScreenSource

Uses Robot.

File
  yes

matroska.AudioSource

matroska.VideoSource

  yes

matroska.AudioSource

matroska.VideoSource

  yes

matroska.AudioSource

matroska.VideoSource

  yes

matroska.AudioSource

matroska.VideoSource

  yes

matroska.AudioSource

matroska.VideoSource

  yes

matroska.AudioSource

matroska.VideoSource

  yes

matroska.AudioSource

matroska.VideoSource

Media Conversion Audio
  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

Video
  yes

YuvImageConverter

Uses libyuv.

  yes

YuvImageConverter

Uses libyuv.

  yes

SoundConverter

  yes

YuvImageConverter

Uses libyuv.

  yes

YuvImageConverter

Uses libyuv.

  yes

YuvImageConverter

Uses libyuv.

  yes

YuvImageConverter

Uses libyuv.

Media Playback Speakers
  yes

android.AudioTrackSink

Uses AudioTrack.

  yes

android.AudioTrackSink

Uses AudioTrack.

  yes

YuvImageConverter

Uses libyuv.

  yes

java.SoundSink

Uses SourceDataLine.

  yes

java.SoundSink

Uses SourceDataLine.

  yes

java.SoundSink

Uses SourceDataLine.

  yes

java.SoundSink

Uses SourceDataLine.

Display
  yes

android.OpenGLSink

Uses GLSurfaceView.

android.ImageViewSink

Uses ImageView.

  yes

android.OpenGLSink

Uses GLSurfaceView.

android.ImageViewSink

Uses ImageView.

  yes

android.OpenGLSink

Uses GLSurfaceView.

android.ImageViewSink

Uses ImageView.

  yes

java.VideoComponentSink

Uses JComponent.

java.ImageViewSink

Uses ImageView.

  yes

java.VideoComponentSink

Uses JComponent.

java.ImageViewSink

Uses ImageView.

  yes

java.VideoComponentSink

Uses JComponent.

java.ImageViewSink

Uses ImageView.

  yes

java.VideoComponentSink

Uses JComponent.

java.ImageViewSink

Uses ImageView.

File
  yes

matroska.AudioSink

matroska.VideoSink

  yes

matroska.AudioSink

matroska.VideoSink

  yes

matroska.AudioSink

matroska.VideoSink

  yes

matroska.AudioSink

matroska.VideoSink

  yes

matroska.AudioSink

matroska.VideoSink

  yes

matroska.AudioSink

matroska.VideoSink

  yes

matroska.AudioSink

matroska.VideoSink

Media Processing Echo Cancellation
  yes

AecProcessor

Uses libaudioprocessing.

  yes

AecProcessor

Uses libaudioprocessing.

  yes

AecProcessor

Uses libaudioprocessing.

  yes

AecProcessor

Uses libaudioprocessing.

  yes

AecProcessor

Uses libaudioprocessing.

  yes

AecProcessor

Uses libaudioprocessing.

  yes

AecProcessor

Uses libaudioprocessing.

Lip Sync
  yes

android.AudioRecordSource

Provides system timestamps.

  yes

android.AudioRecordSource

Provides system timestamps.

  yes

android.AudioRecordSource

Provides system timestamps.

- - - -
Logging Text
  yes

android.LogProvider

Uses Log.

ConsoleLogProvider

Uses System.out.

TextLogProvider

Uses StringBuilder.

  yes

android.LogProvider

Uses Log.

ConsoleLogProvider

Uses System.out.

TextLogProvider

Uses StringBuilder.

  yes

android.LogProvider

Uses Log.

ConsoleLogProvider

Uses System.out.

TextLogProvider

Uses StringBuilder.

  yes

java.LogProvider

Uses Logger.

ConsoleLogProvider

Uses System.out.

TextLogProvider

Uses StringBuilder.

  yes

java.LogProvider

Uses Logger.

ConsoleLogProvider

Uses System.out.

TextLogProvider

Uses StringBuilder.

  yes

java.LogProvider

Uses Logger.

ConsoleLogProvider

Uses System.out.

TextLogProvider

Uses StringBuilder.

  yes

java.LogProvider

Uses Logger.

ConsoleLogProvider

Uses System.out.

TextLogProvider

Uses StringBuilder.

GUI
  yes

android.TextViewLogProvider

Uses TextView.

  yes

android.TextViewLogProvider

Uses TextView.

  yes

android.TextViewLogProvider

Uses TextView.

- - - -

JavaScript

Language support: JavaScript and TypeScript

Platform OS Windows macOS Android iOS
OS Version 10+ 10.12.6+ 8.0+ Latest
Browser Chrome Firefox Edge IE Chrome Firefox Edge Safari Chrome Firefox Edge Chrome Firefox Edge Safari
Browser Version latest latest latest 11 latest latest latest latest latest latest latest latest latest latest latest
Plugin - - - ActiveX - - - - - - - - - - -
Media Flow sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv recvonly recvonly recvonly sendrecv
Audio Codecs PCMU yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
PCMA yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
G.722 yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
Opus yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
DTMF sendonly sendonly sendonly sendonly sendonly sendonly sendonly - sendonly sendonly sendonly - - - -
Video Codecs VP8 yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
VP9 yes yes yes yes yes yes yes - yes yes yes - - - -
H.264 yes yes yes yes yes yes yes yes - - - yes yes yes yes
Media Capture Microphone yes yes yes yes yes yes yes yes yes yes yes - - - yes
Camera yes yes yes yes yes yes yes yes yes yes yes - - - yes
Screen yes yes yes yes yes yes yes yes - - - - - - -
Screen w/ System Audio
  yes

Entire Screen: yes

Application: no

Tab: yes

-
  yes

Entire Screen: yes

Application: no

Tab: yes

-
  yes

Entire Screen: no

Application: no

Tab: yes

-
  yes

Entire Screen: no

Application: no

Tab: yes

-

-

- - - - - -
File - - - - - - - - - - - - - - -
Media Conversion Audio - - - - - - - - - - - - - - -
Video - - - - - - - - - - - - - - -
Media Playback Speakers yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
Display yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
File - - - - - - - - - - - - - - -
Media Processing Echo Cancellation yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes
Lip Sync yes yes yes - yes yes yes yes yes yes yes yes yes yes yes
Logging Text
  yes

ConsoleLogProvider

Uses console.

TextLogProvider

Uses string.

  yes

ConsoleLogProvider

Uses console.

TextLogProvider

Uses string.

  yes

ConsoleLogProvider

Uses console.

TextLogProvider

Uses string.

  yes

ConsoleLogProvider

Uses console.

TextLogProvider

Uses string.

  yes

ConsoleLogProvider

Uses console.

TextLogProvider

Uses string.

  yes

ConsoleLogProvider

Uses console.

TextLogProvider

Uses string.

  yes

ConsoleLogProvider

Uses console.

TextLogProvider

Uses string.

  yes

ConsoleLogProvider

Uses console.

TextLogProvider

Uses string.

  yes

ConsoleLogProvider

Uses console.

TextLogProvider

Uses string.

  yes

ConsoleLogProvider

Uses console.

TextLogProvider

Uses string.

  yes

ConsoleLogProvider

Uses console.

TextLogProvider

Uses string.

  yes

ConsoleLogProvider

Uses console.

TextLogProvider

Uses string.

  yes

ConsoleLogProvider

Uses console.

TextLogProvider

Uses string.

  yes

ConsoleLogProvider

Uses console.

TextLogProvider

Uses string.

  yes

ConsoleLogProvider

Uses console.

TextLogProvider

Uses string.

GUI
  yes

DomLogProvider

Uses HTMLElement.

  yes

DomLogProvider

Uses HTMLElement.

  yes

DomLogProvider

Uses HTMLElement.

  yes

DomLogProvider

Uses HTMLElement.

  yes

DomLogProvider

Uses HTMLElement.

  yes

DomLogProvider

Uses HTMLElement.

  yes

DomLogProvider

Uses HTMLElement.

  yes

DomLogProvider

Uses HTMLElement.

  yes

DomLogProvider

Uses HTMLElement.

  yes

DomLogProvider

Uses HTMLElement.

  yes

DomLogProvider

Uses HTMLElement.

  yes

DomLogProvider

Uses HTMLElement.

  yes

DomLogProvider

Uses HTMLElement.

  yes

DomLogProvider

Uses HTMLElement.

  yes

DomLogProvider

Uses HTMLElement.

.NET

Supported languages: C#

Platform OS Windows macOS Ubuntu iOS Android Hololens
OS Version 10+ 10.12.6+ Latest LTS Latest 8.0+ 10+
Runtime Framework Standard UWP Unity Standard Unity Xamarin Standard Unity Xamarin Unity Xamarin Unity UWP
Runtime Version 3.5+ 2.0+ latest latest 2.0+ latest latest 2.0+ latest latest latest latest latest latest
Architecture x86 x64 x86 x64 x86 x64 x86 x64 x64 x64 x64 x64 arm64 x64 arm64 x64 arm32 arm64 x86 arm32 arm64 x86 x86 x86
Media Flow sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv

sendonly/recvonly

sendonly/recvonly
Audio Codecs PCMU
  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

  yes

Pcmu.Encoder

Pcmu.Decoder

PCMA
  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

  yes

Pcma.Encoder

Pcma.Decoder

G.722
  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

  yes

G722.Encoder

G722.Decoder

Opus
  yes

Opus.Encoder

Opus.Decoder

Uses libopus.

  yes

Opus.Encoder

Opus.Decoder

Uses libopus.

  yes

Opus.Encoder

Opus.Decoder

Uses libopus.

  yes

Opus.Encoder

Opus.Decoder

Uses libopus.

  yes

Opus.Encoder

Opus.Decoder

Uses libopus.

  yes

Opus.Encoder

Opus.Decoder

Uses libopus.

-

-

  yes

Opus.Encoder

Opus.Decoder

Uses libopus.

-

  yes

Opus.Encoder

Opus.Decoder

Uses libopus.

  yes

Opus.Encoder

Opus.Decoder

Uses libopus.

-

-

  yes

Opus.Encoder

Opus.Decoder

Uses libopus.

  yes

Opus.Encoder

Opus.Decoder

Uses libopus.

-

-

-

  yes

Opus.Encoder

Opus.Decoder

Uses libopus.

  yes

Opus.Encoder

Opus.Decoder

Uses libopus.

  yes

Opus.Encoder

Opus.Decoder

Uses libopus.

  yes

Opus.Encoder

Opus.Decoder

Uses libopus.

  yes

Opus.Encoder

Opus.Decoder

Uses libopus.

DTMF sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv sendrecv
Video Codecs VP8
  yes

Vp8.Encoder

Vp8.Decoder

Uses libvpx.

  yes

Vp8.Encoder

Vp8.Decoder

Uses libvpx.

  yes

Vp8.Encoder

Vp8.Decoder

Uses libvpx.

  yes

Vp8.Encoder

Vp8.Decoder

Uses libvpx.

  yes

Vp8.Encoder

Vp8.Decoder

Uses libvpx.

  yes

Vp8.Encoder

Vp8.Decoder

Uses libvpx.

-

-

  yes

Vp8.Encoder

Vp8.Decoder

Uses libvpx.

-

  yes

Vp8.Encoder

Vp8.Decoder

Uses libvpx.

  yes

Vp8.Encoder

Vp8.Decoder

Uses libvpx.

-

-

  yes

Vp8.Encoder

Vp8.Decoder

Uses libvpx.

  yes

Vp8.Encoder

Vp8.Decoder

Uses libvpx.

-

-

-

  yes

Vp8.Encoder

Vp8.Decoder

Uses libvpx.

  yes

Vp8.Encoder

Vp8.Decoder

Uses libvpx.

  yes

Vp8.Encoder

Vp8.Decoder

Uses libvpx.

  yes

Vp8.Encoder

Vp8.Decoder

Uses libvpx.

  yes

Vp8.Encoder

Vp8.Decoder

Uses libvpx.

VP9
  yes

Vp9.Encoder

Vp9.Decoder

Uses libvpx.

  yes

Vp9.Encoder

Vp9.Decoder

Uses libvpx.

  yes

Vp9.Encoder

Vp9.Decoder

Uses libvpx.

  yes

Vp9.Encoder

Vp9.Decoder

Uses libvpx.

  yes

Vp9.Encoder

Vp9.Decoder

Uses libvpx.

  yes

Vp9.Encoder

Vp9.Decoder

Uses libvpx.

-

-

  yes

Vp9.Encoder

Vp9.Decoder

Uses libvpx.

-

  yes

Vp9.Encoder

Vp9.Decoder

Uses libvpx.

  yes

Vp9.Encoder

Vp9.Decoder

Uses libvpx.

-

-

  yes

Vp9.Encoder

Vp9.Decoder

Uses libvpx.

  yes

Vp9.Encoder

Vp9.Decoder

Uses libvpx.

-

-

-

  yes

Vp9.Encoder

Vp9.Decoder

Uses libvpx.

  yes

Vp9.Encoder

Vp9.Decoder

Uses libvpx.

  yes

Vp9.Encoder

Vp9.Decoder

Uses libvpx.

  yes

Vp9.Encoder

Vp9.Decoder

Uses libvpx.

  yes

Vp9.Encoder

Vp9.Decoder

Uses libvpx.

H.264
  yes

OpenH264.Encoder

OpenH264.Decoder

Uses libopenh264.

  yes

OpenH264.Encoder

OpenH264.Decoder

Uses libopenh264.

  yes

OpenH264.Encoder

OpenH264.Decoder

Uses libopenh264.

  yes

OpenH264.Encoder

OpenH264.Decoder

Uses libopenh264.

-

-

-

-

-

-

-

  yes

OpenH264.Encoder

OpenH264.Decoder

Uses libopenh264.

-

-

-

-

-

-

-

  yes

OpenH264.Encoder

OpenH264.Decoder

Uses libopenh264.

-

-

-

-

Media Capture Microphone
  yes

Dmo.VoiceCaptureSource

Uses Voice Capture DMO.

NAudio.Source

Uses WASAPI.

  yes

Dmo.VoiceCaptureSource

Uses Voice Capture DMO.

NAudio.Source

Uses WASAPI.

- -
  yes

Uwp.MediaCaptureAudioSource

Uses MediaCapture.

NAudio.Source

Uses WASAPI.

Uwp.AudioGraphSource

Uses AudioGraph.

  yes

Uwp.MediaCaptureAudioSource

Uses MediaCapture.

NAudio.Source

Uses WASAPI.

Uwp.AudioGraphSource

Uses AudioGraph.

- - - -
  yes

Cocoa.AudioUnitSource

Uses AudioUnit.

- - -
  yes

Cocoa.AudioUnitSource

Uses AudioUnit.

  yes

Cocoa.AudioUnitSource

Uses AudioUnit.

- - -
  yes

Android.AudioRecordSource

Uses AudioRecord.

  yes

Android.AudioRecordSource

Uses AudioRecord.

  yes

Android.AudioRecordSource

Uses AudioRecord.

-
  yes

Uwp.MediaCaptureAudioSource

Uses MediaCapture.

NAudio.Source

Uses WASAPI.

Uwp.AudioGraphSource

Uses AudioGraph.

Camera
  yes

AForge.CameraSource

Uses DirectShow.

  yes

AForge.CameraSource

Uses DirectShow.

- -
  yes

Uwp.MediaCaptureVideoSource

Uses MediaCapture.

  yes

Uwp.MediaCaptureVideoSource

Uses MediaCapture.

- - - -
  yes

Cocoa.AVCaptureSource

Uses AVCaptureSession.

- - -
  yes

Cocoa.AVCaptureSource

Uses AVCaptureSession.

  yes

Cocoa.AVCaptureSource

Uses AVCaptureSession.

- - -
  yes

Android.CameraSource

Uses Camera.

  yes

Android.CameraSource

Uses Camera.

  yes

Android.CameraSource

Uses Camera.

-
  yes

Uwp.MediaCaptureVideoSource

Uses MediaCapture.

Screen
  yes

WinForms.ScreenSource

Uses Graphics or BitBlt.

AForge.ScreenSource

Uses Graphics.

  yes

WinForms.ScreenSource

Uses Graphics or BitBlt.

AForge.ScreenSource

Uses Graphics.

- - - - - - - -
  yes

Cocoa.ScreenSource

Uses Quartz Display Services.

- - -
  yes

Cocoa.ScreenSource

Uses UIView.

  yes

Cocoa.ScreenSource

Uses UIView.

- - -
  yes

Android.MediaProjectionSource

Uses MediaProjection.

Android.ViewSource

Uses View.

  yes

Android.MediaProjectionSource

Uses MediaProjection.

Android.ViewSource

Uses View.

  yes

Android.MediaProjectionSource

Uses MediaProjection.

Android.ViewSource

Uses View.

- -
File
  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

  yes

Matroska.AudioSource

Matroska.VideoSource

Media Conversion Audio
  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

  yes

SoundConverter

Video
  yes

Yuv.ImageConverter

Uses libyuv.

  yes

Yuv.ImageConverter

Uses libyuv.

  yes

Yuv.ImageConverter

Uses libyuv.

  yes

Yuv.ImageConverter

Uses libyuv.

  yes

Yuv.ImageConverter

Uses libyuv.

  yes

Yuv.ImageConverter

Uses libyuv.

-

-

  yes

Yuv.ImageConverter

Uses libyuv.

-

  yes

Yuv.ImageConverter

Uses libyuv.

  yes

Yuv.ImageConverter

Uses libyuv.

-

-

  yes

Yuv.ImageConverter

Uses libyuv.

  yes

Yuv.ImageConverter

Uses libyuv.

-

-

-

  yes

Yuv.ImageConverter

Uses libyuv.

  yes

Yuv.ImageConverter

Uses libyuv.

  yes

Yuv.ImageConverter

Uses libyuv.

  yes

Yuv.ImageConverter

Uses libyuv.

  yes

Yuv.ImageConverter

Uses libyuv.

Media Playback Speakers
  yes

NAudio.Sink

Uses WASAPI.

  yes

NAudio.Sink

Uses WASAPI.

- -
  yes

NAudio.Sink

Uses WASAPI.

Uwp.AudioGraphSink

Uses AudioGraph.

  yes

NAudio.Sink

Uses WASAPI.

Uwp.AudioGraphSink

Uses AudioGraph.

- - - -
  yes

Cocoa.AudioUnitSink

Uses AudioUnit.

- - -
  yes

Cocoa.AudioUnitSink

Uses AudioUnit.

  yes

Cocoa.AudioUnitSink

Uses AudioUnit.

- - -
  yes

Android.AudioTrackSink

Uses AudioTrack.

  yes

Android.AudioTrackSink

Uses AudioTrack.

  yes

Android.AudioTrackSink

Uses AudioTrack.

-
  yes

NAudio.Sink

Uses WASAPI.

Uwp.AudioGraphSink

Uses AudioGraph.

Display
  yes

WinForms.PictureBoxSink

Uses PictureBox.

Wpf.ImageSink

Uses Image.

  yes

WinForms.PictureBoxSink

Uses PictureBox.

Wpf.ImageSink

Uses Image.

- -
  yes

Uwp.Win2D.Sink

Uses Direct2D.

Uwp.ImageSink

Uses Image.

  yes

Uwp.Win2D.Sink

Uses Direct2D.

Uwp.ImageSink

Uses Image.

- - - -
  yes

Cocoa.ImageViewSink

Uses NSImageView.

- - -
  yes

Cocoa.OpenGLSink

Uses GLKView.

Cocoa.ImageViewSink

Uses UIImageView.

  yes

Cocoa.OpenGLSink

Uses GLKView.

Cocoa.ImageViewSink

Uses UIImageView.

- - -
  yes

Android.OpenGLSink

Uses GLSurfaceView.

Android.ImageViewSink

Uses ImageView.

  yes

Android.OpenGLSink

Uses GLSurfaceView.

Android.ImageViewSink

Uses ImageView.

  yes

Android.OpenGLSink

Uses GLSurfaceView.

Android.ImageViewSink

Uses ImageView.

-
  yes

Uwp.Win2D.Sink

Uses Direct2D.

Uwp.ImageSink

Uses Image.

File
  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

  yes

Matroska.AudioSink

Matroska.VideoSink

Media Processing Echo Cancellation
  yes


Dmo.VoiceCaptureSource


Uses Voice Capture DMO.


AecProcessor

Uses libaudioprocessing.

  yes

AecProcessor

Uses libaudioprocessing.

- -
  yes

AecProcessor

Uses libaudioprocessing.

  yes

AecProcessor

Uses libaudioprocessing.

- - - -
  yes

Cocoa.AudioUnitSource

Uses Voice-Processing I/O Unit.

- - -
  yes

Cocoa.AudioUnitSource

Uses Voice-Processing I/O Unit.

  yes

Cocoa.AudioUnitSource

Uses Voice-Processing I/O Unit.

- - -
  yes

AecProcessor

Uses libaudioprocessing.

  yes

AecProcessor

Uses libaudioprocessing.

  yes

AecProcessor

Uses libaudioprocessing.

-
  yes

AecProcessor

Uses libaudioprocessing.

Lip Sync
  yes

NAudio.Source

Provides system timestamps.

  yes

NAudio.Source

Provides system timestamps.

- -
  yes

Uwp.MediaCaptureAudioSource

Provides system timestamps.

NAudio.Source

Provides system timestamps.

  yes

Uwp.MediaCaptureAudioSource

Provides system timestamps.

NAudio.Source

Provides system timestamps.

- - - -
  yes

Cocoa.AudioUnitSource

Provides system timestamps.

- - -
  yes

Cocoa.AudioUnitSource

Provides system timestamps.

  yes

Cocoa.AudioUnitSource

Provides system timestamps.

- - - - - - -
  yes

Uwp.MediaCaptureAudioSource

Provides system timestamps.

NAudio.Source

Provides system timestamps.

Logging Text
  yes

ConsoleLogProvider

Uses Console.

TraceLogProvider

Uses Trace.

TextLogProvider

Uses StringBuilder.

  yes

ConsoleLogProvider

Uses Console.

TraceLogProvider

Uses Trace.

TextLogProvider

Uses StringBuilder.

  yes

ConsoleLogProvider

Uses Console.

TraceLogProvider

Uses Trace.

TextLogProvider

Uses StringBuilder.

  yes

ConsoleLogProvider

Uses Console.

TraceLogProvider

Uses Trace.

TextLogProvider

Uses StringBuilder.

  yes

DebugLogProvider

Uses Debug.

TextLogProvider

Uses StringBuilder.

  yes

DebugLogProvider

Uses Debug.

TextLogProvider

Uses StringBuilder.

  yes

DebugLogProvider

Uses Debug.

TextLogProvider

Uses StringBuilder.

  yes

DebugLogProvider

Uses Debug.

TextLogProvider

Uses StringBuilder.

  yes

ConsoleLogProvider

Uses Console.

TraceLogProvider

Uses Trace.

TextLogProvider

Uses StringBuilder.

  yes

DebugLogProvider

Uses Debug.

TextLogProvider

Uses StringBuilder.

  yes

NSLogProvider

Uses Console.

TraceLogProvider

Uses Trace.

TextLogProvider

Uses StringBuilder.

  yes

ConsoleLogProvider

Uses Console.

TraceLogProvider

Uses Trace.

TextLogProvider

Uses StringBuilder.

  yes

DebugLogProvider

Uses Debug.

TextLogProvider

Uses StringBuilder.

  yes

DebugLogProvider

Uses Debug.

TextLogProvider

Uses StringBuilder.

  yes

NSLogProvider

Uses Console.

TraceLogProvider

Uses Trace.

TextLogProvider

Uses StringBuilder.

  yes

NSLogProvider

Uses Console.

TraceLogProvider

Uses Trace.

TextLogProvider

Uses StringBuilder.

  yes

DebugLogProvider

Uses Debug.

TextLogProvider

Uses StringBuilder.

  yes

DebugLogProvider

Uses Debug.

TextLogProvider

Uses StringBuilder.

  yes

DebugLogProvider

Uses Debug.

TextLogProvider

Uses StringBuilder.

  yes

Android.LogProvider

Uses Log.

DebugLogProvider

Uses Debug.

TraceLogProvider

Uses Trace.

TextLogProvider

Uses StringBuilder.

  yes

Android.LogProvider

Uses Log.

DebugLogProvider

Uses Debug.

TraceLogProvider

Uses Trace.

TextLogProvider

Uses StringBuilder.

  yes

Android.LogProvider

Uses Log.

DebugLogProvider

Uses Debug.

TraceLogProvider

Uses Trace.

TextLogProvider

Uses StringBuilder.

  yes

DebugLogProvider

Uses Debug.

TextLogProvider

Uses StringBuilder.

  yes

DebugLogProvider

Uses Debug.

TextLogProvider

Uses StringBuilder.

GUI - - - -
  yes

TextBlockLogProvider

Uses TextBlock.

  yes

TextBlockLogProvider

Uses TextBlock.

- - - - - - - - - - - - -
  yes

Android.TextViewLogProvider

Uses TextView.

  yes

Android.TextViewLogProvider

Uses TextView.

  yes

Android.TextViewLogProvider

Uses TextView.

-
  yes

TextBlockLogProvider

Uses TextBlock.

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 and Recommended Requirements

Minimum for two-way, or 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 or two-way HD video chat - A8 processor or better:

  • iPhone 6 or newer
  • iPad Air 2 or newer
Video Capture Recommendations

If the chipset is A7, 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 and Recommended Requirements

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

  • Google Nexus 4
  • Samsung Galaxy S3

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

  • Google Nexus 5
  • Samsung Galaxy S4

Recommended for three-way video chat or two-way HD 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 upload 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

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