javascript - JavaScript 从音频中解析元数据 (ICY)
问题描述
我终于找到了一个有用的库来解析音频流中的元数据,这里:https ://github.com/ghaiklor/icecast-parser 。但是,当我发送以下示例中的标头时,我仍然无法获得预期的响应。
第一个函数向广播电台/频道发出请求并获取流:
_makeRequest() {
const request = http.request(this.getConfig('url'));
console.log("Making request to: " + this.getConfig('url'));
request.setHeader('Range', 'bytes=0-');
request.setHeader('User-Agent', 'VLC/2.2.4 LibVLC/2.2.4');
request.setHeader('Icy-MetaData', '1');
request.setHeader('Connection', 'close');
request.once('response', this._onRequestResponse.bind(this));
request.once('error', this._onRequestError.bind(this));
request.end();
return this;
}
当一个对电台的请求被成功调用时,这个函数被调用:
_onRequestResponse(response) {
console.log("Received response!");
console.log("Headers:");
console.log(response.headers['content-type']);
const icyMetaInt = response.headers['icy-metaint'];
console.log("icyMetaInt= " + icyMetaInt);
if (icyMetaInt) {
const reader = new StreamReader(icyMetaInt);
reader.on('metadata', metadata => {
console.log(metadata);
this._destroyResponse(response);
this._queueNextRequest(this.getConfig('metadataInterval'));
this.emit('metadata', metadata);
});
response.pipe(reader);
this.emit('stream', reader);
} else {
this._destroyResponse(response);
this._queueNextRequest(this.getConfig('emptyInterval'));
this.emit('empty');
}
return this;
}
当我在这个 URL (url: ' http://streaming.radionomy.com/70-s-80-sMetal ')上使用这些函数时,控制台中的回复是:
音频/mpeg icyMetaInt=未定义
我明白这里最关键的标题是:
setHeader('Icy-MetaData', '1')
不过,我没有收到“icyMetaInt”。使用其他工具检查 URL 时,该 URL 似乎确实包含元数据。
任何想法这里出了什么问题?谢谢!;
解决方案
请求是 Fetch API 的一部分,在发出跨源请求时,您只能访问有限范围的标头。
推荐阅读
- python - 为什么我的 KernelReg.bw 为负数?它不应该是积极的吗?我的代码有什么问题?
- c# - 仅当执行参数相同时,如何阻止 Web 应用程序中的进程?
- fabricjs - 擦除 Fabric JS 上的线条
- javascript - 如何将 HTTP get 请求的响应保存到 Angular 7 中的 json 文件中?
- sql-server - 总销售额,每个日期的 MTD 销售额
- microservices - 如何使用 vert.x 对运行在不同服务器上的两个微服务进行集群?
- java - Java ResourceBundle.getBundle 如何加载属性文件?
- spring-mvc - 将列表对象从 thymeleaf 发送到控制器
- python-3.x - 从 CSV 文件中删除标题
- javascript - 如何使用 JavaScript 将文本从一个字段复制到另一个选项卡菜单的字段?