首页 > 解决方案 > 在 Flutter 中更新使用 bytearray 创建的 MP3 文件中的元数据

问题描述

我目前正在录制一个实时流并使用 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)

标签: flutterdartdart-pubdart-packages

解决方案


您将能够通过使用颤振 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();    
  });
}

推荐阅读