java 解析mp4文件头,是否有MP4文件的Java API?

Mp3 files can be handled using this mp3 SPI support, but I'm not finding something similar to mp4 files.

Any help would be appreciated.

--UPDATE

What I want to do is get the file's size, as I do with wave files using this code:

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

Here is the answer code using the hint of @mdma (IBM toolkit):

/**

* 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 is a container format - to be able to find the duration of the audio inside, you have to first parse the content out of the container. You can extract the content of an mp4 file using isobox mp4parser.

Once you've done that, you then have the raw audio data. If it's one of the supported formats in java (wav, mp3, etc..) then you can just open this file like you have done for wavs already. Initially you will probably extract the audio to a separate file, for simplicity's sake and easier debugging. When this is working, you can then do the extraction inline - you implement an InputStreamFilter that extracts the audio content from the mp4 on the fly, so no additional external files are required.

IBM Alphaworks have a pure java MP4 decoder library available, but it's possibly overkill for your present needs.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值