gpt4 book ai didi

java - 如何使用 mp4parser 将 Apple 元信息写入 MP4 文件

转载 作者:行者123 更新时间:2023-12-01 14:28:37 33 4
gpt4 key购买 nike

我正在使用mp4parser库,将 iTunes 兼容的元信息添加到某些 MP4 文件中。此示例经过简化,因为它不检查框是否可用,而是重现问题。

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,并且系列名称显示在正确的位置。但是,MP4 文件已损坏,无法启动电影。如何在不损坏文件的情况下添加此类元信息?

最佳答案

您很可能通过增加 mdat 框的偏移量来更改文件中数据的偏移量。 block 偏移框中的条目需要精确地增加您在其中添加的字节数。您可以在此处使用此代码片段来更正:

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 困住了。

关于java - 如何使用 mp4parser 将 Apple 元信息写入 MP4 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16990776/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com