我正在使用flutter相机包来录制视频并将视频保存到一个临时目录,之后我使用flutter的ffmpeg
包进行一些转换。但是,要实现此目的,我首先必须对录制的视频进行复制以创建输出文件路径。
当我尝试从设备加载资产时,挑战就来了。下面的代码块用于文件的复制和重命名。
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
,但奇怪的是,这仅在我为第一个运行构建时发生。在随后的热重启中,其他所有工作都很好。
[我后来自己得到了此修复程序rootBundle
旨在仅加载您在pubspec.yaml
上声明了路径的资产,但是以某种方式,当应用热重启时,它奇迹般地加载了已保存的文件。
以字节读取文件给出了我希望通过根捆绑程序加载它的内容。这是下面的代码。Uint8List assetByteData = await File(assetName).readAsBytes();