Reputation: 1
I tried using the com. adobe. xmp: xmpcore: 6.1.11 library in Android to write metadata to video files, but after trying several video files, there was an XML parsing failure issue
FATAL EXCEPTION: main
Process: com.yzx.testplayer, PID: 2301
java.lang.RuntimeException: com.adobe.internal.xmp.XMPException: XML parsing failure
at com.yzx.testplayer.MainActivity.lambda$onResume$0$com-yzx-testplayer-MainActivity(MainActivity.java:73)
at com.yzx.testplayer.MainActivity$$ExternalSyntheticLambda2.onClick(Unknown Source:2)
at android.view.View.performClick(View.java:7448)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1131)
at android.view.View.performClickInternal(View.java:7425)
at android.view.View.access$3600(View.java:810)
at android.view.View$PerformClick.run(View.java:28305)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: com.adobe.internal.xmp.XMPException: XML parsing failure
at com.adobe.internal.xmp.impl.XMPMetaParser.parseInputSource(XMPMetaParser.java:329)
at com.adobe.internal.xmp.impl.XMPMetaParser.parseXmlFromBytebuffer(XMPMetaParser.java:248)
at com.adobe.internal.xmp.impl.XMPMetaParser.parseXmlFromInputStream(XMPMetaParser.java:184)
at com.adobe.internal.xmp.impl.XMPMetaParser.parseXml(XMPMetaParser.java:147)
at com.adobe.internal.xmp.impl.XMPMetaParser.parse(XMPMetaParser.java:87)
at com.adobe.internal.xmp.XMPMetaFactory.parse(XMPMetaFactory.java:109)
at com.yzx.testplayer.VideoEditingUtils.writeVideoMete(VideoEditingUtils.java:37)
at com.yzx.testplayer.MainActivity.lambda$onResume$0$com-yzx-testplayer-MainActivity(MainActivity.java:70)
at com.yzx.testplayer.MainActivity$$ExternalSyntheticLambda2.onClick(Unknown Source:2)
at android.view.View.performClick(View.java:7448)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1131)
at android.view.View.performClickInternal(View.java:7425)
at android.view.View.access$3600(View.java:810)
at android.view.View$PerformClick.run(View.java:28305)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: org.xml.sax.SAXParseException: Unexpected token (position:TEXT RIFF¼¢… AVI LIST...@1:555 in com.adobe.internal.xmp.impl.FixASCIIControlsReader@1bd3d36)
at org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:147)
at com.adobe.internal.xmp.impl.XMPMetaParser.parseInputSource(XMPMetaParser.java:325)
at com.adobe.internal.xmp.impl.XMPMetaParser.parseXmlFromBytebuffer(XMPMetaParser.java:248)
at com.adobe.internal.xmp.impl.XMPMetaParser.parseXmlFromInputStream(XMPMetaParser.java:184)
at com.adobe.internal.xmp.impl.XMPMetaParser.parseXml(XMPMetaParser.java:147)
at com.adobe.internal.xmp.impl.XMPMetaParser.parse(XMPMetaParser.java:87)
at com.adobe.internal.xmp.XMPMetaFactory.parse(XMPMetaFactory.java:109)
at com.yzx.testplayer.VideoEditingUtils.writeVideoMete(VideoEditingUtils.java:37)
at com.yzx.testplayer.MainActivity.lambda$onResume$0$com-yzx-testplayer-MainActivity(MainActivity.java:70)
at com.yzx.testplayer.MainActivity$$ExternalSyntheticLambda2.onClick(Unknown Source:2)
at android.view.View.performClick(View.java:7448)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1131)
at android.view.View.performClickInternal(View.java:7425)
at android.view.View.access$3600(View.java:810)
at android.view.View$PerformClick.run(View.java:28305)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
I don't know how to solve it. This is my code section.
public static void writeVideoMete(Context context,String metaData) throws XMPException, IOException {
File videoFile = getVideoFile(context);
if(!videoFile.exists()){
throw new RuntimeException("video does not exist");
}
FileInputStream fis = new FileInputStream(videoFile);
XMPMeta xmp = XMPMetaFactory.parse(fis, null);
xmp.setProperty(XMPConst.NS_DC, "creator", "John Doe");
xmp.setProperty(XMPConst.NS_XMP, "CreateDate", "2022-03-21");
FileOutputStream fos = new FileOutputStream(videoFile);
XMPMetaFactory.serialize(xmp, fos, null);
fis.close();
fos.close();
}
private static File getVideoFile(Context context) {
return new File("/sdcard/test.avi");
}
As shown in the code, I obtained a video file from the sdcard, which is 72 MB in size. I wanted to write two pieces of information to the file and save it, but there was an error in XMPMetaFactory.parse. I tried several videos and they all did the same.
Here is the code that calls to write metadata in MainActivity, triggered by clicking the button
@Override
protected void onResume() {
super.onResume();
editVideoButton.setOnClickListener(i->{
try {
VideoEditingUtils.writeVideoMete(this,""); \\70
VideoEditingUtils.readVideoMete(this);
} catch (XMPException | IOException e) {
throw new RuntimeException(e); \\73
}
});
}
If you could provide me with some solutions, I would be grateful.
Upvotes: 0
Views: 215