connect method
Implementation
Future<void> connect() async {
try {
setState(WhipState.kConnecting);
var desc = await pc!.createOffer({});
if (mode == WhipMode.kSend && videoCodec != null) {
setPreferredCodec(desc, videoCodec: videoCodec!);
}
await pc!.setLocalDescription(desc);
var offer = await pc!.getLocalDescription();
final sdp = offer!.sdp;
log.debug('Sending offer: $sdp');
var respose = await httpPost(Uri.parse(url),
headers: {
'Content-Type': 'application/sdp',
if (headers != null) ...headers!
},
body: sdp);
if (respose.statusCode != 200 && respose.statusCode != 201) {
throw Exception('Failed to send offer: ${respose.statusCode}');
}
log.debug('Resource URL: $resourceURL');
final answer = RTCSessionDescription(respose.body, 'answer');
log.debug('Received answer: ${answer.sdp}');
await pc!.setRemoteDescription(answer);
setState(WhipState.kConnected);
resourceURL = respose.headers['location'];
if (resourceURL == null) {
resourceURL = url;
log.warn('Resource url not found, use $url as resource url!');
} else {
if (resourceURL!.startsWith('/')) {
var uri = Uri.parse(url);
resourceURL = '${uri.origin}$resourceURL';
}
}
} catch (e) {
log.error('connect error: $e');
setState(WhipState.kFailure);
lastError = e;
}
}