makeRemote function

RemoteStream makeRemote(
  1. MediaStream stream,
  2. Transport transport
)

Implementation

RemoteStream makeRemote(MediaStream stream, Transport transport) {
  var remote = RemoteStream();
  remote.stream = stream;
  remote.audio = true;
  remote.video = Layer.none;
  remote._videoPreMute = Layer.high;

  var select = () {
    var call = {
      'streamId': remote.id,
      'video': layerStringType[remote.video],
      'audio': remote.audio,
    };
    if (transport.api == null) {
      log.warn('api datachannel not ready yet');
    }

    if (transport.api == null ||
        (transport.api != null &&
            transport.api?.state != RTCDataChannelState.RTCDataChannelOpen)) {
      /// queue call if we aren't open yet
      transport.onapiopen = () {
        transport.api?.send(RTCDataChannelMessage(jsonEncoder.convert(call)));
      };
    }

    transport.api?.send(RTCDataChannelMessage(jsonEncoder.convert(call)));
  };

  remote.preferLayer = (Layer layer) {
    remote.video = layer;
    select();
  };

  remote.mute = (kind) {
    if (kind == 'audio') {
      remote.audio = false;
    } else if (kind == 'video') {
      remote._videoPreMute = remote.video;
      remote.video = Layer.none;
    }
    select();
  };

  remote.unmute = (kind) {
    if (kind == 'audio') {
      remote.audio = true;
    } else if (kind == 'video') {
      remote.video = remote._videoPreMute;
    }
    select();
  };

  return remote;
}