8

これが、認証を使用してAndroidMediaPlayerを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はローカルURLでのみ使用できfile://、通常のURLでは使用できないと言うのは正しいhttp://ですか?もしそうなら、Androidを使用した認証を必要とするサーバーからストリーミングする方法について他のアイデアはありますMediaPlayerか?

4

1 に答える 1

0

FileDescriptor はローカルの file:// URL でのみ使用できるというのは正しいですか?

いいえ、それは正しくありません。Java は「すべてがファイルである」という Unix の哲学を採用しており、javadocには次のように書かれています。

開いているファイル、開いているソケット、またはバイトの別のソースまたはシンクを表す、基になるマシン固有の構造へのハンドル。

ただし、 はシーク可能なファイル記述子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);
于 2014-08-22T18:08:15.773 に答える