2

アイスキャストストリーミングラジオから曲名を抽出したいと思っています。icy-genre、icy-namenのものを取得しています。曲名ではありません。ストリームから抽出できますか?

4

1 に答える 1

4

あなたの質問から、あなたはすでに Icy-Metadata: 1 をリクエストに追加していると思います。

「icy-mettaint」応答ヘッダーを読み取る必要があります。これにより、ストリーム内の各メタデータ更新の間に読み取るバイト数がわかります。

以下は疑似コードです。

byteinterval = int(response.getHeader("icy-metaint"))
stream = response.getBodyStream()
stream.read(byteinterval)
metadata_len = byte(stream.read(1)) * 16
metadata = stream.read(metadata_len)

メタデータは次のようになります。

StreamTitle='Some Song Name Stream Client Sent';StreamUrl='http://someurl.com/';

残念ながら、完全なメタデータ バッファのエンコーディング、または StreamTitle のコンテンツのいずれにも、絶対的な標準はありません。

曲名には、アルバム名、アーティスト名、完全な曲名、またはその他のフィールドが含まれる場合と含まれない場合があります。

メタデータ バッファ自体は、UTF-8 である場合とそうでない場合があります。何を注入するかを決定するのは、ストリーミング クライアント次第です。ほとんどの適切なクライアントは、非 ASCII データの送信を強制された場合に UTF-8 を使用しますが、すべてではありません (Windows-1521 や UTF-16 などのネイティブ エンコーディングを送信する場合もあります)。

メタデータの更新を取得し続けたい場合は、「byteinterval」長のバイトのブロックを消費してメタデータの更新をさらに取得するか、後でストリームを切断してポーリングすることができます。

于 2011-03-10T23:13:04.187 に答える