Обновление метаданных в файле 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();
});
}