Есть ли Java API для файлов mp4? - PullRequest
10 голосов
/ 10 июня 2010

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;
}
* * 1016 - * * 1017

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

Ответы [ 3 ]

14 голосов
/ 15 июня 2010

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

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

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

8 голосов
/ 11 июня 2010

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

0 голосов
/ 10 июня 2010

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

...