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 だけです。
これが理にかなっていることを願っています。リクエストに応じてさらにコードを投稿できます。