我想通过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);
}
}
你有没有想通了,我试图让同样的事情完成。任何线索? – 2011-01-21 15:03:44
只是踢,不要传递一个ICY头,只是使用普通的HTTP,并在URL中加上一个分号,如下所示:`http://10.12.13.14:8000 /;` – Brad 2011-05-05 14:18:04