我需要验证视频文件是否是(在Java中):
我看过JMF和Xuggle。
Xuggle可以更轻松地加载和解码文件并将其转换为另一种格式,但我还是无法弄清楚如何确定我已经加载的文件的编码。
所以我想知道Xuggle是否有能力简单地返回Video&amp ;;音频编码文件有或者我需要读取文件的位来自行确定吗?
如果我需要自己确定,有人可以指出我对H.264格式的一些文件
答案 0 :(得分:2)
所以我查看了Xuggler的Decoding Demo并找到了答案,所以对于将来寻找类似解决方案的人来说,我写的代码是:
// 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;
答案 1 :(得分:0)
这是与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");
}