Android MediaPlayer.setDataSource在AMR音频文件上失败
…尝试从应用程序缓存目录播放本地AMR音频文件时。它发生在HTC魔术,HTC欲望上。AMR音频文件由SonyEricsson xperia x10 mini录制,并从互联网下载 MediaPlayer的创建方式如下:Android MediaPlayer.setDataSource在AMR音频文件上失败,android,media-player,amr,Android,Media Player,Amr,…尝试从应用程序缓存目录播放本地AMR音频文件时。它发生在HTC魔术,HTC欲望上。AMR音频文件由SonyEricsson xperia x10 mini录制,并从互联网下载 MediaPlayer的创建方式如下: 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.e
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)
...
有什么想法吗?我注意到某些setDataSource调用可能会在不同的设备上失败(可能是由于平台特定播放器的特性)。例如,使用
setDataSource(FileDescriptor)
失败的内容可以与setDataSource(Context,Uri)
或setDataSource(String)
配合使用
尝试使用其他文件之一,看看是否有效。我尝试使用setDataSource(字符串文件路径),但我使用应用程序缓存目录中的音频文件,MediaPlayer无权访问它。不过,它可以使用FileDescriptor,但并不总是这样。
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) {
...
}