2016-08-04 29 views
0

我必须从服务器URL中播放MP3音频文件。要播放音频,我需要在标头中传递Cookie。所以我用setDatasource(context,uri,headers)来播放媒体。这不适合我。通过传递Cookie作为标头的Android流音频

它给了我错误:源返回错误-1008,10重试左返回源错误-1008,0重试左。

任何人都可以帮我找到解决方案。提前致谢。

MediaPlayer mediaPlayer; 

Map headers = new HashMap(); 
headers.put("Cookie","CloudFront-Signature=xx; Domain=xx; Path=xx"); 
headers.put("Cookie","CloudFront-Policy:xx; Domain=xx; Path=xx"); 
headers.put("Cookie","CloudFront-Key-Pair-Id=xx; Domain=xx; Path=XX"); 

    mediaPlayer = new MediaPlayer(); 
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    mediaPlayer.setDataSource(MediaPlayerService.this, Uri.parse("URL"),headers); 
    mediaPlayer.prepare(); 
    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
       @Override 
       public void onPrepared(MediaPlayer mediaPlayer) { 
        mediaPlayer.start(); 
       } 
      }); 

**Following are the links referred:** 
1. http://stackoverflow.com/questions/731603/android-mediaplayer-urls-with-cookie 
2. http://stackoverflow.com/questions/9727098/android-add-cookie-to-mediaplayer-requests 
3. http://stackoverflow.com/questions/2932362/how-to-stream-authenticated-content-with-mediaplayer-on-android 

回答

0

最后,我通过引用链接“https://github.com/yixia/VitamioBundle/issues/177#issuecomment-48872226”找出解决方案。我可以像下面一样在MediaPlayer标题中添加Cookie。音频播放工作在所有4.0,5.0和6.0的Android版本没有任何问题。希望这可以帮助某人。

重要注意事项添加\ r \ n在最后做了伎俩。感谢上述论坛。

Map<String, String> headers = new HashMap<String, String>(); 

headers.put("Cookie","CloudFront-Policy=xxx; CloudFront-Signature=xxx; CloudFront-Key-Pair-Id=xxx; Domain=xx; Path=xxx\r\n");

mediaPlayer = new MediaPlayer(); 
      Uri uri = Uri.parse("url"); 

      mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      mediaPlayer.setDataSource(context, uri, headers); 
      mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
       @Override 
       public void onPrepared(MediaPlayer mediaPlayer) { 
        mediaPlayer.start(); 
       } 
      }); 
      mediaPlayer.prepare();