generateProfileLevelIdForAnswer static method
String?
generateProfileLevelIdForAnswer(
{ - Map local_supported_params = const {},
- Map remote_offered_params = const {},
})
Implementation
static String? generateProfileLevelIdForAnswer({
Map<dynamic, dynamic> local_supported_params = const {},
Map<dynamic, dynamic> remote_offered_params = const {},
}) {
// If both local and remote params do not contain profile-level-id, they are
// both using the default profile. In this case, don't return anything.
if (local_supported_params['profile-level-id'] == null && remote_offered_params['profile-level-id'] == null) {
print('generateProfileLevelIdForAnswer() | no profile-level-id in local and remote params');
return null;
}
// Parse profile-level-ids.
final ProfileLevelId? local_profile_level_id = parseSdpProfileLevelId(params: local_supported_params);
final ProfileLevelId? remote_profile_level_id = parseSdpProfileLevelId(params: remote_offered_params);
// The local and remote codec must have valid and equal H264 Profiles.
if (local_profile_level_id == null) {
throw('invalid local_profile_level_id');
}
if (remote_profile_level_id == null) {
throw('invalid remote_profile_level_id');
}
if (local_profile_level_id.profile != local_profile_level_id.profile) {
throw('H264 Profile mismatch');
}
// Parse level information.
final bool level_asymmetry_allowed = (isLevelAsymmetryAllowed(params: local_supported_params) && isLevelAsymmetryAllowed(params: remote_offered_params));
final int local_level = local_profile_level_id.level;
final int remote_level = remote_profile_level_id.level;
final int min_level = minLevel(local_level, remote_level);
// Determine answer level. When level asymmetry is not allowed, level upgrade
// is not allowed, i.e., the level in the answer must be equal to or lower
// than the level in the offer.
final int answer_level = level_asymmetry_allowed ? local_level : min_level;
print('generateProfileLevelIdForAnswer() | result: [profile:${local_profile_level_id.profile}, level:$answer_level');
// Return the resulting profile-level-id for the answer parameters.
return profileLevelIdToString(ProfileLevelId(profile: local_profile_level_id.profile, level: answer_level,));
}