1

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

  • 视频采用 H.264 编码
  • 音频是 AAC 编码的

我研究过 JMF 和 Xuggle。

Xuggle 使加载和解码文件并将其转换为另一种格式变得更加容易,但我还无法弄清楚如何确定我已经加载的文件的编码。

所以我想知道 Xuggle 是否能够简单地返回文件具有的视频和音频编码类型,还是我需要读取文件的位来自己确定这一点?

如果我需要自己确定这一点,有人可以指点我一些关于 H.264 格式的文档吗

4

2 回答 2

2

所以我查看了 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;
于 2012-12-06T02:35:29.493 回答
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");
}
于 2013-05-16T19:08:57.930 回答