Metadata toevoegen in een Shoutcast-stream

Pagina: 1
Acties:
  • 300 views sinds 30-01-2008
  • Reageer

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Topicstarter
Hoi, ik ben bezig met een webapplicatie die onder andere muziek van een server naar een client kan streamen middels een shoutcast-stream. Dat werkt allemaal prima. Vandaag ben ik bezig geweest om metadata aan die stream toe te voegen, zodat je in je winamp kunt zien hoe het liedje heet dat je momenteel hoort.

Ik krijg 't alleen niet voor elkaar. Iedere keer als ik metadata aan de stream toevoeg krijg ik bliebjes en klikjes door de muziek heen te horen. Ik heb zowel een stream van mezelf opgeslagen als een stream van shoutcast.com die wel werkt.

Ik zie geen verschillen, maar bij mijn stream geeft winamp aan dat er geen metadata is, terwijl winamp dat bij de andere stream wel zegt.

Links naar shoutcast-metadata-protocol beschrijvingen:
http://www.smackfu.com/stuff/programming/shoutcast.html
http://en.wikipedia.org/wiki/SHOUTcast

Mijn sourcecode. (het werk gebeurt in de methode streamMetaData).


Output van het begin van mijn stream (uit frustratie de header helemaal 1:1 overgenomen uit de variant hieronder):
code:
1
2
3
4
5
6
7
8
9
10
11
12
ICY 200 OK
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-name:FREQUENCE3 - www.frequence3.fr - No ads ! It's only HITS live from Paris France ! - French Webradio
icy-genre:Top 40 Dance Pop Rock
icy-url:http://www.frequence3.fr
content-type:audio/mpeg
icy-pub:1
icy-metaint:4096
icy-br:192

ID3...(mp3-data)


Output van een commerciele stream:
code:
1
2
3
4
5
6
7
8
9
10
11
12
ICY 200 OK
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-name:FREQUENCE3 - www.frequence3.fr - No ads ! It's only HITS live from Paris France ! - French Webradio
icy-genre:Top 40 Dance Pop Rock
icy-url:http://www.frequence3.fr
content-type:audio/mpeg
icy-pub:1
icy-metaint:32768
icy-br:192

UÔë7æÍUDX» ýçŸ... (mp3-data)


Ik heb ook wat gezocht in de sourcecode van ICEcast en XMMS, maar daar word ik niet erg veel wijzer van. Iemand ervaring met shoutcast??

Siditamentis astuentis pactum.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Hmmm, ik ziou er een keer een sniffer op loslaten, kijken of je daar nog verschillen ziet. Overigens zie ik in "regel 9 & 12" wel een verschil, maar ik neem aan dat je dat zelf ook gezien had?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Soultaker
  • Registratie: September 2000
  • Nu online
De code waar je naar linkt stemt niet overeen met de output die je in je post geeft. Klopt dat wel?

Ik zie je sowieso al een extra newline character printen vóór je header; dat lijkt me niet goed. Verder vraag ik me af of die printstream wel network newlines ("\r\n") stuurt (dat is platformafhankelijk).

Krijg je helemaal geen informatie over je stream te zien (dus ook niet die informatie uit de notices) dan gaat er waarschijnlijk wat fout bij het versturen van de headers. Logisch dat daarna de metadata ook niet meer goed geparset wordt.

Verder lijkt je code me wel kloppen (specifiek het rekenen met buffers e.d. ziet er goed uit).

edit:
Oh ja, RobIII heeft ook gelijk: probeer eens een sniffer! (Voor Windows: Analyzer; allerlei platforms, ook Windows: Ethereal)

[ Voor 23% gewijzigd door Soultaker op 15-09-2006 21:27 ]


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Topicstarter
Soultaker schreef op vrijdag 15 september 2006 @ 21:24:
De code waar je naar linkt stemt niet overeen met de output die je in je post geeft. Klopt dat wel?
Hmm.. ik begrijp niet precies wat je hiermee bedoelt. Misschien heb ik ondertussen weer een commit gedaan?

Het verschil in regen 9 en 12 betreft een ander interval voor de metadata. Ik stuur de metadata (voor zover ik kan nagaan) ook netjes op die intervallen; dat moet goed zijn.

Ik denk dat ik inderdaad even met een sniffer en hexeditor aan de gang moet.

Siditamentis astuentis pactum.


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Topicstarter
Ik heb een originele stream opgeslagen van shoutcast.com. Als ik deze stream via mijn eigen webserver naar winamp stuur dat klikt en plopt 't, terwijl de bitjes 1:1 hetzelfde zijn (heb ik gechecked door mijn stream op te slaan en te vergelijken het het origineel).

Ik denk dat ik voordat ik de stream start nog wat speciale headers naar buiten moet sturen ofzo? Ik ben in elk geval weer een stukje verder dankzij allerlei gesnif.

edit:
Ik ben weer wat verder

Ik krijg uit m'n sniffer de volgende response uit m'n applicatie:
code:
1
2
3
4
5
6
7
8
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Date: Sat, 16 Sep 2006 15:26:44 GMT
Connection: close

ICY 200 OK
icy-notice1:<BR>This stream requires <a h...
etc etc.

De bovenste 5 regels wil ik niet hebben, dat hebben de originele streams ook niet. Ik gebruik bij wijze van test nu al een HTTPServletResponse in plaats van een WebResponse om m'n output naartoe te schrijven, maar dat haalt nog niets uit. Ik probeer nog eens of er nog meer Response-achtige objecten zijn die ik kan gebruiken. Iemand een idee welke ik moet hebben?

edit:
Ik ben eruit!

In de code waarin ik de stream opzette schreef ik de shoutcast-headers middels een printstream in de datastream. Het moet anders: je moet ze gewoon in de http-headers zetten.
code:
1
2
    _response.setHeader("icy-notice1","notice1");
    _response.setHeader("icy-notice1","notice2");

Zo dus! Woei!

[ Voor 56% gewijzigd door Varienaja op 16-09-2006 18:39 ]

Siditamentis astuentis pactum.