【问题标题】:WP7 Shoutcast with MediaStreamSourceWP7 Shoutcast 与 MediaStreamSource
【发布时间】:2010-11-30 23:45:27
【问题描述】:

我正在尝试通过 MediaStreamSource 将 Shoutcast 流式传输到我的 MediaElement。这是一个包含一些基础知识的代码。使用 ReadData 方法我可以下载原始音频数据(MP3 样本),我的问题是如何将流设置为 MediaStreamSource。这样它就不起作用(它编译并且MediaFailed事件没有错误,但我听不到任何声音)。也许我应该在我的自定义 ShoutcastMediaStreamSource 中实现所有这些?固定流没有问题,只有非固定。有人可以给我一些建议吗?

在 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);
        }
    }

【问题讨论】:

  • 你明白了吗,我正在努力完成同样的事情。有什么线索吗?
  • 只是为了好玩,不要传递 ICY 标头,只需使用常规 HTTP,并在 URL 中使用分号加载它,如下所示:http://10.12.13.14:8000/;

标签: windows-phone-7 shoutcast mediastreamsource


【解决方案1】:

您需要开发自定义 MediaStreamSource。

你可以在这里找到我为我的一个项目开发的原型:https://skydrive.live.com/redir.aspx?cid=eb0868f2135b874c&resid=EB0868F2135B874C!1037&parid=EB0868F2135B874C!169&authkey=!AGSYfCVvCasGArI

【讨论】:

  • 我每隔 5 秒左右就会听到一些跳过的声音。请告知我们如何避免这种情况?
  • 它仅适用于 128 比特率的流。否则它会返回“黑猩猩的声音”
【解决方案2】:

在代码中尝试版本 =2。更改一行代码后它现在对我有用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多