2010-06-10 6 views
10

Mp3-файлы можно обрабатывать с помощью этого mp3 SPI support, но я не нахожу что-то похожее на файлы mp4.Есть ли Java API для файлов mp4?

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

--update

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

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

--ANSWER

Вот ответ кода с использованием намек @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; 
} 

-

Связанные, независимый язык, вопрос: Anyone familiar with mp4 data structure?

ответ

13

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

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

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

+0

Проект mp4parser не имеет svn или загрузок. Я пытаюсь использовать JMF + Jffmpeg, но мне сложно с этим справиться. –

+0

@Tom - Есть источники mp4parser - я только что проверил источники из http://mp4parser.googlecode.com/svn/trunk/ – mdma

+2

@TomBrito Я действительно пытаюсь, но этот проект слишком низок в документации .. –

0

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

+0

Кстати, в котором пакет java является MPlayer? Может быть, это может быть полезно. –

+0

MPlayer - это инструмент командной строки. –

8

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

+0

Разве нет что-то с файлами jar, а не с dll? Я бы предпочел .. –

+0

Я не видел декодер с чистой java, все использует собственные библиотеки. Если вы найдете его, я бы ЛЮБЛЮ, чтобы услышать об этом! – Curtis

+0

О, неважно. Просто прочитайте принятый ответ. – Curtis