如何将FileDescriptor与HTTP URL一起使用

时间:2010-08-30 02:16:35

标签: android file-descriptor file-uri

我希望这可以让Android的MediaPlayer使用身份验证从URL流式传输,但现在我不太确定。我没有问题从开放服务器流式传输(没有身份验证),但我没有看到任何方式告诉MediaPlayer使用基本身份验证,除非使用FileDescriptor参数工作?所以我尝试了这个,但得到了以下错误:

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

我的代码看起来像这样:

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

FileDescriptor只能与本地file://网址一起使用,而不是普通的http://网址,这是正确的吗?如果是这样,是否有人对如何使用Android MediaPlayer从需要身份验证的服务器进行流式传输有任何其他想法?

1 个答案:

答案 0 :(得分:1)

  

说FileDescriptor只能与本地文件:// URL

一起使用是否正确

不,这是不正确的,Java采用Unix哲学“一切都是文件”和javadoc reads

  

处理表示打开文件,打开套接字或其他字节源或接收器的底层机器特定结构。

但是,MediaPlayer只能使用setDataSource(FileDescriptor)打开可搜索的文件描述符

也许你可以尝试这样的事情(未经测试)

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);