producerClosed function
- ProducerClosedOptions options
Handles the closure of a producer identified by its remote producer ID. This function updates the consumer transports and triggers close-and-resize operations.
Parameters:
options
(ProducerClosedOptions): The options containing the producer ID and necessary parameters.remoteProducerId
(String): The ID of the remote producer to be closed.parameters
(ProducerClosedParameters): Additional parameters including consumer transports and close-and-resize logic.
Example:
final parameters = MockProducerClosedParameters(); // Your implementation of ProducerClosedParameters
final options = ProducerClosedOptions(remoteProducerId: 'producerId', parameters: parameters);
producerClosed(options).then((_) {
print('Producer closed successfully');
}).catchError((error) {
print('Error closing producer: $error');
});
Implementation
Future<void> producerClosed(ProducerClosedOptions options) async {
final remoteProducerId = options.remoteProducerId;
var parameters = options.parameters.getUpdatedAllParams();
List<TransportType> consumerTransports = parameters.consumerTransports;
final String screenId = parameters.screenId;
final updateConsumerTransports = parameters.updateConsumerTransports;
final closeAndResize = parameters.closeAndResize;
// Find the producer to close based on the provided ID
TransportType? producerToClose = consumerTransports.firstWhereOrNull(
(transportData) => transportData.producerId == remoteProducerId);
if (producerToClose == null) {
return;
}
if (producerToClose.producerId.isEmpty) {
return;
}
// Check if the producer ID matches the screen ID and determine the kind
String kind = producerToClose.consumer.track.kind!;
if (producerToClose.producerId == screenId) {
kind = 'screenshare';
}
try {
// Close the consumer transport if possible
await producerToClose.consumerTransport.close();
} catch (error) {
if (kDebugMode) {
//print('Error closing consumer transport: $error');
}
}
try {
// Close the consumer
await producerToClose.consumer.close();
} catch (error) {
if (kDebugMode) {
// print('Error closing consumer: $error');
}
}
// Remove the closed producer from the list
consumerTransports = consumerTransports
.where((transportData) => transportData.producerId != remoteProducerId)
.toList();
updateConsumerTransports(consumerTransports);
// Close and resize video outputs as needed
final optionsCloseAndResize = CloseAndResizeOptions(
producerId: remoteProducerId,
kind: kind,
parameters: parameters,
);
await closeAndResize(
optionsCloseAndResize,
);
}