Убедитесь, что кодировка видео H.264.

Мне нужно убедиться, что видеофайл (на Java):

  • Видео в кодировке H.264
  • Аудио закодировано в формате AAC

Я изучил JMF и Xuggle.

Xuggle упрощает загрузку и декодирование файла и преобразование его в другой формат, но я пока не смог понять, как определить кодировку загруженного файла.

Поэтому мне интересно, есть ли у Xuggle возможность просто возвращать тип кодирования видео и аудио, который есть в файле, или мне нужно прочитать биты файла, чтобы определить это самостоятельно?

Если мне нужно определить это самостоятельно, может ли кто-нибудь указать мне документацию по формату H.264?


person CStreel    schedule 05.12.2012    source источник
comment
Почему это важно для вашего приложения? Подразумевают ли эти ограничения кодека другие, неуказанные требования к формату контейнера, профиль H.264 или профиль AAC?   -  person willglynn    schedule 06.12.2012
comment
Это просто гарантия того, что у нас не возникнет проблем с загрузкой изображений или текстовых файлов в виде видеофайлов. Это всего лишь мера предосторожности   -  person CStreel    schedule 06.12.2012


Ответы (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;
person CStreel    schedule 06.12.2012

Это пара строк с 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");
}
person Stanislav Vitvitskyy    schedule 16.05.2013