audio - Icecast 元数据提取在输出音频数据中产生伪影

标签 audio streaming metadata node.js icecast

我正在尝试(在 NodeJS 中):

  1. 连接到 Icecast互联网音频流。例如:http://icecast3.977music.com/comedy
  2. 解析响应 header 并提取 icy-metaint 值。
  3. 将原始音频数据写入文件,同时从音频流中提取元数据字节,以便:
    • 在元数据到达时拦截并解析元数据。
    • 不在输出文件中包含元数据字节,这样就不会因注入(inject)元数据而出现音频失真。

遵循"unofficial" Shoutcast Metadata Protocol来自 SmackFu 的页面,我已经能够做到这一点:

https://gist.github.com/e7474421dcb25e011620

基本上,我能够在预期时提取元数据(要点中包含的流转储的最开始只有 1 个元数据事件)。这部分似乎工作正常。

问题在于,输出 MP3 文件在整个文件中具有明显的音频伪影,大概是在元数据字节到达时。但是,我肯定会提取这些元数据字节并且不将它们包含在输出文件中,所以这是奇怪的部分。

上面链接中的协议(protocol)文档没有说需要对输出文件执行任何其他操作,但显然我仍然做错了一些事情。有谁知道还需要对音频流做什么?预先感谢!

最佳答案

我能够在 Node.js IRC channel 上解决这个问题。我在输出的音频字节数中出现“off by 1”错误,因此导致音频文件无效。

OP 中发布的要点已得到更正,现在可以正常工作。

这个小练习的延续被打包到 Node.JS 模块中,以从 SHOUTcast/Icecast 流中读取音频和元数据。查看node-radio-stream如果你有兴趣。

关于audio - Icecast 元数据提取在输出音频数据中产生伪影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3687617/

相关文章:

sql-server - 获取唯一约束列列表(在 SQL 中)?

PHP ffmpeg 获取元数据缺少标题、作者、评论、艺术家

iphone - 预加载通过iPhone AudioServices播放的声音

java - 使用java播放wav文件

c# - 从经过身份验证的 URL 传输音频

python - 使用Python3——需要为pandas的流输出生成压缩的csv文件

java - 在Java中播放声音文件

c# - C#Google Cloud文字转语音-Wavenet问题

java - 从文件中读取字符串行的有效方法

php - 在 s3 分段上传上设置内容类型元数据