我正在尝试使用MediaPlayer
来传输我的网络电台,但我得到了:
MediaPlayer:错误(1,-1004)
来自setDataSource(url)
:
public class MainActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new RetrieveFeedTask().execute();
}
class RetrieveFeedTask extends AsyncTask<String, Void, Void> {
protected Void doInBackground(String... urls) {
try {
String url;
URL completeURL = new URL("http://streaming.radionomy.com/Radio-Mozart.m3u");
BufferedReader in = new BufferedReader(new InputStreamReader(completeURL.openStream()));
while ((url = in.readLine()) != null) { break; }
in.close();
MediaPlayer mp = new MediaPlayer();
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.setDataSource(url);
mp.prepareAsync();
} catch (Exception e) {}
return null;
}
}
}
我检查了网址,如果我把它放在我的浏览器中,它就可以了。我做错了什么? 我有以下权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
答案 0 :(得分:0)
<击> 您尚未将URL传递给setDataSource()。
我看到的唯一网址是completeURL或doInBackground(String ... urls)中的url集合;
但是,url变量是您在completeURL和stream!= url的流中读取的变量。
编辑:
您的评论表明,completeURL指向第一行包含其他网址的文件。但是,您不必只读取completeURL指向的文件的第一行,而是阅读整个文件。
编辑2:
您可能想重新考虑将completeURL重命名为fileListURL(或类似的东西)。由于命名混乱,我的回答和其他发布的内容都误解了你的意图。从现在开始3个月,你在阅读自己的代码时也会犯同样的错误。
编辑3:
正如您正确指出的那样,您的代码只读取completeURL指向的文件的第一行。但是,当我尝试访问给出的示例时,我的浏览器将我重定向到另一个资源。我怀疑setDataSource()需要一个直接指向(没有重定向)的URL到被访问的资源。
击>
此时,似乎传递给setDataSource()的url有问题。你应该对网址进行硬编码并验证它是否有效,然后仔细检查你读出的网址并查看它的错误。
答案 1 :(得分:0)
我的猜测是你正在调用错误的setDataSource
方法。
从你正在使用的documentation方法开始,期待一个FilePath。您需要拨打setDataSource(context, Uri)
。 (要使用的上下文是MainActivity.this
)
您正在使用的文件似乎在最后一行有一个无效的网址。而不是
while ((url = in.readLine()) != null) { break; }
使用
url = in.readLine();
像这样留下你的代码
protected Void doInBackground(String... urls) {
try {
String url;
URL completeURL = new URL("http://streaming.radionomy.com/Radio-Mozart.m3u");
BufferedReader in = new BufferedReader(new InputStreamReader(completeURL.openStream()));
url = in.readLine();
in.close();
URL url = new URL(thisUrl);
Uri.Builder builder;
builder = new Uri.Builder()
.scheme(url.getProtocol())
.authority(url.getAuthority())
.appendPath(url.getPath());
MediaPlayer mp = new MediaPlayer();
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.setDataSource(MainActivity.this,builder.build());
mp.prepareAsync();
} catch (Exception e) {}
return null;
}