2010-08-30 17 views
7

J'espérais que cela fonctionnerait pour obtenir le MediaPlayer d'Android à diffuser à partir d'une URL en utilisant l'authentification, mais maintenant je ne suis pas si sûr. Je n'ai aucun problème à le faire passer en streaming à partir d'un serveur ouvert (pas d'authentification) mais je ne vois aucun moyen de dire MediaPlayer pour utiliser l'authentification de base, sauf peut-être en utilisant l'argument FileDescriptor? J'ai donc essayé cela, mais obtenu l'erreur suivante:Comment utiliser FileDescriptor avec des URL HTTP

IllegalArgumentException: Expected file scheme in URI http://www.myserver.com/music.mp3 

Mon code ressemble à ceci:

File f = new File(new URL("http://www.myserver.com/music.mp3").toURI()); 
FileInputStream fis = new FileInputStream(f); 
mediaplayer.SetDataSource(fis.getFD()); 

Est-il exact de dire qu'un FileDescriptor ne peut être utilisé avec file:// locales URL et pas normal http:// URL? Si oui, est-ce que quelqu'un a d'autres idées sur la façon de diffuser à partir d'un serveur qui nécessite une authentification en utilisant le MediaPlayer d'Android?

Répondre

1

Is it correct to say that a FileDescriptor can only be used with local file:// URL

Non, c'est incorrect, Java prend la philosophie Unix que "tout est un fichier" et le javadoc reads:

handle to the underlying machine-specific structure representing an open file, an open socket, or another source or sink of bytes.

Cependant, le MediaPlayer ne peut ouvrir descripteurs adressable de fichiers avec setDataSource(FileDescriptor)

Peut-être que vous pouvez essayer quelque chose comme ceci (non testé)

URLConnection connection = new URL(url).openConnection(); 
// Authenticate the way you can 
connection.setRequestProperty("HeaderName", "Header Value"); 

// Save into a file 
File tmp = new File(getCacheDir(), "media"); 
InputStream in = connection.getInputStream(); 
FileOutputStream out = new FileOutputStream(tmp); 
// TODO copy in into out 
mediaPlayer.setDataSource(tmp); 
+0

Dans ce code, je ne vois pas comment l'application sait que tmp a quelque chose à voir avec InputStream. – froggythefrog