Android媒体播放器:从HTTPS Url传输音频文件
我必须从应用程序中从Android media player流式传输音频文件。最初,要流式传输的文件来自一个Http://url,我使用代码-Android媒体播放器:从HTTPS Url传输音频文件,android,https,media-player,android-mediaplayer,Android,Https,Media Player,Android Mediaplayer,我必须从应用程序中从Android media player流式传输音频文件。最初,要流式传输的文件来自一个Http://url,我使用代码- public void playSample() { AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() { @Override protected void onPreExecute() {
public void playSample() {
AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute() {
mediaPlayer = new MediaPlayer();
}
@Override
protected Void doInBackground(Void... arg0) {
try {
try {
mediaPlayer.setDataSource("http://an.http.url/");
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException e) {
Log.e("AudioFileError", "Could not open file for playback.", e);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
pd.dismiss();
}
};
task.execute((Void[]) null);
}
例外是
Prepare failed.: status=0x1
请提出解决方案。安卓媒体播放器经过长期努力,我找到了解决方案, 在setDataSource()之前添加以下代码 #更新1
使用此答案的人,请阅读developer.android.com上的警告。警告:许多网站都描述了一个糟糕的替代解决方案,即安装一个什么都不做的TrustManager。如果您这样做,您可能还不如不加密您的通信,因为任何人都可以在公共Wi-Fi热点攻击您的用户,方法是使用DNS技巧通过自己的代理发送用户流量,该代理假装是您的服务器Rajan下面的回答或多或少是正确的,但您可以使用本地代理作为中介来绕过这一限制。有人在我的帖子里提到过。我还没有看过它,所以无法验证它的质量,但如果你搜索,还有其他的例子。使用这个答案的人,请阅读developer.android.com上的警告。警告:许多网站都描述了一个糟糕的替代解决方案,即安装一个什么都不做的TrustManager。如果您这样做,您可能还不如不加密您的通信,因为任何人都可以在公共Wi-Fi热点攻击您的用户,方法是使用DNS技巧通过自己的代理(假装是您的服务器)发送您用户的流量
Prepare failed.: status=0x1
try {
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null, null);
MySSLSocketFactory sf = new MySSLSocketFactory(trustStore);
sf.setHostnameVerifier(MySSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
sf.fixHttpsURLConnection();
HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
} catch (Exception e) {
e.printStackTrace();
}