subscribe method
dynamic
subscribe(
{ - required String publisherSession,
- required RTCVideoRenderer remoteRenderer,
})
Implementation
subscribe(
{required String publisherSession,
required RTCVideoRenderer remoteRenderer}) async {
Completer completer = Completer();
remoteRenderer.initialize();
_remoteRenderer = remoteRenderer;
try {
if (_ws.channel?.closeCode != null) {
completer.completeError('error: Invalid create session result');
// throw Error();
}
if (_state == CallState.nullState || _state == CallState.sessionState) {
completer.completeError(
{'error': 'The state that cannot subscribe, state $_state'});
return;
}
if (_roomType != RoomType.videoroom.value &&
_roomType != RoomType.webinar.value) {
completer.completeError({
'error': 'The room type that cannot subscribe, room type $_roomType'
});
return;
}
if (publisherSession.length > 128) {
completer.completeError(
{'error': 'Invalid publisher session $publisherSession'});
return;
}
if (_subscribers.length > MAXUSERCNT) {
completer
.completeError({'error': 'Invalid request, subscribes exceeded'});
return;
}
VideoSubscriber subscriber =
VideoSubscriber(_ws, _session, _turnId, _turnSecret);
await subscriber.pcInitializer();
var subscribeResult =
await _ws.requestSubscribe(publisherSession, remoteRenderer);
_state = CallState.subscribeState;
if (publisherSession != subscribeResult['subscribe']) {
debugPrint('Wrong request');
}
await subscriber.subscribe(subscribeResult, remoteRenderer);
_subscribers['${subscribeResult['subscribe']}'] = subscriber;
_state =
_videoPublishFlag ? CallState.connectState : CallState.activeState;
var userResult = IResponseSubscribe(subscribeResult).toMap();
completer.complete(userResult);
return completer.future;
} catch (error) {
completer.completeError(error);
}
}