This error comes on Android only. Works fine on iOS.
When I initiate or join a video call from Android for the very first time, then everything works fine. I am able to see the remote video as well as local video. But if I disconnect and try to initiate/join the call the 2nd time then I am not able to view my local video and it throws this error in the log.
I use EnxRtc.disconnect(); to disconnect from the call.
[onEventInfo] {msg: Invaid Frame Rate, result: 5088, desc: Failed to initiate stream with invalid Frame Rate. Max Frame Rate is 30}
setState(() {
EnxRtc.publish();
});
};
EnxRtc.onRemoteStreamAudioMute = (Map<dynamic, dynamic> map) {
log('onRemoteStreamAudioMute',
name: 'onRemoteStreamAudioMute', error: map.toString());
setState(() {
try {
isRemoteAudioMuted = map['user']['audioMuted'];
} catch (e) {}
});
showFlushBar(
context,
0,
'$otherUserName muted their audio',
durationInMilliseconds: flushbarDurationInMilliseconds,
flushbarPosition: FlushbarPosition.TOP,
);
};
EnxRtc.onRemoteStreamAudioUnMute = (Map<dynamic, dynamic> map) {
log('onRemoteStreamAudioUnMute',
name: 'onRemoteStreamAudioUnMute', error: map.toString());
setState(() {
try {
isRemoteAudioMuted = map['user']['audioMuted'];
} catch (e) {}
showFlushBar(
context,
1,
'$otherUserName unmuted their audio',
durationInMilliseconds: flushbarDurationInMilliseconds,
flushbarPosition: FlushbarPosition.TOP,
);
});
};
EnxRtc.onRemoteStreamVideoMute = (Map<dynamic, dynamic> map) {
setState(() {
try {
isRemoteVideoMuted = map['user']['videoMuted'];
} catch (e) {}
log('onRemoteStreamVideoMute',
name: 'onRemoteStreamVideoMute', error: map.toString());
});
showFlushBar(
context,
0,
'$otherUserName stopped their video',
durationInMilliseconds: flushbarDurationInMilliseconds,
flushbarPosition: FlushbarPosition.TOP,
);
};
EnxRtc.onRemoteStreamVideoUnMute = (Map<dynamic, dynamic> map) {
setState(() {
try {
isRemoteVideoMuted = map['user']['videoMuted'];
} catch (e) {}
log('${map['user']['videoMuted']}',
name: 'onRemoteStreamVideoUnMute', error: map.toString());
});
};
EnxRtc.onRoomError = (Map<dynamic, dynamic> map) {
setState(() {
log('onRoomError', name: 'onRoomError', error: map.toString());
});
};
EnxRtc.onRoomDisConnected = (Map<dynamic, dynamic> map) {
log(map.toString(), name: 'onRoomDisConnected');
};
EnxRtc.onConnectionLost = (Map<dynamic, dynamic> map) {
// In case connection lost due to internet lose
setState(() {});
};
EnxRtc.onConnectionInterrupted = (Map<dynamic, dynamic> map) {
// In case any interruption in connection
setState(() {});
};
EnxRtc.onUserReconnectSuccess = (Map<dynamic, dynamic> map) {
// When reconnect done successfully
setState(() {});
};
EnxRtc.onPublishedStream = (Map<dynamic, dynamic> map) async {
log(map.toString(), name: 'onPublishedStream');
setState(() {
EnxRtc.setupVideo(0, 0, true, 300, 200);
});
};
EnxRtc.onStreamAdded = (Map<dynamic, dynamic> map) async {
log(map.toString(), name: 'onStreamAdded');
try {
EnxRtc.switchMediaDevice('Speaker');
} catch (e) {
log('', name: 'onStreamAdded switch error', error: e);
}
String streamId = '';
setState(() {
streamId = map['streamId'];
});
EnxRtc.subscribe(streamId);
};
EnxRtc.onNotifyDeviceUpdate = (String deviceName) {
log(deviceName, name: 'onNotifyDeviceUpdate');
setState(() {});
};
EnxRtc.onActiveTalkerList = (Map<dynamic, dynamic> map) {
log(map.toString(), name: 'onActiveTalkerList');
final items = (map['activeList'] as List)
.map((i) => new ActiveListModel.fromJson(i));
if (items.length > 0) {
setState(() {
for (final item in items) {
if (!_remoteUsers.contains(item.streamId)) {
log(
'_remoteUsers \n' + map.toString(),
name: 'onActiveTalkerList',
);
_remoteUsers.add(item.streamId);
}
}
});
}
};
EnxRtc.onEventError = (Map<dynamic, dynamic> map) {
setState(() {
log(
'onEventError',
name: 'onEventError',
error: map.toString(),
);
});
};
EnxRtc.onEventInfo = (Map<dynamic, dynamic> map) {
log(map.toString(), name: 'onEventInfo');
setState(() {});
};
EnxRtc.onUserConnected = (Map<dynamic, dynamic> map) {
log(map.toString(), name: 'onUserConnected');
otherUserName = map['name'];
setState(() {
didUserJoinCall = true;
showFlushBar(
context,
1,
'$otherUserName has joined the call',
durationInMilliseconds: flushbarDurationInMilliseconds,
flushbarPosition: FlushbarPosition.TOP,
);
});
};
EnxRtc.onUserDisConnected = (Map<dynamic, dynamic> map) async {
log(map.toString(), name: 'onUserDisConnected');
setState(() {
_showAlert(
context: context, message: '${map['name']} disconnected call');
});
};
EnxRtc.onAudioEvent = (Map<dynamic, dynamic> map) {
log(map.toString(), name: 'onAudioEvent');
setState(() {
if (map['msg'].toString().toLowerCase() == "audio off") {
isAudioMuted = true;
} else {
isAudioMuted = false;
}
});
};
EnxRtc.onVideoEvent = (Map<dynamic, dynamic> map) {
log(map.toString(), name: 'onVideoEvent');
setState(() {
if (map['msg'].toString().toLowerCase() == "video off") {
isVideoMuted = true;
} else {
isVideoMuted = false;
}
});
};