start method

  1. @override
Future<void> start(
  1. RecordConfig config, {
  2. required String path,
})
override

Implementation

@override
Future<void> start(
  RecordConfig config, {
  required String path,
}) async {
  _mediaRecorder?.stop();
  await _reset();

  try {
    final mediaStream = await initMediaStream(config);

    // Try to assign dedicated mime type.
    // If contrainst isn't set, browser will record with its default codec.
    final mimeType = getSupportedMimeType(config.encoder);

    final mediaRecorder = web.MediaRecorder(
      mediaStream,
      web.MediaRecorderOptions(
        audioBitsPerSecond: config.bitRate,
        bitsPerSecond: config.bitRate,
        mimeType: mimeType ?? _defaultMimeType,
      ),
    );
    mediaRecorder.ondataavailable =
        ((web.BlobEvent event) => _onDataAvailable(event)).toJS;
    mediaRecorder.onstop = ((web.Event event) => _onStop()).toJS;

    _elapsedTime.start();

    mediaRecorder.start(200); // Will trigger dataavailable every 200ms

    _createAudioContext(config, mediaStream);

    _mediaRecorder = mediaRecorder;
    _mediaStream = mediaStream;

    onStateChanged(RecordState.record);
  } catch (error) {
    _onError(error);
  }
}