Android MediaPlayer赢得';不要从URL播放音乐

Android MediaPlayer赢得';不要从URL播放音乐,android,audio,media-player,Android,Audio,Media Player,我有一个服务器端的webapp,它提供文件上传和下载功能,还有一个Android应用,它将音乐文件上传到网站上,然后通过一些URL请求上传的文件 我的URL的结构如下:http://mywebsite:8080/api/v1/files/fileById?fileId= 当我试图从网络浏览器获取文件时,它工作正常;浏览器下载文件,操作系统可以播放它。但当我试图将前面描述的URL作为数据源放入MediaPlayer时,我得到了java.io.IOException:setDataSource失败。

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

我的URL的结构如下:
http://mywebsite:8080/api/v1/files/fileById?fileId=

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

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


有什么建议吗?

如果要播放URL中的音乐,必须输入字符串参数

改为:

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());
}

如果要播放URL中的音乐,必须输入字符串参数

改为:

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());
}

我想我可以结束这个问题,因为我已经通过使用外部服务的URL检查了代码的正确性,该服务运行良好。我发现这个问题是我的服务器端应用程序中的一个问题。Android应用程序代码是正确的。

我想我可以结束这个问题,因为我已经通过使用外部服务的URL检查了代码的正确性,该服务运行良好。我发现这个问题是我的服务器端应用程序中的一个问题。Android应用程序代码是正确的。

不幸的是,
setDataSource
方法中没有包含两个参数的字符串参数。URI onlychange mediaPlayer.setDataSource(这个url);到mediaPlayer.setDataSource(url);java.io.IOException也存在同样的问题:setDataSource失败。遗憾的是,
setDataSource
方法中没有包含2个参数的字符串参数。URI onlychange mediaPlayer.setDataSource(这个url);到mediaPlayer.setDataSource(url);java.io.IOException也存在同样的问题:setDataSource失败。