connectLocalSendTransportScreen function
Implementation
Future<void> connectLocalSendTransportScreen({
required MediaStream stream,
required ConnectSendTransportScreenParameters parameters,
}) async {
try {
Producer? localScreenProducer = parameters.localScreenProducer;
Transport? localProducerTransport = parameters.localProducerTransport;
Device? device = parameters.device;
final updateLocalScreenProducer = parameters.updateLocalScreenProducer;
final updateLocalProducerTransport =
parameters.updateLocalProducerTransport;
// Find VP9 codec in device capabilities
RtpCodecCapability? codec = device?.rtpCapabilities.codecs
.firstWhere((codec) => codec.mimeType.toLowerCase() == 'video/vp9');
// If no VP9 codec is found, get the first video codec
codec ??= device?.rtpCapabilities.codecs.firstWhere(
(codec) => codec.kind == RTCRtpMediaType.RTCRtpMediaTypeVideo);
// Produce local screen share data
if (localProducerTransport != null) {
localProducerTransport.produce(
track: stream.getVideoTracks()[0],
stream: stream,
codec: codec,
appData: {'mediaTag': 'screen-video'},
source: 'screen',
);
// Update the local producer and transport objects
if (updateLocalScreenProducer != null) {
updateLocalScreenProducer(localScreenProducer);
}
if (updateLocalProducerTransport != null) {
updateLocalProducerTransport(localProducerTransport);
}
}
} catch (error) {
if (kDebugMode) {
print('Error connecting local screen transport: $error');
}
rethrow; // Re-throw to propagate the error
}
}