Mp3文件可以使用这个
mp3 SPI support来处理,但是我没有找到类似于mp4文件的东西.
任何帮助将不胜感激.
–update
我想做的是获取文件的大小,就像使用这个代码的wave文件一样:
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));
– 回答
/** * 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?
解决方法
Mp4是一种容器格式 – 为了能够在内部找到音频的持续时间,您必须首先从容器中解析出内容.您可以使用
isobox mp4parser提取mp4文件的内容.
完成之后,您将拥有原始的音频数据.如果它是java(wav,mp3等)支持的格式之一,那么你可以打开这个文件,就像已经为wav已经完成的那样.最初,您可能会将音频解压缩到一个单独的文件,为了简单起见,调试更简单.当这样工作时,您可以在线提取 – 您实现一个InputStreamFilter,即时从mp4中提取音频内容,因此不需要额外的外部文件.
IBM Alphaworks有一个纯Java MP4解码器库可用,但它可能是为您目前的需求过度.