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

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

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

--ОБНОВИТЬ

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

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):

/**
 * 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?


person The Student    schedule 10.06.2010    source источник


Ответы (3)


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

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

IBM Alphaworks имеет чистую библиотеку декодера MP4 на Java, но, возможно, она излишня для ваших нынешних нужд. .

person mdma    schedule 15.06.2010
comment
В проекте mp4parser нет ни svn, ни загрузок. Я пытаюсь с JMF + Jffmpeg, но у меня с этим проблемы. - person The Student; 16.06.2010
comment
@Tom - исходники mp4parser есть - я только что проверил исходники из mp4parser.googlecode.com/svn /багажник - person mdma; 16.06.2010
comment
Пробовали ли вы использовать isoViwer? Я запустил его только для того, чтобы посмотреть, и он показывает вам композицию, включая блок треков, содержащий фрагменты, содержащие семплы. - person mdma; 17.06.2010
comment
В пакете класса есть ошибка: com.coremedia.iso.gui.GenericSamplePane строка 50 The method getSampleDescriptionBox() in the type TrackMetaData is not applicable for the arguments (long) - person The Student; 17.06.2010
comment
И удалить аргумент не работает. Я открыл задачу для проекта: code.google.com/p/ mp4parser/issues/detail?id=1 - person The Student; 17.06.2010
comment
Я также пытаюсь использовать инструментарий IBM, у меня нет документации, только образцы. И, как ни странно, в примерах есть только xml-файлы, ничего о java-файлах. - person The Student; 17.06.2010
comment
Это работало с IBMPlayerForMpeg4SDK.jar, я опубликую код ниже вопроса. Спасибо! - person The Student; 17.06.2010

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

person Curtis    schedule 11.06.2010
comment
Я не видел декодера на чистом java, везде используются нативные библиотеки. Если вы найдете его, я был бы рад услышать об этом! - person Curtis; 24.06.2010
comment
Xuggler теперь объединяет родные файлы с предоставленным JAR-файлом, и нет необходимости в DLL! - person SpellingD; 26.01.2013

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

person Aaron Digulla    schedule 10.06.2010