Обновление метаданных в файле MP3, созданном с помощью массива bytearray во Flutter

В настоящее время я записываю живой поток и записываю его в файл во флаттере, используя bytearray, и читаю его как поток, а затем записываю его в файл, используя 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)

1 ответ

Решение

Вы сможете сделать это с помощью библиотеки 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();    
  });
}
Другие вопросы по тегам