MediaPlayer在AMR音频文件上调用setDataSource失败

4
01-15 00:57:08.660: WARN/System.err(25286): java.io.IOException: setDataSourceFD failed.: status=0x80000000
01-15 00:57:08.660: WARN/System.err(25286):     at android.media.MediaPlayer.setDataSource(Native Method)
01-15 00:57:08.660: WARN/System.err(25286):     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:854)
...

当试图从应用程序缓存目录播放本地AMR音频文件时,会发生问题。这种情况在HTC Magic和HTC Desire上发生。AMR音频文件是由SonyEricsson xperia x10 mini录制的,并从互联网下载。

MediaPlayer是以下方式创建的:

MediaPlayer player = new MediaPlayer();
player.setOnCompletionListener(this);
player.setOnErrorListener(this);
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
 FileInputStream fis = new FileInputStream(filePath);
 player.setDataSource(fis.getFD());
} catch (Exception e) {
 ...
}

有什么想法吗?
1个回答

1
我注意到在不同的设备上,某些setDataSource调用可能会失败(可能是由于特定平台播放器的怪癖)。例如,使用setDataSource(FileDescriptor)失败,而使用setDataSource(Context,Uri)setDataSource(String)则可以正常工作。
尝试使用其他方法,看看是否可以解决问题。

我尝试使用setDataSource(String filePath)方法,但是我在应用程序缓存目录中使用了音频文件,而MediaPlayer无法访问它。但是使用FileDescriptor可以解决问题,但并不总是有效。 - plugmind

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