Esta es una transmisión SHOUTcast, y sí es posible. No tiene absolutamente nada que ver con las etiquetas ID3. Hace un tiempo escribí un guión para hacer esto, pero ya no lo puedo encontrar. La semana pasada, ayudé a otro chico que tenía un guión bastante completo a hacer lo mismo, pero no puedo simplemente publicar la fuente, ya que no es mío. Sin embargo, lo pondré en contacto con él, si me envía un correo electrónico al [email protected].
De todos modos, aquí está cómo hacerlo usted mismo:
Lo primero que hay que hacer es conectarse al servidor directamente. No use HTTP. Bueno, probablemente puedas usar cURL, pero es probable que sea mucho más complicado de lo que vale. Se conecta a él con fsockopen()
(doc). Asegúrate de usar el puerto correcto. También tenga en cuenta que muchos servidores web bloquearán muchos puertos, pero generalmente puede usar el puerto 80. Afortunadamente, todas las transmisiones SHOUTcast alojadas en AOL usan el puerto 80.
Ahora haga su pedido como lo haría su cliente.
GET /whatever HTTP/1.0
Pero, antes de enviar <CrLf><CrLf>
, incluyen esta nueva cabecera!
Icy-MetaData:1
que le dice al servidor que desea metadatos. Ahora, envíe su par de <CrLf>
.
Ok, el servidor responderá con un montón de encabezados y luego comenzará a enviarle datos. En esos encabezados habrá un icy-metaint:8192
o similar. Ese 8192 es el meta intervalo. Esto es importante, y realmente el único valor que necesitas. Por lo general es 8192, pero no siempre, así que ¡asegúrese de leer este valor!
Básicamente significa que obtendrá 8192 bytes de datos MP3 y luego un trozo de meta, seguido de 8192 bytes de datos MP3, seguidos de un trozo de meta.
Lea 8192 bytes de datos (asegúrese de no incluir el encabezado en este recuento), deséchelos y luego lea el siguiente byte. Este byte es el primer byte de metadatos e indica cuánto tiempo son los metadatos. Tome el valor de este byte (el byte real con ord()
(doc)) y multiplíquelo por 16. El resultado es el número de bytes para leer para los metadatos. Lee esa cantidad de bytes en una variable de cadena para que puedas trabajar.
A continuación, recorte el valor de esta variable. ¿Por qué? Debido a que la cadena está acolchada con 0x0
al final (para que se ajuste uniformemente en un múltiplo de 16 bytes), y trim()
(doc) se encarga de eso para nosotros.
se le dejó con algo como esto:
StreamTitle='Awesome Trance Mix - DI.fm';StreamUrl=''
te dejaré escoger su método de elección para analizar esto. Personalmente, probablemente solo me dividiría con un límite de 2 en ;
, pero ten cuidado con los títulos que contienen ;
. No estoy seguro de cuál es el método del personaje de escape. Un poco de experimentación debería ayudarte.
¡No olvide desconectarse del servidor cuando haya terminado con él!
Hay muchas referencias de metadatos SHOUTcast por ahí. Esta es una buena: http://www.smackfu.com/stuff/programming/shoutcast.html
¿Qué tipo de flujo de audio? –
http://scfire-dtc-aa01.stream.aol.com:80/stream/1003. Esa URL específicamente, pero estoy extrayendo mis datos de una lista de reproducción importada digitalmente (archivo pls). –
Creo que vi algunas clases de procesamiento de audio para metaetiquetas de etiquetas mp3 y similares en phpclasses.org. Echar un vistazo. Hay muchas cosas buenas y, sin saber más sobre qué datos quieres, es difícil recomendar algo específico. –