我正在尝试使用mp4parser来创建元数据信息,但是在我的代码中我得到了userDataBox空以防由android捕获的视频但是在其他视频的情况下(我已经测试了下载的视频)它不是空的我添加了元数据成功,我的问题是由android拥有空userdatabox捕获的视频。任何人都可以帮助我吗?
moov.getBoxes(UserDataBox.class).size()
我的代码在这里:
File mediaStorageDir = new File(
Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM),
"MYFOLDER");
File f = new File(mediaStorageDir, "VID.mp4");
if(f.exists())
{
Toast.makeText(MainActivity.this," file found",Toast.LENGTH_SHORT).show();
}
try {
fc = new FileInputStream(f).getChannel();
// fc = new FileInputStream(f).getChannel();
isoFile = new IsoFile(fc);
String str = f.getAbsolutePath();
MovieBox moov = isoFile.getMovieBox();
// for (Box box : moov.getBoxes()) {
// System.out.println("box" + box);
// }
if(moov.getBoxes(UserDataBox.class).size()>0)
{
UserDataBox udta = moov.getBoxes(UserDataBox.class).get(0);
}else{
}
答案 0 :(得分:0)
如果没有udta(用户数据框),您可以创建它。您可能想查看github上的ChangeMetadata示例。
UserDataBox userDataBox;
long sizeBefore;
if ((userDataBox = Path.getPath(tempIsoFile, "/moov/udta")) == null) {
sizeBefore = 0;
userDataBox = new UserDataBox();
tempIsoFile.getMovieBox().addBox(userDataBox);
} else {
sizeBefore = userDataBox.getSize();
}
MetaBox metaBox;
if ((metaBox = Path.getPath(userDataBox, "meta")) == null) {
metaBox = new MetaBox();
userDataBox.addBox(metaBox);
}
XmlBox xmlBox = new XmlBox();
xmlBox.setXml(text);
metaBox.addBox(xmlBox);
现在你已经添加了这些框。不幸的是,该文件包含引用实际视频/音频样本的其他框。这些引用对于文件的开头是绝对的,必须进行调整,因为您可能在文件的开头和实际的音频/视频样本之间插入了数据。
needsOffsetCorrection(...)方法检查数据是否真的插入到filestar和samples之间。 correctChunkOffsets(...)然后他实际校正存储在stco(ChunkOffsetBox)中的偏移量。
long sizeAfter = userDataBox.getSize();
if (needsOffsetCorrection(tempIsoFile)) {
correctChunkOffsets(tempIsoFile, sizeAfter - sizeBefore);
}
videoFileOutputStream = new FileOutputStream(videoFilePath + "_mod.mp4");
tempIsoFile.getBox(videoFileOutputStream.getChannel());
我希望这有助于您了解MP4中的MP4和元数据是如何工作的。祝你好运!