【问题标题】:How to write Apple meta-information to MP4 file with mp4parser如何使用 mp4parser 将 Apple 元信息写入 MP4 文件
【发布时间】:2013-07-01 05:25:13
【问题描述】:

我正在使用mp4parser 库向某些 MP4 文件添加与 iTunes 兼容的元信息。此示例已简化,因为它不检查框是否可用,但会重现问题。

FileChannel fcr = new RandomAccessFile(srcFile, "r").getChannel();
FileChannel fcw = new RandomAccessFile(dstFile, "rw").getChannel();

IsoFile isoFile = new IsoFile(fcr);

MovieBox moov = isoFile.getBoxes(MovieBox.class).get(0);
UserDataBox udta = moov.getBoxes(UserDataBox.class).get(0);
MetaBox meta = udta.getBoxes(MetaBox.class).get(0);
AppleItemListBox apple = meta.getBoxes(AppleItemListBox.class).get(0);

AppleShowBox box = box = new AppleShowBox();
box.setValue("Series-Name");
apple.addBox(box);

isoFile.getBox(fcw);
fcw.force(true);fcw.close();
fcr.close();

好消息是该文件可以导入 iTunes,并且 Series-Name 显示在正确的位置。但是,MP4 文件已损坏,无法启动电影。如何在不损坏文件的情况下添加这种元信息?

【问题讨论】:

    标签: java itunes mp4 mp4parser


    【解决方案1】:

    您很可能通过增加 mdat 框的偏移量来更改文件中数据的偏移量。块偏移框中的条目需要增加您在此处添加的字节数。您可以在此处使用此代码 sn-p 进行更正:

    private void correctChunkOffsets(IsoFile tempIsoFile, long correction) {
        List<Box> chunkOffsetBoxes = Path.getPaths(tempIsoFile, "/moov[0]/trak/mdia[0]/minf[0]/stbl[0]/stco[0]");
        for (Box chunkOffsetBox : chunkOffsetBoxes) {
    
            LinkedList<Box> stblChildren = new LinkedList<Box>(chunkOffsetBox.getParent().getBoxes());
            stblChildren.remove(chunkOffsetBox);
    
            long[] cOffsets = ((ChunkOffsetBox) chunkOffsetBox).getChunkOffsets();
            for (int i = 0; i < cOffsets.length; i++) {
                cOffsets[i] += correction;
            }
    
            StaticChunkOffsetBox cob = new StaticChunkOffsetBox();
            cob.setChunkOffsets(cOffsets);
            stblChildren.add(cob);
            chunkOffsetBox.getParent().setBoxes(stblChildren);
        }
    }
    

    在极少数情况下,mdat 框首先出现,元数据最后出现,然后您无需更改它。有关完整示例,请查看此处:https://mp4parser.googlecode.com/svn/trunk/examples/src/main/java/com/googlecode/mp4parser/stuff/ChangeMetaData.java

    注意:

    在最新版本 1.0-RC-24 中,我不得不删除与 Apple 相关的内容,因为它需要大量工作。你暂时被 RC-23 困住了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-24
      相关资源
      最近更新 更多