Есть ли Java API для файлов mp4?

Mp3-файлы можно обрабатывать с помощью этого поддержка mp3 SPI, но я не нашел что-то похожее на файлы mp4.

любая помощь будет оценили.

--UPDATE

что я хочу сделать, это получить размер файла, как я делаю с файлами wave, используя этот код:

AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);
AudioFormat format = audioInputStream.getFormat();
long audioFileLength = file.length();
int frameSize = format.getFrameSize();
float frameRate = format.getFrameRate();
float durationInSeconds = (audioFileLength / (frameSize * frameRate));

--ответ

вот код ответа, используя подсказку @mdma (IBM toolkit):

/**
 * Use IBMPlayerForMpeg4SDK to get mp4 file duration.
 * 
 * @return the mp4File duration in milliseconds.
 */
public static long getMp4Duration(File mp4File) throws IllegalStateException, IOException {
PlayerControl playerControl = PlayerFactory.createLightweightMPEG4Player();
playerControl.open(mp4File.getAbsolutePath());
long mili = playerControl.getDuration();
// int sec = (int) ((mili / 1000) % 60);
// int min = (int) ((mili / 1000) / 60);
// System.out.println("IBM Tookit result = " + min + ":" + sec);
return mili;
}

--

связанные, язык независимый, вопрос: кто-нибудь знаком со структурой данных mp4?

3 ответов


Mp4-это формат контейнера - чтобы найти продолжительность звука внутри, вы должны сначала проанализировать содержимое контейнера. Вы можете извлечь содержимое файла mp4 с помощью mp4parser isobox.

Как только вы это сделаете, у вас будут необработанные аудиоданные. Если это один из поддерживаемых форматов в java (wav, mp3 и т. д..) тогда вы можете просто открыть этот файл, как вы уже сделали для wavs. Первоначально вы, вероятно, извлечете аудио в отдельный файл, для простоты и облегчения отладки. Когда это работает, вы можете сделать извлечение встроенным-вы реализуете InputStreamFilter, который извлекает аудиоконтент из mp4 на лету, поэтому никаких дополнительных внешних файлов не требуется.

IBM Alphaworks имейте чистую библиотеку декодера java MP4, но это, возможно, излишне для ваших текущих потребностей.


Xuggler (http://www.xuggle.com/xuggler/) предоставляет лучшую оболочку Java для FFMPEG, которую я видел , -это позволит вам декодировать изображения почти из любого файла, а затем делать с ними все, что вам нравится.


вы не указываете, что вы хотите сделать. Если вы просто хотите воспроизвести файлы, вы можете использовать MPlayer и управлять им удаленно через ProcessBuilder API и stdio.