2010-08-30 34 views
7

Android'in MediaPlayer kimlik doğrulamasını kullanarak bir URL'den akış alması için çalışacağını umuyordum ama şimdi emin değilim. Açık bir sunucudan (kimlik doğrulaması olmadan) aktarım için sorunum yok, ancaknumaralı bağlantıyı FileDescriptor argüman çalışmalarını kullanmıyorken temel kimlik doğrulamasını kullanmanın bir yolunu görmüyorum. Yani bu çalıştı ama aşağıdaki hata var:FileDescriptor'u HTTP URL'leriyle nasıl kullanırım?

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

doğru bir FileDescriptor sadece yerel file:// URL'ler ve normal değil kullanılabilir söylemek mi:

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

Benim kod şöyle görünür http:// URL'ler? Öyleyse, herkesin Android'in MediaPlayer'u kullanarak kimlik doğrulama gerektiren bir sunucudan nasıl akış yapılacağı konusunda başka bir fikri var mı?

cevap

1

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

Hayır, yanlış cevap, Java ve javadoc reads "her şeyin bir dosya olduğunu" Unix felsefesi alır:

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

Ancak setDataSource(FileDescriptor)

ile MediaPlayer yalnızca açabilir seekable dosya tanımlayıcıları

Belki böyle bir şey deneyebilirsiniz (test edilmemiş)

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

Bu kodda, uygulamanın tmp'nin InputStream ile ilgisi olduğunu nasıl bildiğini görmüyorum. – froggythefrog

İlgili konular