initlize method
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);
}