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

#flutter #dart #dart-pub #dart-packages

#flutter #dart #dart-pub #dart-пакеты

Вопрос:

В настоящее время я записываю прямую трансляцию и записываю ее в файл в 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();    
  });
}