SHOUTcast/Icecast 元数据总是出现在第一个音频块之后。如果没有音频块,就无法获取流内元数据。
好消息是,这并不像您想象的那么低效。大多数电台使用 8KB 元数据间隔。许多使用 16KB 间隔。我认为我从未见过大于 32KB 的元数据间隔。服务器端将缓冲音频流并在您连接后立即刷新此缓冲区。您通常会在第一个或第二个响应数据包中收到元数据。
如果它对您有帮助,我有一个免费的 API 可用于从流中获取元数据,这完全符合您的建议。它连接到一个流,跳过音频数据,解析元数据,然后返回 JSON。它可以从浏览器中访问。
要求
$.getJSON('http://api.audiopump.co/metadata/getStreamMetadata', {
url: 'http://cdn.audiopump.co/radioreddit/main_mp3_128k',
apiKey: 'YOUR_API_KEY'
}).done(function (data) {
console.log(data);
});
回复
{
"streamInfo": {
"contentType": "audio/mpeg",
"name": "Radio Reddit - Main",
"genres": [
"Indie",
"Rock",
"Talk"
],
"websiteUrl": "http://radioreddit.com",
"isPublic": true
},
"current": {
"filename": "the_Nothingdoers_(evanowe)_Things_We_Should_Forget.mp3",
"StreamTitle": "the Nothingdoers (/u/evanowe) - Things We Should Forget"
}
}