更新在 Flutter 中使用 bytearray 创建的 MP3 文件中的元数据

Updating MetaData in MP3 file created using bytearray in Flutter

我目前正在录制直播流并使用 bytearray 将其写入 flutter 文件,将其作为流读取,然后使用 File.openWrite 将其写入文件,一切进展顺利,但我刚刚意识到我需要将一些元数据写入文件,但我什至不知道该怎么做。我在 Android 中使用 ID3Tag 库完成过一次,但我似乎无法在 Flutter 中找到任何类似的东西。任何帮助表示赞赏。像往常一样提前谢谢你!我试过使用 https://pub.dev/packages/audiotagger/

但是,我一直 运行 陷入这个错误,不知道如何解决这个问题。 Checking further because the ID3 Tag ends at 0x00 but the mp3 audio doesn't start until 0x129

这也是错误的一部分:

W/System.err(20398): java.lang.NullPointerException: Attempt to invoke interface method 'void org.jaudiotagger.tag.Tag.setField(org.jaudiotagger.tag.FieldKey, java.lang.String[])' on a null object reference
W/System.err(20398):    at com.nicolorebaioli.audiotagger.AudiotaggerPlugin$Util.setFieldIfExist(AudiotaggerPlugin.java:222)
W/System.err(20398):    at com.nicolorebaioli.audiotagger.AudiotaggerPlugin.writeTags(AudiotaggerPlugin.java:92)
W/System.err(20398):    at com.nicolorebaioli.audiotagger.AudiotaggerPlugin.onMethodCall(AudiotaggerPlugin.java:64)
W/System.err(20398):    at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
W/System.err(20398):    at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
W/System.err(20398):    at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
W/System.err(20398):    at android.os.MessageQueue.nativePollOnce(Native Method)
W/System.err(20398):    at android.os.MessageQueue.next(MessageQueue.java:326)
W/System.err(20398):    at android.os.Looper.loop(Looper.java:160)

您可以使用 flutter ffmpeg 库来完成此操作。

https://pub.dev/packages/flutter_ffmpeg/

将其添加到文件后,使用下面的代码将元数据添加到文件。

void ffmpegFileUpdate(fileName) {
  var abs = absolutePath + "/temp.mp3";
  var newP = absolutePath + "/" + fileName;

  final FlutterFFmpeg _flutterFFmpeg = new FlutterFFmpeg();
  var arguments = ["-i", abs, "-c:v", "mp3", newP];
  _flutterFFmpeg.executeWithArguments(arguments).then((rc) {
    File(abs).delete();    
  });
}