android - MediaPlayer无法播放服务器中的某些音频文件

标签 android audio android-mediaplayer

我正在尝试实现在线灵修赞美诗流Android应用程序。我正在尝试使用Android SDK框架提供的MediaPlayer类直接从网站服务器流式传输这些音频文件。

这是我的MediaPlaybackUtility.java的代码

public class MediaPlaybackUtility {
    static boolean isMediaPlaying = false;
    static MediaPlayer mMediaPlayer = new MediaPlayer();

    static void playPauseBhajan(String fileURL) {
        if(!mMediaPlayer.isPlaying()) {
           try {
                mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                mMediaPlayer.setDataSource(ONLINE_AUDIO_URL);
                mMediaPlayer.prepareAsync();
                mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        mMediaPlayer.start();
                        isMediaPlaying = true;
                    }
                });
            } catch (IOException e) {
                // TODO: handle exception
            }
        } else {
            mMediaPlayer.pause();
            isMediaPlaying = false;
        }
    }

    static void stopBhajan() {
        mMediaPlayer.stop();
        isMediaPlaying = false;
    }
}

我在ONLINE_AUDIO_URL的位置输入了保存在服务器上的音频文件的URL,但是在使用MediaPlayer类时,我有一些奇怪的经历。 MediaPlayer类正在播放某些文件,而没有播放其他文件,我无法理解问题出在哪里。

以下是上述代码正在播放的音频文件的链接,没有任何错误:
1. testsong_20sec.mp3
2. TheRadiance.m4a
3. WaitingfortheEnd.m4a

以下是MediaPlayer无法播放的链接:
1. ShapeofYou.mp3
2. AreyDwalPalon.mp3
3. KrishnaTheme.mp3
4. BataoKahaMilegaShyam.mp3

然后,我尝试为MediaPlayer设置一个OnErrorListener,以便在流传输这些文件时出现一些错误,我可以将这些错误注销,因此我在mMediaPlayer.prepareAsync();之后添加了这些行,但是当我将URL更改为MediaPlayer无法播放,没有错误记录在Logcat中。
mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
    @Override
    public boolean onError(MediaPlayer mp, int what, int extra) {
        Log.e("MEDIAPLAYER", "Can't play media.");
        return false;
    }
});

然后像这些一样,将这些MP3文件转换为M4A格式
AreyDwarPalonm4a.m4a,但还是没有运气,MediaPlayer仍未从服务器播放此文件。

我也在网上和各处搜索过,但找不到与我的特定问题相关的任何内容。在我第一次使用MediaPlayer和音频文件时,也许我在这里忽略了一些基本概念,但主要的混淆部分是,它正在播放服务器上保存的一些文件,而不是其他文件。

最佳答案

我认为您应该在mMediaPlayer.prepareAsync()之类的之前添加此侦听器

mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
    @Override
    public boolean onError(MediaPlayer mp, int what, int extra) {
        Log.e("MEDIAPLAYER", "Can't play media.");
        return false;
    }
});
mMediaPlayer.prepareAsync();

关于android - MediaPlayer无法播放服务器中的某些音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47992667/

相关文章:

Android:使用 registerContentObserver() 在联系人更改时收到通知

android - 如何测量可组合物?

audio - 无需语音识别即可检测多个声音

javascript - 将 PCM 数据附加到 MediaSource

android - 在 OnCompletionListener 中使用 MediaPlayer get 添加对象

android - 在许多 fragment 之间向后导航的简单方法是什么?

java - 如何将引用(不可序列化)从一个 Activity 传递到另一个 Activity ?

android - 如何播放安卓通知声音

Android MediaPlayer 在某些设备上不播放声音

android - Android Media Player播放两次后停止