如何在 Android 或 Java 的 mp4 视频中获取 GoPro HiLight 标签
How to get GoPro HiLight tag in mp4 video in Android or Java
我使用 GoPro - Quik 手动将标签添加到 mp4 视频。
根据Chriki answer on superuser and GoProInfo.cpp
HiLight 标签以 mp4 视频的毫秒数 HMMT
存储在盒子类型中。
Path = `moov\udta\HMMT`
但是我使用sannies/mp4parser代码没有找到任何标记毫秒
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
ReadableByteChannel chanel = Channels.newChannel(in);
我继续我的研发并得到了这段代码的结果
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");
}
输出:
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]]
更新: 我用 isoviewer 得到了 HMMT
。
它正在使用以下库
<dependency>
<groupId>com.googlecode.mp4parser</groupId>
<artifactId>isoparser</artifactId>
<version>1.1.14</version>
</dependency>
问题仍未解决原因
com.googlecode.mp4parser
IsoFile class 没有 ReadableByteChannel
的构造函数用于从远程流检索数据。
库的真正问题是 sannies/mp4parser
不 returns UnknownBox
来自 UserDataBox
而 googlecode/mp4parser
有 但是 只有 sannies/mp4parser 与视频 url 兼容的库。需要修复或任何解决方法。
任何解决方案。谢谢
Quik 软件出现问题,它没有像我预期的那样在文件中保存标签。它根据媒体唯一 ID 保存标签。您必须从使用 GoPro 相机创建的 mp4 视频中读取标签。
从 mp4 获取 url 代码片段
InputStream inputStream = new BufferedInputStream(new URL("http://localhost:6582?BRIDGE&%2FGOPR0175.MP4&GOPR0175.MP4&80898399").openConnection().getInputStream());
GoProTagsBox tags = GoProUtil.getHilights(inputStream);
stringBuilder.append("Count: "+tags.getCount());
if(tags.getHiLights() != null){
for (long l : tags.getHiLights()) {
stringBuilder.append("\nHiLight: "+l);
}
}
从 GoPro mp4 文件中获取代码片段
GoProTagsBox tags = GoProUtil.getHilights(new RandomAccessFile(Environment.getExternalStorageDirectory().getAbsolutePath() + "/GOPR0175.MP4", "r"));
两种情况下都工作正常。
使用https://github.com/Qamar4P/JaadAndroid android versions of jaad
我使用 GoPro - Quik 手动将标签添加到 mp4 视频。
根据Chriki answer on superuser and GoProInfo.cpp
HiLight 标签以 mp4 视频的毫秒数 HMMT
存储在盒子类型中。
Path = `moov\udta\HMMT`
但是我使用sannies/mp4parser代码没有找到任何标记毫秒
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
ReadableByteChannel chanel = Channels.newChannel(in);
我继续我的研发并得到了这段代码的结果
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");
}
输出:
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]]
更新: 我用 isoviewer 得到了 HMMT
。
它正在使用以下库
<dependency>
<groupId>com.googlecode.mp4parser</groupId>
<artifactId>isoparser</artifactId>
<version>1.1.14</version>
</dependency>
问题仍未解决原因
com.googlecode.mp4parser
IsoFile class 没有 ReadableByteChannel
的构造函数用于从远程流检索数据。
库的真正问题是 sannies/mp4parser
不 returns UnknownBox
来自 UserDataBox
而 googlecode/mp4parser
有 但是 只有 sannies/mp4parser 与视频 url 兼容的库。需要修复或任何解决方法。
任何解决方案。谢谢
Quik 软件出现问题,它没有像我预期的那样在文件中保存标签。它根据媒体唯一 ID 保存标签。您必须从使用 GoPro 相机创建的 mp4 视频中读取标签。
从 mp4 获取 url 代码片段
InputStream inputStream = new BufferedInputStream(new URL("http://localhost:6582?BRIDGE&%2FGOPR0175.MP4&GOPR0175.MP4&80898399").openConnection().getInputStream());
GoProTagsBox tags = GoProUtil.getHilights(inputStream);
stringBuilder.append("Count: "+tags.getCount());
if(tags.getHiLights() != null){
for (long l : tags.getHiLights()) {
stringBuilder.append("\nHiLight: "+l);
}
}
从 GoPro mp4 文件中获取代码片段
GoProTagsBox tags = GoProUtil.getHilights(new RandomAccessFile(Environment.getExternalStorageDirectory().getAbsolutePath() + "/GOPR0175.MP4", "r"));
两种情况下都工作正常。
使用https://github.com/Qamar4P/JaadAndroid android versions of jaad