To jest strumień SHOUTcast, i tak jest to możliwe. Nie ma absolutnie nic wspólnego z tagami ID3. Napisałem skrypt jakiś czas temu, aby to zrobić, ale nie mogę go już znaleźć. W ubiegłym tygodniu pomogłem innemu facetowi, który miał dość kompletny scenariusz, zrobić to samo, ale nie mogę po prostu opublikować źródła, ponieważ nie jest moje. Jednak skontaktuję się z Tobą, jeśli wyślesz mi e-mail pod numer [email protected].
W każdym razie, oto jak to zrobić samemu:
Pierwszą rzeczą, którą trzeba zrobić, to podłączyć bezpośrednio do serwera. Nie używaj protokołu HTTP. Prawdopodobnie możesz użyć cURL, ale prawdopodobnie będzie to o wiele trudniejsze niż jego wartość. Połącz się z nim za pomocą fsockopen()
(doc). Upewnij się, że używasz właściwego portu. Zauważ też, że wiele hostów internetowych blokuje wiele portów, ale zazwyczaj możesz użyć portu 80. Na szczęście wszystkie strumienie SHOUTcast hostowane przez AOL używają portu 80.
Teraz, zrób swoją prośbę tak, jak zrobiłby to twój klient.
GET /whatever HTTP/1.0
Jednak przed wysłaniem <CrLf><CrLf>
, to ten następny nagłówek!
Icy-MetaData:1
To informuje serwer, który chcesz metadanych. Teraz wyślij swoją parę <CrLf>
.
OK, serwer odpowie grupą nagłówków, a następnie rozpocznie przesyłanie danych. W tych nagłówkach będzie icy-metaint:8192
lub podobny. To 8192 jest przedziałem meta przedział. Jest to ważne i naprawdę jedyna wartość, której potrzebujesz. Zwykle jest to 8192, ale nie zawsze, więc koniecznie przeczytaj tę wartość!
Zasadniczo oznacza to, że otrzymasz 8192 bajtów danych MP3, a następnie fragment meta, a następnie 8192 bajtów danych MP3, a następnie fragment meta.
Odczytaj 8192 bajtów danych (upewnij się, że nagłówek nie zawiera nagłówka), odrzuć je, a następnie odczytaj następny bajt. Ten bajt jest pierwszym bajtem metadanych i wskazuje, jak długie są dane meta. Pobierz wartość tego bajtu (rzeczywisty bajt z ord()
(doc)) i pomnóż go przez 16. Wynik jest liczbą bajtów do odczytania dla metadanych. Odczytaj tę liczbę bajtów w zmiennej łańcuchowej, abyś mógł z nią pracować.
Następnie przycinaj wartość tej zmiennej. Czemu? Ponieważ ciąg jest dopełniany na końcu pod 0x0
(aby zmieścił się równomiernie w wielokrotności 16 bajtów), i trim()
(doc) zajmuje się tym dla nas.
Będziesz lewo z czegoś takiego:
StreamTitle='Awesome Trance Mix - DI.fm';StreamUrl=''
dam wybrać metodę z wyboru w celu analizowania tego. Osobiście prawdopodobnie po prostu podzieliłbym limit na 2 na ;
, ale uważaj na tytuły, które zawierają ;
. Nie jestem pewien, jaka jest metoda znaku ucieczki. Trzeba trochę eksperymentować.
Nie zapomnij rozłączyć się z serwerem, gdy skończysz!
Istnieje wiele referencji SHOUTcast MetaData tam. To jest dobry: http://www.smackfu.com/stuff/programming/shoutcast.html
Jakie strumień audio? –
http://scfire-dtc-aa01.stream.aol.com:80/stream/1003. Ten adres URL jest konkretny, ale pobieram moje dane z listy odtwarzania w formacie Digitally Imported (plik pls). –
Myślę, że widziałem niektóre klasy przetwarzania dźwięku dla tagów mp3 meta info i tym podobne na phpclasses.org. Spójrz. Istnieje wiele dobrych rzeczy i nie wiedząc więcej o tym, jakie dane chcesz, trudno jest polecić coś konkretnego. –