connectLocalSendTransportScreen function

Future<void> connectLocalSendTransportScreen(
  1. {required MediaStream stream,
  2. required ConnectSendTransportScreenParameters parameters}
)

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
  }
}