Загрузка видеофайлов с устройства в виде трепетания `ByteData` - PullRequest
0 голосов
/ 02 апреля 2020

Я использую пакет камеры flutter для записи видео и сохранения видео во временную директорию, после чего я использую пакет ffmpeg flutter для некоторого преобразования. Однако, чтобы достичь этого, мне сначала пришлось сделать копию записанного видео, чтобы создать путь к выходному файлу.

Проблема возникает, когда я пытаюсь загрузить ресурс с устройства. Блок кода ниже выполняет копирование и переименование файла.

static Future<File> copyFileAssets(String assetName, String localName) async {
     ByteData assetByteData = await rootBundle.load(assetName);

    final List<int> byteList = assetByteData.buffer
        .asUint8List(assetByteData.offsetInBytes, assetByteData.lengthInBytes);

    final String fullTemporaryPath =
        join((await tempDirectory).path, localName);

    return new File(fullTemporaryPath)
        .writeAsBytes(byteList, mode: FileMode.writeOnly, flush: true);
  }

Проблема заключается в этой строке ByteData assetByteData = await rootBundle.load(assetName); Я получаю это сообщение об ошибке Unable to load asset: /storage/emulated/0/Android/data/com.timz/files/timz/1585820950555.mp4, но странная вещь, это происходит только когда я запускаю сборку для первого. Все остальное работает нормально при последующих горячих перезапусках.

1 Ответ

0 голосов
/ 03 апреля 2020

Позже я получил это исправление самостоятельно rootBundle предназначено для загрузки только ресурсов, которые вы объявили своими путями на вашем pubspec.yaml, но каким-то образом он чудесным образом загружает сохраненный файл при применении горячего перезапуска.

Чтение файла в байтах дало то, что я хотел, загрузив его с root связкой. Вот код ниже. Uint8List assetByteData = await File(assetName).readAsBytes();

...