SIGN UP

VIQualityIssueDelegate

Interface to monitor issues that affect call quality during a call.

Methods

call:didDetectCodecMismatch:issueLevel:

- (void)call:(VICall *)call
    didDetectCodecMismatch:(NSString *)codec
                issueLevel:(VIQualityIssueLevel)level

BETA

Invoked if local video is encoded by a codec different from specified in [VICallSettings preferredVideoCodec].

Issue level is VIQualityIssueLevelCritical if video is not sent, VIQualityIssueLevelMajor in case of codec mismatch or VIQualityIssueLevelNone if the issue is not detected.

Possible reasons:

  1. The video is not sent for some reasons. In this case codec will be nil
  2. Different codecs are specified in the call endpoints

Parameters

  • call:

    VICall *

    Call the issue belongs to.

  • codec:

    NSString *

    Codec that is currently used or null if the video is not sent.

  • Issue level.

call:didDetectHighMediaLatency:issueLevel:

- (void)call:(VICall *)call
    didDetectHighMediaLatency:(NSTimeInterval)latency
                   issueLevel:(VIQualityIssueLevel)level

BETA

Invoked if network-based media latency is detected in the call. Network-based media latency is calculated based on rtt (round trip time) and jitter buffer. Latency refers to the time it takes a voice/video packet to reach its destination. Sufficient latency causes call participants to speak over the top of each other.

Issue level may vary during the call.

Possible reasons:

  1. Network congestion/delays
  2. Lack of bandwidth

Parameters

  • call:

    VICall *

    Call the issue belongs to.

  • latency:

    NSTimeInterval

    Network-based latency measured in milliseconds at the moment the issue triggered.

  • Issue level.

call:didDetectIceDisconnected:

- (void)call:(VICall *)call
    didDetectIceDisconnected:(VIQualityIssueLevel)level

BETA

Invoked if ICE connection is switched to the "disconnected" state during the call.

Issue level is always VIQualityIssueLevelCritical, because there is no media in the call until the issue is resolved.

Event may be triggered intermittently and be resolved just as spontaneously on less reliable networks, or during temporary disconnections.

Possible reasons:

  1. Network issues

Parameters

call:didDetectLocalVideoDegradation:targetSize:issueLevel:

- (void)call:(VICall *)call
    didDetectLocalVideoDegradation:(CGSize)actualSize
                        targetSize:(CGSize)targetSize
                        issueLevel:(VIQualityIssueLevel)level

BETA

Invoked if the video resolution sent to the endpoint is lower than a captured video resolution. As a result it affects remote video quality on the remote participant side, but do not affect the quality of local video preview on the android application.

The issue level may vary during the call.

Possible reasons:

  1. High CPU load during the video call
  2. Network issues such as poor internet connection or low bandwidth

Parameters

  • call:

    VICall *

    Call the issue belongs to.

  • actualSize:

    CGSize

    Sent frame size.

  • targetSize:

    CGSize

    Captured frame size.

  • Issue level.

call:didDetectLowBandwidth:targetBitrate:issueLevel:

- (void)call:(VICall *)call
    didDetectLowBandwidth:(double)actualBitrate
            targetBitrate:(double)targetBitrate
               issueLevel:(VIQualityIssueLevel)level

BETA

Invoked if current bitrate is insufficient for sending video with current resolution.

Issue level may vary during the call. SDK may report VIQualityIssueLevelMajor or VIQualityIssueLevelMinor while detecting network capabilities right after the call start.

Target bitrate depends on the sent video frame resolution. If the resolution of video frames sent is changed, target bitrate can also be changed (increased or degraded).

It is not recommended to change the resolution or other video call parameters once the issue is detected; in such case, SDK tries to adapt to the current congestion automatically. Only if the issue level is constantly VIQualityIssueLevelMajor or VIQualityIssueLevelCritical, you can change the video call parameters.

Issue may be triggered and constantly report VIQualityIssueLevelMajor or VIQualityIssueLevelCritical if the application is running in the background.

Possible reasons:

  1. Network issues
  2. Background state of an application

Parameters

  • call:

    VICall *

    Call the issue belongs to.

  • actualBitrate:

    double

    Actual bitrate. Measured in bits per second.

  • targetBitrate:

    double

    Bitrate required to send video with current resolution with a good quality. Measured in bits per second.

  • Issue level.

call:didDetectNoAudioSignal:

- (void)call:(VICall *)call
    didDetectNoAudioSignal:(VIQualityIssueLevel)level

BETA

Invoked if no audio is captured by the microphone.

Issue level can be only VIQualityIssueLevelCritical if the issue is detected or VIQualityIssueLevelNone if the issue is not detected or resolved.

Possible reasons:

  1. Access to microphone is denied
  2. Category of AVAudioSession is not AVAudioSessionCategoryPlayAndRecord

Parameters

call:didDetectPacketLoss:issueLevel:

- (void)call:(VICall *)call
    didDetectPacketLoss:(double)packetLoss
             issueLevel:(VIQualityIssueLevel)level

BETA

Invoked on packet loss detection. Packet loss can lead to missing of entire sentences, awkward pauses in the middle of a conversation or robotic voice during the call.

Issue level may vary during the call.

Possible reasons:

  1. Network congestion
  2. Bad hardware (parts of the network infrastructure)

Parameters

  • call:

    VICall *

    Call the issue belongs to.

  • packetLoss:

    double

    Average packet loss for 2.5 seconds.

  • Issue level.