ceturtdiena, 2010. gada 2. septembris

Radio 101 interneta straumējums (stream)



Viss sākās ar to, ka kāds Twitterī papļurkstēja, ka ir/top tāds Laacz veidojums, kas savāc no «Radio 101» pašlaik skanošo dziesmu nosaukumus, izmantojot icy - http://dev.laacz.lv/icy/.

Intereses dzīts, arī sāku pētīt, kas un kā.
Iepriekšējā pieredze ar interneta radio straumējumu uzbūvi man ir tuvu nullei.

Interneta uzgāju lapu SmackFu: Shoutcast Metadata Protocol , kur uzskatāmi parādīts, kas un kā notiek ar pašu straumējumu un kā no straumējuma dabūt pašlaik skanošas dziesmas nosaukumu.

Varu kaut kur kļūdīties, bet, kā es to saprotu un kā man tas strādāja, izmantojot PHP programmēšanas valodu.

Pieslēdzoties interneta radio straumējumam, pēc neliela datu apjoma saņemšanas tiek nosūtīts arī atskaņotas dziesmas nosaukums.
Dziesmas nosaukums tiek nosūtīts tikai tad, kad klients, tas kurš klausās interneta radio, pieslēdzas pirmo reizi vai, ja mainās dziesma straumējumā.
Ja klients pēkšņi pārtrauc pieslēgumu (vai viņam pārtrūkst pieslēgums) pie interneta radio straumējuma, bet pēc brīža atkal pieslēdzas tam, tad interneta radio serveris atkal nosūta pašreiz atskaņotas dziesmas nosaukumu.

Normālā gadījumā straumējums turpinās un dziesmas nosaukumi no interneta radio servera tiek sūtīti tikai tad, kad mainās atskaņotā dziesma.


Dziesmas nosaukumi tiek nosūtīti tai pat straumējumā speciālā datu fragmentā, ko sauc par MetaData.


Tehniski tas varētu būt šādi:

1. Klients pieslēdzas straumējuma serverim un nosūta uz to speciālus header:

Icy-MetaData:1

un User-Agent: (kaut ko, kas nesatur mozilla, piemēram Winamp)

2. Serveris atbild aptuveni, kur headeris ir "icy-metaint:skaitlis", piemēram:

icy-metaint: 16000

icy-metaint norāda pēc cik baitiem tiks nosūtīts MetaData, kas saturēs dziesmas nosaukumu.
Piemērā tas būs pēc 16000 baitiem. Pēc MetaData turpinās straumējuma dati.


3. MetaData garumu nosaka nākošais baits, tas ir icy-metaint noteiktie baiti + 1 baits
Šajā baitā ir ierakstīts MetaData garums (hexadecimal) dalīts ar 16. Tātad MetaData garums būs šī baita vērtība reizināta ar 16.


4. Nolasot MetaData, daļa no MetaData izskatīsies šādi:

StreamTitle='Grupa - Dziesmas nosaukums';

Nolasot datus starp "StreamTitle='" un "';" dabūjam tīru dziesmas nosaukumu.


BTW, Līdzīgi izmantojot šo sistēmu, var saglabāt arī straumējuma mp3 daļas kā datnes uz sava datora.

Var PHP, var Streamripper.

Es varu noklausīties to, ko jūs klausījāties, kamēr es gulēju ;)
5509670949271763612159068849139384432

Nav komentāru:

Ierakstīt komentāru

Jūsu komentārs tiks nosūtīts mājas lapas administratoram, līdz apstiprināšanai tas var nebūt pieejams šī bloga publiskajā daļā.