2010-11-30 18 views
6

我想通過MediaStreamSource實現Shoutcast流媒體到我的MediaElement。這是一些基礎知識的代碼。使用ReadData方法,我可以下載原始音頻數據(MP3樣本),我的問題是如何將流設置爲MediaStreamSource。通過這種方式它不起作用(它編譯並且MediaFailed事件沒有錯誤,但我聽不到任何聲音)。也許我應該在我的自定義ShoutcastMediaStreamSource中實現所有這些?固定流沒有問題,只是不固定。有人可以給我一些建議嗎?WP7 Shoutcast與MediaStreamSource

在WP7上,不可能設置「useUnsafeHeaderParsing」,所以我不能使用shoutcast元數據獲取http頭 - 只有原始數據。 在ShoutcastMediaStreamSource中,我實現了一些ManagedMediaHelpers的代碼。

感謝

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

你有沒有想通了,我試圖讓同樣的事情完成。任何線索? – 2011-01-21 15:03:44

+0

只是踢,不要傳遞一個ICY頭,只是使用普通的HTTP,並在URL中加上一個分號,如下所示:`http://10.12.13.14:8000 /;` – Brad 2011-05-05 14:18:04

回答

0

嘗試版本= 2的代碼。它現在適用於我更改一行代碼後