2010-11-30 9 views
6

Estoy tratando de implementar la transmisión de Shoutcast a mi MediaElement a través de MediaStreamSource. Aquí hay un código con algunos conceptos básicos. Con el método ReadData puedo descargar datos de audio sin procesar (muestras de MP3), mi pregunta es cómo puedo configurar la transmisión a MediaStreamSource. De esta forma no funciona (compila y no hay errores en el evento MediaFailed pero no puedo escuchar ningún sonido). Tal vez debería implementar todos estos en mi ShoutcastMediaStreamSource personalizado? No hay problema con la transmisión fija, solo con no fijo. ¿Alguien puede darme un consejo?WP7 Shoutcast con MediaStreamSource

En el WP7 no hay posibilidad de establecer "useUnsafeHeaderParsing" por lo que no puedo obtener encabezados http con metadatos de shoutcast, solo datos brutos. En el ShoutcastMediaStreamSource he implementado un código de ManagedMediaHelpers.

Gracias

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://radiozetmp3-02.eurozet.pl:8400/;"); 
     request.Method = "GET"; 
     request.Headers["Icy-MetaData"] = "1"; 
     request.UserAgent = "WinampMPEG/5.09"; 
     request.AllowReadStreamBuffering = false; 

     request.BeginGetResponse(new AsyncCallback(RequestComplete), request); 
     allDone.WaitOne(); 

     ShoutcastMediaStreamSource smss = new ShoutcastMediaStreamSource(stream); 
     player.SetSource(smss); // MediaElement 
     player.Play(); 
    } 

    public void RequestComplete(IAsyncResult r) 
    { 
     HttpWebRequest request = (HttpWebRequest)r.AsyncState; 
     HttpWebResponse response = request.EndGetResponse(r) as HttpWebResponse; 
     stream = response.GetResponseStream(); 

     IAsyncResult res = stream.BeginRead(buffer, 0, buffer.Length, callback, null); 

     allDone.Set(); 
    } 

    public void ReadData(IAsyncResult r) 
    { 
     int bytes = stream.EndRead(r); 

     if (bytes == 0) { Debug.WriteLine("No bytes readed"); } 
     else 
     { 
      Debug.WriteLine("readed: " + buffer.Length.ToString()); 
      stream.BeginRead(buffer, 0, buffer.Length, callback, buffer); 
     } 
    } 
+0

has descifrado esto, estoy tratando de hacer lo mismo. ¿Alguna pista? –

+0

Solo por patadas, no pase un encabezado ICY, simplemente use HTTP normal y cárguelo con un punto y coma en la URL, como este: 'http: //10.12.13.14: 8000 /;' – Brad

Respuesta

2

que necesita para desarrollar MediaStreamSource personalizado.

puede encontrar el prototipo de una que he desarrollado para uno de mis proyectos aquí: https://skydrive.live.com/redir.aspx?cid=eb0868f2135b874c&resid=EB0868F2135B874C!1037&parid=EB0868F2135B874C!169&authkey=!AGSYfCVvCasGArI

+0

Estoy obteniendo algunos omita el sonido cada 5 segundos o menos. Por favor, ¿cómo podemos evitar eso? –

+0

Funciona solo para flujos de velocidad de 128 bits. De lo contrario, devuelve "voces de chimpancé" – enadun

0

Try version = 2 en el código. Funciona para mí ahora después de cambiar una línea de código