如何通过分析字节模式来确定音频流类型

Posted

技术标签:

【中文标题】如何通过分析字节模式来确定音频流类型【英文标题】:How to determine the audio stream type by analising byte patterns 【发布时间】:2014-01-27 07:05:42 【问题描述】:

我刚刚开始为 android 构建一个 iternet 无线电接收器应用程序,它适用于 .mp3 和 .pls 扩展 URL。

我发现有很多流站只是通过IP地址和端口号(例如//101.102.103.104:8080)给出的。

我的问题是,如果我从此类 URL 接收到大量字节,我如何确定音频流的类型(是 wav 还是 mp3 或 pls 或其他),以便应用解码器?

谢谢

【问题讨论】:

【参考方案1】:

文件扩展名在 HTTP 中没有意义。从原始数据中嗅探内容类型很困难,并不总是可靠且效率低下。正确的方法是查看Content-Type 响应标头。以下是流的典型标头:

Cache-Control:no-cache
Content-Type:audio/mpeg
Expires:Mon, 26 Jul 1997 05:00:00 GMT
icy-br:256
icy-genre:Drum and Bass Jungle
icy-name:Drum and Bass - Digitally Imported Premium
icy-notice1:<BR>This stream requires <a href="http://www.winamp.com/">Winamp</a><BR>
icy-notice2:SHOUTcast Distributed Network Audio Server/Linux v1.9.8<BR>
icy-pub:0
icy-url:http://www.di.fm
Pragma:no-cache
Server:Icecast 2.3.3-kh7

内容类型audio/mpeg 表示 MP3(或其他一些 MPEG 音频流,但我只见过 MP3)。还有很多其他的,比如audio/aacp或者audio/ogg

【讨论】:

以上是关于如何通过分析字节模式来确定音频流类型的主要内容,如果未能解决你的问题,请参考以下文章

如何确定在线流的音频格式?

通过点击流分析确定热门主题,Apache Spark + Kafka 组合了解一下!

RTMP消息详细介绍

为啥缓冲区大小会影响音频数据?

如何分析音频回调

Java代码Bug分析插件 FindBugs