为icecast服务器开发客户端

STe*_*TeN 9 streaming mp3 aac icecast

我正在为icecast服务器开发客户端(www.icecast.org).任何人都可以告诉我,他们用于流媒体内容的格式是什么?

我正在查看他们的页面,但根本没有关于流格式的信息.

然后我检查了Wireshark跟踪,由于我的理解,我在200 OK响应GET请求时收到的音频数据的格式,它只是一个没有包含任何元数据的普通二进制音频数据,因此与SHOUTcastHTTP相比较直播(HLS)它是相对简单的方法.

是对的吗?有经验吗?

Wireshark跟踪片段:

GET /bonton-128.mp3 HTTP/1.1
Host: icecast3.play.cz
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-US
Accept-Encoding: gzip, deflate
Connection: keep-alive


HTTP/1.0 200 OK
Content-Type: audio/mpeg
icy-br:128
ice-audio-info: ice-samplerate=44100;ice-bitrate=128;ice-channels=2
icy-br:128
icy-description:Radio Bonton
icy-genre:Pop / Rock
icy-name:Radio Bonton
icy-pub:0
icy-url:http://www.radiobonton.cz
Server: Icecast 2.3.2
Cache-Control: no-cache

Here are then aac or MPEG data
Run Code Online (Sandbox Code Playgroud)

感谢致敬,

斯登

Bra*_*rad 15

为了您的目的,Icecast和SHOUTcast是等价的.

他们都使用私有的HTTP版本.实际上,您可以创建一个简单的HTTP请求并使用标准的HTTP客户端库,它几乎总能正常工作.唯一不同的是SHOUTcast将返回ICY 200 OK而不是HTTP 200 OK响应.

现在,如果您提出请求,就像上面所做的那样,您将获得一个可以直接播放的标准音频流.正如您所指出的,MP3和AAC几乎都是专门使用的,但也可以使用其他格式.

如果您需要元数据,则必须告诉服务器您已准备好接收它.您必须在请求中添加此标头:

Icy-MetaData:1
Run Code Online (Sandbox Code Playgroud)

一旦你这样做,你会在响应中看到另一个标题返回给你,例如icy-metaint:8192,这意味着每8192个字节,你将收到一大块元数据.

我不会详细介绍,因为这已经有了很好的记录.无需重新打字:

使用PHP从音频流中提取音轨信息

http://www.smackfu.com/stuff/programming/shoutcast.html

但是,如果您有任何疑问,请将它们发布在StackOverflow上并将其标记为icecast或shoutcast,我们将很乐意为您提供帮助.