1

icecast サーバーからストリームをダウンロードしていますが、次のようにしてヘッダーの情報を取得できます。

 URLConnection cn = new URL(mediaUrl).openConnection();   
    cn.connect();   

    int pos=1;
    String x;
    String y;

while (cn.getHeaderField(pos) != null) { x=cn.getHeaderFieldKey(pos); y = cn.getHeaderField(x); Log.e(":::::",""+x+" : "+y); 位置++; }

これを行うと、受信したすべてのヘッダーが次のように表示されます。

content-type : audio/mpeg icy-br : 64 ice-audio-info : ice-samplerate=22050;ice-bitrate=64;ice-channels=2 icy-br : 64 icy-description : RadioStation icy-genre : クラシック、ニューエイジ、アンビエント icy-name : RadioStation 例 icy-private : 0 icy-pub : 1 icy-url : http://exampleradio.com server : Icecast 2.3.2 cache-control : no-cache

ただし、mplayer でストリームを開くと、次のようになります。

 ICY Info: StreamTitle='artist - album - trackname' 

曲を変更するたびに、新しいトラック情報が送信され、mplayer で同じように表示されます。

Android では、icy-info を読み込もうとすると、返されるのは null だけです。また、ストリームからバッファリングしているときに、ヘッダーから新しい情報を取得するにはどうすればよいですか? 次のようなバッファリング中に存在することを既に知っているもののヘッダーを読み取ろうとしても、

  Log.e(getClass().getName()," "+cn.getHeaderField("icy-br"));

返されるのは null だけです。

これが理にかなっていることを願っています。リクエストに応じてさらにコードを投稿できます。

4

2 に答える 2

1

この質問は古いと思いますが、この課題に直面している他の人のために、私はこのプロジェクトを使用しています: http://code.google.com/p/streamscraper/アイスキャスト ストリームからトラック情報を取得します。Androidで使用していますが、これまでのところ期待どおりに動作しています。

于 2011-10-12T14:00:25.577 に答える
0

必要なのは setDataSource() と URL を文字列として渡すことだけです。それから prepareAsync() と mp.setOnPreparedListener(this); を使用する必要があります。などなど、MediaPlayer のバッファリングが完了したときに気付くでしょう。あとは mp.start(); だけです。PS: アプリケーションを破棄するときは、mp.stop、mp.reset、および mp.release を忘れないでください。;) ICY 情報を読み取る方法をまだ考えています... 独自のバッファリング メカニズムを作成してバッファ ファイルを書き込む (FileDescriptor で MediaPlayer を初期化する) か、時々別の接続を確立して確認する必要があります。 ICY情報タグを付けて接続を閉じます...もっと良いアイデアはありますか?

于 2010-11-19T08:40:50.777 に答える