Player constructor
Player({
- required int id,
- VideoDimensions? videoDimensions,
- List<
String> ? commandlineArguments,
Implementation
Player(
{required this.id,
VideoDimensions? videoDimensions,
List<String>? commandlineArguments}) {
if (commandlineArguments != null) {
this.commandlineArguments = commandlineArguments;
}
currentController = StreamController<CurrentState>.broadcast();
currentStream = currentController.stream;
positionController = StreamController<PositionState>.broadcast();
positionStream = positionController.stream;
playbackController = StreamController<PlaybackState>.broadcast();
playbackStream = playbackController.stream;
generalController = StreamController<GeneralState>.broadcast();
generalStream = generalController.stream;
bufferingProgressController = StreamController<double>.broadcast();
bufferingProgressStream = bufferingProgressController.stream;
errorController = StreamController<String>.broadcast();
errorStream = errorController.stream;
if (videoDimensions != null) {
preferredVideoDimensions = videoDimensions;
}
videoDimensionsController =
StreamController<VideoDimensions>.broadcast();
videoDimensionsStream = videoDimensionsController.stream;
players[id] = this;
// Parse [commandlineArguments] & convert to `char*[]`.
final List<Pointer<Utf8>> pointers =
this.commandlineArguments.map<Pointer<Utf8>>((e) {
return e.toNativeUtf8();
}).toList();
final Pointer<Pointer<Utf8>> arr =
calloc.allocate(this.commandlineArguments.join().length);
for (int i = 0; i < this.commandlineArguments.length; i++) {
arr[i] = pointers[i];
}
PlayerFFI.create(
id,
preferredVideoDimensions?.width ?? 0,
preferredVideoDimensions?.height ?? 0,
this.commandlineArguments.length,
arr,
);
// Freed the memory allocated for `char*[]`.
calloc.free(arr);
pointers.forEach(calloc.free);
}