【问题标题】:MediaPlayer can't play music from SD StorageMediaPlayer 无法播放 SD 存储中的音乐
【发布时间】:2015-09-14 13:45:21
【问题描述】:

我正在尝试从 ListView 播放音乐(从文件路径获取数据)。但是每次点击都会出现这样的错误:

09-14 09:58:42.996 1229-1276/? W/AudioTrack: AUDIO_OUTPUT_FLAG_FAST 被客户端拒绝

即使我直接使用文件路径,它仍然不起作用。 这是我的代码:

private MediaPlayer mMediaPlayer;
private File dir = new File(Environment.getExternalStorageDirectory() + "/MyOwnMusicFolder");
private File[] files;

public void playSong(int position){   //position of the item in the ListView
    if(mMediaPlayer !=null) {
        if(mMediaPlayer.isPlaying()){
            mMediaPlayer.pause();
        }

        try {


            mMediaPlayer.setDataSource(dir + File.separator + files[position].getName());
            mMediaPlayer.prepare();
            mMediaPlayer.start();
        }
       catch (IOException e){
    //something...
        }

    }
}

编辑:我正在使用 Android Studio + Android Studio Emulator

编辑2:我的mp3文件完全正常

【问题讨论】:

  • 你有读取权限吗?
  • @MetaSnarf 是的,我有它
  • 代码的哪一部分出现错误?请发布您的堆栈跟踪
  • @MetaSnarf 当我单击该项目(这意味着歌曲)时,歌曲无法播放,并收到错误“AUDIO_OUTPUT_FLAG_FAST 被客户端拒绝”。如果我知道是哪一部分,我就不会问这个问题了!

标签: android media-player android-mediaplayer android-sdcard


【解决方案1】:

“很可能,敲击声音获得了 AUDIO_OUTPUT_FLAG_FAST 以便尽可能使用低延迟播放,但 AudioTrack 类认为轨道设置与低延迟音频输出不兼容,因此该标志被删除并且轨道被视为好像没有设置标志一样开始。所以我不会认为这是值得担心的事情。

至于flag被拒绝的原因;我仍然会说最可能的原因是采样率不匹配。您链接到的问题中的日志似乎已添加到 AOSP 的此提交中。但是,如果我们查看the master branch of the code base used on many Qualcomm-based devices,我们会看到在采样率不匹配的情况下,它仍然具有“AUDIO_OUTPUT_FLAG_FAST 被客户端拒绝”日志。您获得的日志取决于您的设备上运行的确切实现(即您正在运行的设备和 Android 版本)。”

答案来自here。感谢迈克尔

这很可能是由采样率不匹配引起的,如果它在实际设备上运行,它不应该影响程序运行时。 Ref:

【讨论】:

  • 所以...我需要做的就是在实际设备上运行它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多