Maria Isla
Maria Isla

Reputation: 1

com.adobe.internal.xmp.XMPException: XML parsing failure

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

Answers (0)

Related Questions