Player constructor

Player({
  1. required int id,
  2. VideoDimensions? videoDimensions,
  3. List<String>? commandlineArguments,
})

Creates a new Player instance.

Takes unique id as parameter.

Player player = Player(id: 0);

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