start method
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();
}
}