2010-11-30 5 views
6

Ich versuche das Shoutcast-Streaming zu meinem MediaElement über MediaStreamSource zu implementieren. Hier ist ein Code mit einigen Grundlagen. Mit der ReadData-Methode kann ich rohe Audiodaten (MP3-Samples) herunterladen, meine Frage ist, wie kann ich den Stream auf die MediaStreamSource einstellen. Auf diese Weise funktioniert es nicht (es kompiliert und es gibt keine Fehler beim MediaFailed-Ereignis, aber ich kann keinen Ton hören). Vielleicht sollte ich all das in meiner benutzerdefinierten ShoutcastMediaStreamSource implementieren? Es gibt kein Problem mit festem Stream, nur mit nicht behobenem. Kann mir jemand einen Rat geben?WP7 Shoutcast mit MediaStreamSource

Auf dem WP7 gibt es keine Möglichkeit, das "useUnsafeHeaderParsing" zu setzen, so dass ich keine HTTP-Header mit Shoutcast-Metadaten bekommen kann - nur Rohdaten. In der ShoutcastMediaStreamSource habe ich Code von ManagedMediaHelpers implementiert.

Dank

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

haben Sie dies herausgefunden, ich versuche, das gleiche zu tun. Irgendwelche Leads? –

+0

Nur für Kicks, übergeben Sie keine ICY-Header, verwenden Sie einfach reguläre HTTP, und laden Sie es mit einem Semikolon in der URL, wie folgt: 'http: //10.12.13.14: 8000 /;' – Brad

Antwort

2

Sie benötigen individuelle Mediastreamsource zu entwickeln.

Sie können den Prototyp finden, die ich hier für eine meiner Projekte entwickelt: https://skydrive.live.com/redir.aspx?cid=eb0868f2135b874c&resid=EB0868F2135B874C!1037&parid=EB0868F2135B874C!169&authkey=!AGSYfCVvCasGArI

+0

Ich bekomme einige Überspringen Sie den Ton alle 5 Sekunden oder so. Bitte beraten Sie, wie wir das vermeiden können? –

+0

Es funktioniert nur für 128-Bit-Rate-Streams. Sonst gibt es "Schimpansen Stimmen" – enadun

0

Try version = 2 im Code. Es funktioniert für mich jetzt nach dem Ändern einer Zeile Code