Android MediaPlayer不会播放来自网址的音乐

时间:2015-08-12 00:05:20

标签: android audio media-player

我有一个提供文件上传和下载功能的服务器端webapp和一个Android应用程序,它将音乐文件上传到网站上,然后通过某个URL请求上传的文件。

我的网址结构如下:http://mywebsite:8080/api/v1/files/fileById?fileId=<file_id>

当我试图从网络浏览器中获取文件时,它运行正常;浏览器下载文件,操作系统可以播放。但是,当我尝试将之前描述的URL放入MediaPlayer作为数据源时,我得到了java.io.IOException: setDataSource failed.

MediaPlayer用法代码:

private void startPlaying(Uri fileUri) {
    mediaPlayer = new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

    try {
        mediaPlayer.setDataSource(this, fileUri);
        mediaPlayer.prepareAsync();
        mediaPlayer.setOnPreparedListener(preparedPlayer -> preparedPlayer.start());
    }
    catch (IOException e) {
        LogUtil.loge(LOG_TAG, e);
        stopPlaying();
        return;
    }

    mediaPlayer.setOnCompletionListener(mp -> stopPlaying());
}

private void stopPlaying() {
    if (mediaPlayer == null) { return; }
    mediaPlayer.stop();
    mediaPlayer.reset();
    mediaPlayer.release();
    mediaPlayer = null;
}

UPD:也许我必须实现服务器端文件的直接链接。所有用于播放来自URL的音乐的样本都要求直接指向该文件的URL。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

如果您想播放来自网址的音乐,则必须输入字符串参数。

更改为:

private void startPlaying(String url) {

    mediaPlayer = new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

    try {
        mediaPlayer.setDataSource(url);
        mediaPlayer.prepareAsync();
        mediaPlayer.setOnPreparedListener(preparedPlayer -> preparedPlayer.start());
    }
     catch (IOException e) {
        LogUtil.loge(LOG_TAG, e);
        stopPlaying();
        return;
    }

    mediaPlayer.setOnCompletionListener(mp -> stopPlaying());
}

答案 1 :(得分:0)

我想我可以关闭这个问题,因为我已经通过使用URL来检查我的代码正确性,因为外部服务工作正常。我发现这个问题在我的服务器端应用程序中存在问题。 Android应用代码是正确的。

相关问题