2012-11-20 6 views
2

J'essaie de faire un mediaplayer dans les chansons en streaming android d'Amazon S3. J'ai rendu les chansons dans mon seau publiques et ça marche bien quand je les stream avec le bowser. Mais quand ça vient à Android, ça me jette une exception comme ça.FileNotFoundException Amazon S3

11-20 01:28:37.720: W/System.err(736): java.io.FileNotFoundException: /https:/s3.amazonaws.com/soul-media/mp3s/1234.mp3: open failed: ENOENT (No such file or directory) 

ici est mon code pour le joueur

MediaPlayer mid= new MediaPlayer(); 
    try { 
     FileInputStream fid= new FileInputStream("https://s3.amazonaws.com/soul-media/mp3s/1234.mp3"); 
     mid.setDataSource(fid.getFD()); 
     mid.prepare(); 
     mid.start(); 
    } catch (IllegalArgumentException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

Il a travaillé avec Android 4.1, mais ne fonctionne pas avec 2.2, peut-il être la question? J'ai aussi essayé d'autres URL que Amazon S3, ça marche. Est-ce que c'est quelque chose avec Amazon?

Répondre

0

Y a-t-il une raison pour laquelle vous ne pouvez pas simplement ignorer la création du FileInputStream et appeler le mid.setDataSource("https://s3.amazonaws.com/...") via this overload? Est-ce que ça marche?

Edit: Apparemment, au lieu d'appeler prepare pour les flux, vous devraient appeler prepareAsync qui doit retourner immédiatement, comme ceci:

MediaPlayer mid = new MediaPlayer(); 
try { 
    mid.setDataSource("http://soul-media.s3.amazonaws.com/mp3s/1234.mp3"); 
    mid.setOnPreparedListener(new OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
      mp.start(); 
     } 
    }); 
    mid.setOnErrorListener(new OnErrorListener() { 
     @Override 
     public boolean onError(MediaPlayer mp, int what, int extra) { 
      return false; 
     } 
    }); 
    mid.prepareAsync(); 
} catch (IllegalArgumentException e) { 
    e.printStackTrace(); 
} catch (IllegalStateException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

Est-ce que l'aide?

+0

Oui, je l'ai aussi essayé. Mais ça me donne une erreur: Parpare Failed – ghycy15

+0

Ooh, je l'ai. Je pense que le MediaPlayer ne prend peut-être pas en charge HTTPS, vous avez donc besoin de l'URL HTTP, qui est différente. Utilisez ceci: "http://soul-media.s3.amazonaws.com/mp3s/1234.mp3" Modifiez la source en conséquence. J'ai eu ça pour travailler sur ma machine. – Hexar

+0

ne fonctionne toujours pas, il a dit erreur (-38,0) – ghycy15