验证视频编码是否为H.264

时间:2012-12-05 23:59:57

标签: java h.264 aac xuggle xuggler

我需要验证视频文件是否是(在Java中):

  • 视频是H.264编码
  • 音频是AAC编码

我看过JMF和Xuggle。

Xuggle可以更轻松地加载和解码文件并将其转换为另一种格式,但我还是无法弄清楚如何确定我已经加载的文件的编码。

所以我想知道Xuggle是否有能力简单地返回Video&amp ;;音频编码文件有或者我需要读取文件的位来自行确定吗?

如果我需要自己确定,有人可以指出我对H.264格式的一些文件

2 个答案:

答案 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");
}