Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android媒体播放器:从HTTPS Url传输音频文件_Android_Https_Media Player_Android Mediaplayer - Fatal编程技术网

Android媒体播放器:从HTTPS 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() {

我必须从应用程序中从Android media player流式传输音频文件。最初,要流式传输的文件来自一个Http://url,我使用代码-

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