initLocalStream method

  1. @override
Future<WrappedMediaStream?> initLocalStream(
  1. GroupCallSession groupCall, {
  2. WrappedMediaStream? stream,
})
override

Initializes the local user media stream. The media stream must be prepared before the group call enters. if you allow the user to configure their camera and such ahead of time, you can pass that stream on to this function. This allows you to configure the camera before joining the call without having to reopen the stream and possibly losing settings.

Implementation

@override
Future<WrappedMediaStream?> initLocalStream(GroupCallSession groupCall,
    {WrappedMediaStream? stream}) async {
  if (groupCall.state != GroupCallState.localCallFeedUninitialized) {
    throw MatrixSDKVoipException(
        'Cannot initialize local call feed in the ${groupCall.state} state.');
  }

  groupCall.setState(GroupCallState.initializingLocalCallFeed);

  WrappedMediaStream localWrappedMediaStream;

  if (stream == null) {
    MediaStream stream;

    try {
      stream = await _getUserMedia(groupCall, CallType.kVideo);
    } catch (error) {
      groupCall.setState(GroupCallState.localCallFeedUninitialized);
      rethrow;
    }

    localWrappedMediaStream = WrappedMediaStream(
      stream: stream,
      participant: groupCall.localParticipant!,
      room: groupCall.room,
      client: groupCall.client,
      purpose: SDPStreamMetadataPurpose.Usermedia,
      audioMuted: stream.getAudioTracks().isEmpty,
      videoMuted: stream.getVideoTracks().isEmpty,
      isGroupCall: true,
      voip: groupCall.voip,
    );
  } else {
    localWrappedMediaStream = stream;
  }

  _localUserMediaStream = localWrappedMediaStream;
  await _addUserMediaStream(groupCall, localWrappedMediaStream);

  groupCall.setState(GroupCallState.localCallFeedInitialized);

  _activeSpeaker = null;

  return localWrappedMediaStream;
}