我有一个提供文件上传和下载功能的服务器端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。
有什么建议吗?
答案 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应用代码是正确的。