在录制期间 运行 ffmpeg 命令时找不到 Flutter FFmpeg moov 原子

Flutter FFmpeg moov atom not found whilst running ffmpeg command during recording

您好,我目前正在尝试检索正在录制的音频文件的 3 秒片段。我正在使用录音模块 flutter sound and flutter ffmpeg.

我使用默认编解码器 (.aac) 录制音频文件。文件保存到缓存getTemporaryDirectory()

然后我使用这个 flutter ffmpeg 代码复制文件

List<String> arguments = ["-ss", start.toString(), "-i", inPath, "-to", end.toString(), "-c", "copy", outPath];

await flutterFFmpeg.executeWithArguments(arguments);

Start: start time (e.g. 0) and End: end time (e.g. 3)

然后returns这个错误

FFmpeg exited with rc: 1 [mov,mp4,m4a,3gp,3g2,mj2 @ 0x748964ea00] moov atom not found

有用信息:

  1. moov 原子是关于文件的数据(例如时间刻度、持续时间)
  2. 我知道 inPath 存在,因为我在执行 ffmpeg 命令之前检查过它
  3. outPath也是格式.aac
  4. 此 ffmpeg 函数正在 运行 而录制仍在进行
  5. 示例 inPath uri 如下所示 /data/user/0/com.my.app/cache/output.aac
  6. 我在 iOS 运行 时没有问题,只有 android

非常感谢您的帮助,我已经花了很多天时间来解决这个问题。如果您需要更多信息,请发表评论。谢谢

不保证默认编解码器是 AAC/ADTS。 这将取决于您设备的 Android 版本。

你可以做几件事来更好地理解:

  • ffprobe 在您的文件上查看 Flutter Sound 录制的内容。

  • 使用特定的编解码器而不是默认编解码器:aac/adts 是一个不错的选择,因为它可以流式传输(您想在录制期间而不是在关闭文件后处理音频数据)

  • 确认您的文件包含某些内容并且数据不在内部缓冲区中

  • 记录到 dart PCM 流而不是文件。使用文件并使用 FFmpeg 查找它很复杂,可能无法满足您的需求。