2014-11-06 59 views
0

我在Android上有一个录音应用程序,并且我在朋友的手机上遇到了一个奇怪的问题。MediaPlayer为wav文件抛出IOException

一个录音没有工作,并抛出:

E/MediaPlayer-JNI(5996): QCMediaPlayer mediaplayer NOT present 
E/MediaPlayer(5996): Unable to create media player 
E/com.audioRec.player.MediaPlayer(5996): setDataSourceFD failed.: status=0x80000000 
E/com.audioRec.player.MediaPlayer(5996): java.io.IOException: setDataSourceFD failed.: status=0x80000000 

但打成功在Windows媒体播放器,VLC播放等!!!!!!!!!

Could someone take a look over the header of the "RecordingNotOk.wav" file?

Here are both recordings

回答

1

对于RecordingNotOk.wav文件,它听起来像数据块的指定大小大于文件大小更大: 00 F8 00 0A在小端排序是718848个字节,而整个文件大小只有716844和可用于该块的实际数据大小仅为716800

这个数字可以在这里找到(“数据”后,3号线):

52 49 46 46 24 F0 0A 00 57 41 56 45 66 6D 74 20 RIFF $ð?? WAVE fmt 
10 00 00 00 01 00 02 00 80 3E 00 00 00 FA 00 00 ???? ???? >?? ?ú?? 
04 00 10 00 64 61 74 61 00 F8 0A 00 00 00 00 00 ???? data ?ø?? ???? 

基本上看来你的文件已被截断。一些玩家可能会忽略这一点,并尝试播放文件末尾的任何内容。我猜Android上它试图根据预期的大小首先读取整个文件,因此IOException

+0

非常感谢!所以我需要在加载文件时“修补”头文件...我必须覆盖数据子块大小(wholeFileSize - 44字节)。另外,我必须确保在我写入标题时,这些值是正确的。目前,我增加了来自麦克风的所有数据块大小,并在最后的标题中写入该值。我想我应该根据文件大小计算该值... – 2014-11-22 20:27:21

相关问题