initlize method

Future<void> initlize({
  1. required WhipMode mode,
  2. MediaStream? stream,
  3. String? videoCodec,
})

Implementation

Future<void> initlize(
    {required WhipMode mode, MediaStream? stream, String? videoCodec}) async {
  initHttpClient();
  if (pc != null) {
    return;
  }
  if (videoCodec != null) {
    this.videoCodec = videoCodec.toLowerCase();
  }
  this.mode = mode;
  pc = await createPeerConnection({
    'sdpSemantics': 'unified-plan',
    'bundlePolicy': 'max-bundle',
    'rtcpMuxPolicy': 'require',
  });
  pc?.onIceCandidate = onicecandidate;
  pc?.onIceConnectionState = (state) {
    print('state: ${state.toString()}');
  };
  pc!.onTrack = (RTCTrackEvent event) => onTrack?.call(event);
  switch (mode) {
    case WhipMode.kSend:
      stream?.getTracks().forEach((track) async {
        await pc!.addTransceiver(
            track: track,
            kind: track.kind == 'audio'
                ? RTCRtpMediaType.RTCRtpMediaTypeAudio
                : RTCRtpMediaType.RTCRtpMediaTypeVideo,
            init: RTCRtpTransceiverInit(
                direction: TransceiverDirection.SendOnly, streams: [stream]));
      });
      break;
    case WhipMode.kReceive:
      await pc!.addTransceiver(
          kind: RTCRtpMediaType.RTCRtpMediaTypeAudio,
          init: RTCRtpTransceiverInit(
              direction: TransceiverDirection.RecvOnly));
      await pc!.addTransceiver(
          kind: RTCRtpMediaType.RTCRtpMediaTypeVideo,
          init: RTCRtpTransceiverInit(
              direction: TransceiverDirection.RecvOnly));
      break;
  }
  log.debug('Initlize whip connection: mode = $mode, stream = ${stream?.id}');
  setState(WhipState.kInitialized);
}