I manually added tags to mp4 video using GoPro - Quik.
According to Chriki answer on superuser and GoProInfo.cpp
HiLight tags are stored in box type HMMT
in milliseconds of mp4 video.
Path = `moov\udta\HMMT`
But I didn't found any tag milliseconds using sannies/mp4parser code
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
ReadableByteChannel chanel = Channels.newChannel(in);
I continue my R&D and got result for this code
IsoFile isoFile = new IsoFile(chanel);
MovieBox movieBox = isoFile.getMovieBox();
List<UserDataBox> userDataBoxes = movieBox.getBoxes(UserDataBox.class);
stringBuilder.append("moov>UserBoxes:\n");
for (int i = 0; i < userDataBoxes.size(); i++) {
stringBuilder.append(userDataBoxes.get(i));
stringBuilder.append("\n");
UserDataBox erDataBox = userDataBoxes.get(i);
for (int i1 = 0; i1 < erDataBox.getBoxes().size(); i1++) {
stringBuilder.append(erDataBox.getBoxes().get(i));
stringBuilder.append("\n");
}
stringBuilder.append("\n");
stringBuilder.append("\n");
}
Output:
moov>UserBoxes:
UserDataBox[MetaBox[HandlerBox[handlerType=mdir;name=��];AppleItemListBox[org.mp4parser.boxes.apple.AppleEncoderBox@619e00b]]]
MetaBox[HandlerBox[handlerType=mdir;name=��];AppleItemListBox[org.mp4parser.boxes.apple.AppleEncoderBox@619e00b]]
update: I got HMMT
with isoviewer.
It is using following library
<dependency>
<groupId>com.googlecode.mp4parser</groupId>
<artifactId>isoparser</artifactId>
<version>1.1.14</version>
</dependency>
Problem still not resolved cause
com.googlecode.mp4parser
IsoFile class doesn't have constructor for ReadableByteChannel
used for retrieving data from remote streams.
The real problem with library is that sannies/mp4parser
doesn't returns UnknownBox
from UserDataBox
while googlecode/mp4parser
does but there is only library that work with video url that sannies/mp4parser. Need to fix or any workaround.
Any solution. Thanks