我需要验证视频文件是(在 Java 中):
- 视频采用 H.264 编码
- 音频是 AAC 编码的
我研究过 JMF 和 Xuggle。
Xuggle 使加载和解码文件并将其转换为另一种格式变得更加容易,但我还无法弄清楚如何确定我已经加载的文件的编码。
所以我想知道 Xuggle 是否能够简单地返回文件具有的视频和音频编码类型,还是我需要读取文件的位来自己确定这一点?
如果我需要自己确定这一点,有人可以指点我一些关于 H.264 格式的文档吗
所以我查看了 Xuggler 的解码演示并找到了我的答案,因此对于将来寻找类似解决方案的任何人来说,这里是我编写的代码:
// create a Xuggler container object
IContainer container = IContainer.make();
if(container.open(file.getPath(),IContainer.Type.READ,null) < 0) {
return false;
}
// query how many streams the call to open found
boolean isH264 = false;
boolean isAAC = false;
int numStreams = container.getNumStreams();
for(int i = 0; i < numStreams; i++)
{
// find the stream object
IStream stream = container.getStream(i);
// get the pre-configured decoder that can decode this stream;
IStreamCoder coder = stream.getStreamCoder();
if (coder.getCodecID() == ID.CODEC_ID_H264) {
isH264 = true;
}
if (coder.getCodecID() == ID.CODEC_ID_AAC) {
isAAC = true;
}
}
if (container !=null)
{
container.close();
container = null;
}
return isH264 && isAAC;
这是 JCodec ( http://jcodec.org ) 的几行代码:
MovieBox movie = MP4Util.parseMovie(new File("path to file"));
Assert.assertEquals(movie.getVideoTrack().getSampleEntries()[0].getFourcc(), "avc1");
for (TrakBox trakBox : movie.getAudioTracks()) {
Assert.assertEquals(trakBox.getSampleEntries()[0].getFourcc(), "mp4a");
}