我希望这可以让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
从需要身份验证的服务器进行流式传输有任何其他想法?
答案 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);