gpt4 book ai didi

audio - 在不缓冲音频的情况下获取Icecast歌曲标题

转载 作者:行者123 更新时间:2023-12-02 22:23:16 27 4
gpt4 key购买 nike

我想写一个小的JavaScript库,可以为Icecast流获取“正在播放”数据。通过understand,我可以通过向广播流发送HTTP请求来做到这一点,如下所示:

GET /radiotunes_bebop HTTP/1.1
Host: pub2.radiotunes.com
Icy-MetaData:1

然后,服务器将使用一些响应头进行应答。其中之一是 icy-metaint字段,该字段指示将元数据插入流中的时间间隔。元数据将如下所示:
StreamTitle='Dexter Gordon - Jodi';StreamUrl='';

尽管这可以为我获取所需的信息,但是如果您不需要音频本身,效率就不是很高。 (在不播放流的情况下可能就是这种情况。)是否可以在不缓冲音频的情况下获取流标题?我知道我可以抓取HTML来获取它,但是该方法有很大的局限性。

最佳答案

SHOUTcast / Icecast元数据始终位于第一个音频块之后。如果没有音频块,就无法获取流内元数据。

好消息是,这并不像您想象的那样效率低下。大多数站使用8KB元数据间隔。许多使用16KB的间隔。我认为我从未见过大于32KB的元数据间隔。连接后,服务器端将缓冲音频流并刷新此缓冲区。您通常会在第一个或第二个响应数据包中收到元数据。

如果对您有帮助,我有一个free API available for fetching metadata from streams可以满足您的建议。它连接到流,跳过音频数据,解析元数据,然后返回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"
}
}

关于audio - 在不缓冲音频的情况下获取Icecast歌曲标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26817214/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com