2010-08-30 20 views
7

? Tenía la esperanza de que esto funcionara para obtener el MediaPlayer de Android para transmitir desde una URL mediante autenticación, pero ahora no estoy tan seguro. No tengo problemas para hacer que transmita desde un servidor abierto (sin autenticación), pero no veo ninguna forma de decirle al MediaPlayer que use la autenticación básica, a menos que tal vez funcione el argumento FileDescriptor. Así que he intentado esto, pero tengo el siguiente error:¿Cómo uso FileDescriptor con las URL HTTP

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

Mi código es algo como esto:

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

¿Es correcto decir que una FileDescriptor sólo se puede utilizar con file:// URL locales y no es normal http:// URLs? Si es así, ¿alguien tiene alguna otra idea sobre cómo transmitir desde un servidor que requiere autenticación usando el MediaPlayer de Android?

Respuesta

1

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

No, eso es incorrecto, Java toma la filosofía Unix que "todo es un archivo" y el javadoc reads:

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

Sin embargo, el MediaPlayer sólo puede abrir seekable descriptores de archivos con setDataSource(FileDescriptor)

Quizás puedas probar algo como esto (no probado)

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

En este código, no veo cómo la aplicación sabe que tmp tiene algo que ver con el InputStream en. – froggythefrog

Cuestiones relacionadas