有没有适用于mp4文件的Java API?

11

可以使用mp3 SPI支持处理Mp3文件,但我没有找到类似于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 数据结构吗?

3个回答

15

Mp4是一种容器格式——要能够找到其中音频的持续时间,首先必须从容器中解析出内容。你可以使用isobox mp4parser提取mp4文件的内容。

一旦完成此操作,你会得到原始音频数据。如果它是Java支持的格式(如wav、mp3等),那么你只需要像处理wav文件一样打开这个文件即可。最初,你可能会将音频提取到一个单独的文件中,以简化操作并更轻松地进行调试。当此功能正常工作时,你可以使用InputStreamFilter在提取音频内容的同时直接从mp4中提取,因此无需额外的外部文件。

IBM Alphaworks提供了一个纯Java MP4解码库,但对于目前的需求可能有些过度。


mp4parser项目没有svn或下载。我正在尝试使用JMF + Jffmpeg,但是我在使用它时遇到了困难。 - The Student
@Tom - mp4parser的源代码已经在那里了 - 我刚从http://mp4parser.googlecode.com/svn/trunk/检出了源代码。 - mdma
你试过isoViwer吗?我只是为了看看启动它,它会显示组成部分,包括一个“轨道”框,其中包含“块”,这些块包含样本。 - mdma
一个类在它的包中出现了错误:com.coremedia.iso.gui.GenericSamplePane第50行TrackMetaData类型中的getSampleDescriptionBox()方法对参数(long)不适用 - The Student
我也在尝试使用IBM工具包,但是没有文档,只有示例。而且奇怪的是,这些示例只有XML文件,没有Java文件。 - The Student
显示剩余2条评论

8
Xuggler(http://www.xuggle.com/xuggler/)提供了我见过的最好的Java封装FFMPEG的方法-它可以让您解码几乎任何文件中的图像,然后随心所欲地处理这些图像。

我还没有见过一个纯Java解码器,所有的解码器都使用本地库。但如果你找到了一个,我会非常乐意听听! - Curtis
2
Xuggler现在将本地文件与提供的JAR文件结合起来,无需DLL! - SpellingD

0

您没有说明您想要做什么。如果您只是想播放文件,您可以使用MPlayer并通过ProcessBuilder API和stdio远程控制它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接