Get service quality information
The code on this page works with either the default UI or the custom UI.
Use service quality callbacks to get insight on video, audio, and screen sharing quality during a session and notify users of unstable network conditions.
See video quality
The MobileRTCMeetingService interface provides a method queryNetworkQuality() to the MobileRTCNetworkQuality object, which provides both sent and received video network quality data for the local user. You can also use the callback onSinkMeetingVideoQualityChanged() under MobileRTCMeetingServiceDelegate to get the video quality data for all users. See the code snippet and SDK reference for details.
To receive this data, there must be at least two users sending or transmitting video to the session.
// Get video (.VIDEO) network quality for local user
// The withDataFlow parameter of TRUE indicates send data and FALSE indicates receive data.
MobileRTC.shared().getMeetingService()?.queryNetworkQuality(.VIDEO, withDataFlow: true)
MobileRTC.shared().getMeetingService()?.queryNetworkQuality(.VIDEO, withDataFlow: false)
// Return result of queryNetworkQuality is the enum MobileRTCNetworkQuality
typedef NS_ENUM(NSInteger, MobileRTCNetworkQuality) {
MobileRTCNetworkQuality_Unknown = -1,
MobileRTCNetworkQuality_VeryBad = 0,
MobileRTCNetworkQuality_Bad = 1,
MobileRTCNetworkQuality_NotGood = 2,
MobileRTCNetworkQuality_Normal = 3,
MobileRTCNetworkQuality_Good = 4,
MobileRTCNetworkQuality_Excellent = 5,
};
// Callback for getting all users video quality.
func onSinkMeetingVideoQualityChanged(_ qality: MobileRTCVideoQuality, userID: UInt) {
}
// Return result of onSinkMeetingVideoQualityChanged is the enum MobileRTCVideoQuality
typedef NS_ENUM(NSInteger, MobileRTCVideoQuality) {
MobileRTCVideoQuality_Unknown = 0,
MobileRTCVideoQuality_Bad = 1,
MobileRTCVideoQuality_Normal = 2,
MobileRTCVideoQuality_Good = 3,
};
// Get video (MobileRTCComponentType_VIDEO) network quality for local user
// The withDataFlow parameter of TRUE indicates send data and FALSE indicates receive data.
[[[MobileRTC sharedRTC] getMeetingService] queryNetworkQuality:MobileRTCComponentType_VIDEO withDataFlow:YES];
[[[MobileRTC sharedRTC] getMeetingService] queryNetworkQuality:MobileRTCComponentType_VIDEO withDataFlow:NO];
// Return result of queryNetworkQuality is the enum MobileRTCNetworkQuality
typedef NS_ENUM(NSInteger, MobileRTCNetworkQuality) {
MobileRTCNetworkQuality_Unknown = -1,
MobileRTCNetworkQuality_VeryBad = 0,
MobileRTCNetworkQuality_Bad = 1,
MobileRTCNetworkQuality_NotGood = 2,
MobileRTCNetworkQuality_Normal = 3,
MobileRTCNetworkQuality_Good = 4,
MobileRTCNetworkQuality_Excellent = 5,
};
// Callback for getting all users video quality.
- (void)onSinkMeetingVideoQualityChanged:(MobileRTCNetworkQuality)qality userID:(NSUInteger)userID
{
}
// Return result of onSinkMeetingVideoQualityChanged is the enum MobileRTCVideoQuality
typedef NS_ENUM(NSInteger, MobileRTCVideoQuality) {
MobileRTCVideoQuality_Unknown = 0,
MobileRTCVideoQuality_Bad = 1,
MobileRTCVideoQuality_Normal = 2,
MobileRTCVideoQuality_Good = 3,
};
See audio quality
The MobileRTCMeetingService interface provides a method queryNetworkQuality() to the MobileRTCNetworkQuality object, which provides both sent and received audio network quality data for the local user. See the code snippet and SDK reference for details.
To receive this data, there must be at least two users actively sending audio to the session.
// Get audio (.AUDIO) network quality for local user
// The withDataFlow parameter of TRUE indicates send data and FALSE indicates receive data.
MobileRTC.shared().getMeetingService()?.queryNetworkQuality(.AUDIO, withDataFlow: true)
MobileRTC.shared().getMeetingService()?.queryNetworkQuality(.AUDIO, withDataFlow: false)
// Return result of queryNetworkQuality is the enum MobileRTCNetworkQuality
typedef NS_ENUM(NSInteger, MobileRTCNetworkQuality) {
MobileRTCNetworkQuality_Unknown = -1,
MobileRTCNetworkQuality_VeryBad = 0,
MobileRTCNetworkQuality_Bad = 1,
MobileRTCNetworkQuality_NotGood = 2,
MobileRTCNetworkQuality_Normal = 3,
MobileRTCNetworkQuality_Good = 4,
MobileRTCNetworkQuality_Excellent = 5,
};
// Get audio (MobileRTCComponentType_AUDIO) network quality for local user
// The withDataFlow parameter of TRUE indicates send data and FALSE indicates receive data.
[[[MobileRTC sharedRTC] getMeetingService] queryNetworkQuality:MobileRTCComponentType_AUDIO withDataFlow:YES];
[[[MobileRTC sharedRTC] getMeetingService] queryNetworkQuality:MobileRTCComponentType_AUDIO withDataFlow:NO];
// Return result of queryNetworkQuality is the enum MobileRTCNetworkQuality
typedef NS_ENUM(NSInteger, MobileRTCNetworkQuality) {
MobileRTCNetworkQuality_Unknown = -1,
MobileRTCNetworkQuality_VeryBad = 0,
MobileRTCNetworkQuality_Bad = 1,
MobileRTCNetworkQuality_NotGood = 2,
MobileRTCNetworkQuality_Normal = 3,
MobileRTCNetworkQuality_Good = 4,
MobileRTCNetworkQuality_Excellent = 5,
};
See screen sharing quality
The MobileRTCMeetingService interface provides a method queryNetworkQuality() to the MobileRTCNetworkQuality object, which provides both sent and received share network quality data for the local user. See the code snippet and SDK reference for details.
To receive this data, there must be at least two users in the session, with at least one sharing their screen.
// Get share (.AS) network quality for local user
// The withDataFlow parameter of TRUE indicates send data and FALSE indicates receive data.
MobileRTC.shared().getMeetingService()?.queryNetworkQuality(.AS, withDataFlow: true)
MobileRTC.shared().getMeetingService()?.queryNetworkQuality(.AS, withDataFlow: false)
// Return result of queryNetworkQuality is the enum MobileRTCNetworkQuality
typedef NS_ENUM(NSInteger, MobileRTCNetworkQuality) {
MobileRTCNetworkQuality_Unknown = -1,
MobileRTCNetworkQuality_VeryBad = 0,
MobileRTCNetworkQuality_Bad = 1,
MobileRTCNetworkQuality_NotGood = 2,
MobileRTCNetworkQuality_Normal = 3,
MobileRTCNetworkQuality_Good = 4,
MobileRTCNetworkQuality_Excellent = 5,
};
// Get audio (MobileRTCComponentType_AS) network quality for local user
// The withDataFlow parameter of TRUE indicates send data and FALSE indicates receive data.
[[[MobileRTC sharedRTC] getMeetingService] queryNetworkQuality:MobileRTCComponentType_AS withDataFlow:YES];
[[[MobileRTC sharedRTC] getMeetingService] queryNetworkQuality:MobileRTCComponentType_AS withDataFlow:NO];
// Return result of queryNetworkQuality is the enum MobileRTCNetworkQuality
typedef NS_ENUM(NSInteger, MobileRTCNetworkQuality) {
MobileRTCNetworkQuality_Unknown = -1,
MobileRTCNetworkQuality_VeryBad = 0,
MobileRTCNetworkQuality_Bad = 1,
MobileRTCNetworkQuality_NotGood = 2,
MobileRTCNetworkQuality_Normal = 3,
MobileRTCNetworkQuality_Good = 4,
MobileRTCNetworkQuality_Excellent = 5,
};