start method

Future<void> start()

Start recording. Throws if already recording.

Implementation

Future<void> start() async {
  if (_recorder != null) throw StateError('Already recording');

  final opts = web.MediaRecorderOptions(
    mimeType: _mimeType,
    videoBitsPerSecond: videoBitsPerSecond,
    audioBitsPerSecond: audioBitsPerSecond,
  );
  _recorder = web.MediaRecorder(_stream, opts);

  _recorder!.addEventListener(
    'dataavailable',
    (web.Event e) {
      final blobEvent = e as web.BlobEvent;
      final blob = blobEvent.data;
      if (blob.size == 0) return;
      blob.arrayBuffer().toDart.then((buf) {
        onChunk(buf.toDart.asUint8List());
      });
    }.toJS,
  );

  _recorder!.addEventListener(
    'stop',
    (web.Event _) {
      if (!_completer.isCompleted) _completer.complete();
    }.toJS,
  );

  _recorder!.addEventListener(
    'error',
    (web.Event e) {
      if (!_completer.isCompleted) {
        _completer.completeError(
          StateError('MediaRecorder error: ${e.type}'),
        );
      }
    }.toJS,
  );

  if (timesliceMs > 0) {
    _recorder!.start(timesliceMs);
  } else {
    _recorder!.start();
  }
}