11

可以使用此mp3 SPI support处理 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 数据结构的人?

4

3 回答 3

15

Mp4 是一种容器格式 - 为了能够找到内部音频的持续时间,您必须首先将内容解析出容器。您可以使用isobox mp4parser提取 mp4 文件的内容。

完成此操作后,您便拥有了原始音频数据。如果它是 java 中支持的格式之一(wav、mp3 等),那么您可以像对 wavs 所做的那样打开此文件。为了简单起见和更容易调试,最初您可能会将音频提取到单独的文件中。当这工作时,您可以进行内联提取 - 您实现了一个 InputStreamFilter,它可以即时从 mp4 中提取音频内容,因此不需要额外的外部文件。

IBM Alphaworks有一个可用的纯 java MP4 解码器库,但对于您当前的需求,它可能有点过分了。

于 2010-06-15T19:07:38.547 回答
8

Xuggler ( http://www.xuggle.com/xuggler/ ) 提供了我见过的最好的 FFMPEG Java 包装器——它可以让你从几乎任何文件中解码图像,然后做任何你喜欢的事情他们。

于 2010-06-11T19:23:49.003 回答
0

你没有指定你想做什么。如果你只是想播放文件,你可以通过API 和 stdioMPlayer远程使用和控制它。ProcessBuilder

于 2010-06-10T14:40:46.370 回答