尝试播放mp ** 3文件时出错 来自 Android 应用
中的**资源文件夹我在res文件夹中创建了原始文件夹 这是我正在玩的示例代码
MediaPlayer mediaPlayer = MediaPlayer.create(getBaseContext(), R.raw.b);
mediaPlayer.start();
日志:
09-02 10:44:07.854: INFO/AndroidRuntime(441): NOTE: attach of thread 'Binder Thread #3' failed
09-02 10:44:08.003: DEBUG/AudioSink(34): bufferCount (4) is too small and increased to 12
09-02 10:44:08.224: WARN/AudioFlinger(34): write blocked for 117 msecs, 44 delayed writes, thread 0xb3f0
09-02 10:44:08.283: INFO/ActivityManager(59): Displayed activity com.soundtest/.SoundTestActivity: 511 ms (total 511 ms)
09-02 10:44:13.052: ERROR/MP3Extractor(34): Unable to resync. Signalling end of stream.
我错过了什么或什么?
答案 0 :(得分:2)
在我决定将mp3文件从资产复制到SD后,错误就消失了。当我的数据源设置为uri的SD存储而不是资产时,它工作正常。
答案 1 :(得分:1)
AssetFileDescriptor afd = ctx.getResources().openRawResourceFd(params[0]);
try
{
//final MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.reset();
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());
mediaPlayer.prepare();
mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer arg0) {
mediaPlayer.seekTo(0);
mediaPlayer.start();
});
}
});
afd.close();
答案 2 :(得分:0)
将mp3转换为ogg,错误将消失。我测试了两个文件。 ogg不像mp3那样流畅,但日志中没有显示任何错误。
我再次测试mp3文件,错误不会显示出来。
我认为失败的权限会触发错误,而不是文件格式。
在我的理解中,prepare()将制作音乐文件的图像,以便玩家可以同步一次又一次地播放。但是如果我们没有设置权限,写入被阻止,并且读取(再次播放)和写入变得不同步。所以它“无法重新同步”。
但我不明白为什么它会在每次音乐重播时一次又一次地写。我误解了吗?
恩,关于ogg文件,我不知道为什么它也可以避免错误。
但是没关系,我相信我得到了正确的答案。它是添加这些权限:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>