Поймай метаданные из Icecast-аудио-потока

1

Я хочу получать метаданные с этой станции:

http://ice1.somafm.com/deepspaceone-128-mp3

Чтобы добиться этого, я сделал следующий запрос через оболочку:

$ GET -H "Icy-MetaData: 1" http://ice1.somafm.com/deepspaceone-128-mp3

Хотя я ожидал получить Icy-metaint значение, оно не генерирует никакого вывода.

Я также сделал следующий запрос:

$ HEAD http://ice1.somafm.com/deepspaceone-128-mp3

Это дает:

200 OK
Cache-Control: no-cache, no-store
Connection: Close
Date: Sun, 24 Apr 2016 07:23:14 GMT
Pragma: no-cache
Server: Icecast 2.4.0-kh3
Content-Type: audio/mpeg
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Access-Control-Allow-Headers: Origin, Accept, X-Requested-With, Content-Type
Access-Control-Allow-Methods: GET, OPTIONS, HEAD
Access-Control-Allow-Origin: *
Client-Date: Sun, 24 Apr 2016 07:21:38 GMT
Client-Peer: 173.239.76.148:80
Client-Response-Num: 1
Icy-Br: 128
Icy-Genre: Ambient Space
Icy-Name: Deep Space One: Deep ambient electronic and space music. [SomaFM]
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.5<BR>
Icy-Pub: 0
Icy-Url: http://somafm.com

Что я делаю неправильно?

LaPriWa
источник

Ответы:

1

Вы должны убедиться, что команда, которую вы используете, действительно отправляет этот заголовок.

С помощью завивать это работает просто отлично (см. последнюю строку вывода):

$ curl -H "Icy-MetaData: 1" -v "http://ice1.somafm.com/deepspaceone-128-mp3" >/dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 173.239.76.148...
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Connected to ice1.somafm.com (173.239.76.148) port 80 (#0)
> GET /deepspaceone-128-mp3 HTTP/1.1
> Host: ice1.somafm.com
> User-Agent: curl/7.45.0
> Accept: */*
> Icy-MetaData: 1
> 
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Content-Type: audio/mpeg
< Date: Mon, 25 Apr 2016 04:16:47 GMT
< icy-br:128
< icy-genre:Ambient Space
< icy-name:Deep Space One: Deep ambient electronic and space music. [SomaFM]
< 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.5<BR>
< icy-pub:0
< icy-url:http://somafm.com
< Server: Icecast 2.4.0-kh3
< Cache-Control: no-cache, no-store
< Pragma: no-cache
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Headers: Origin, Accept, X-Requested-With, Content-Type
< Access-Control-Allow-Methods: GET, OPTIONS, HEAD
< Connection: Close
< Expires: Mon, 26 Jul 1997 05:00:00 GMT
< icy-metaint:45000
< 
TBR
источник
Большое спасибо! :-D У меня есть последний вопрос: почему я должен перенаправить вывод в / dev / null?
LaPriWa
1
Это было только для того, чтобы ограничить вывод заголовками, перенаправив тело в / dev / null. В вашем случае вы, вероятно, захотите переварить поток данных и проанализировать в сигнальном «метане».
TBR
1
Лично я бы, наверное, посмотрел на интерфейс их веб-сайта, поскольку там тоже отображаются метаданные. Это может быть проще, чем вырезать его из ручья.
TBR
1
Интерфейс сайта может быть изменен в любое время, что может привести к поломке программ, зависящих от него. Спецификация Shoutcast не изменится в ближайшее время и будет более безопасным методом. Использование метаданных также переносимо на другие серверы shoutcast / icecast, а не только на SoMaFM.
Hydranix