从外部服务器流式传输mp3文件

时间:2014-06-04 08:32:52

标签: c# windows-phone-8 windows-phone audio-streaming

我正在开发Windows Phone 8应用程序。我需要在我的应用程序中从远程服务器流式传输.mp3声音文件。

我尝试使用MediaElement

private MediaElement media;
// Constructor of class
            media = new MediaElement();
            media.Source = new Uri(string.Format("{0}b10en_US.mp3", mp3HostName), UriKind.Absolute);
            media.MediaFailed += media_MediaFailed;
            media.MediaEnded += media_MediaEnded;
            media.MediaOpened += media_MediaOpened;
            media.Loaded += media_Loaded;
            media.BufferingProgressChanged += media_BufferingProgressChanged;

// In a method I call the following
media.play();

然而,没有任何声音播放。我在mediaelement的事件中添加了断点,但没有一个被解雇。

我已仔细检查过,mp3文件的URI是正确的。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

试试这个:

        string url = "http://traffic.libsyn.com/slashfilmcast/Davidmichod.mp3";//your url link
        // Constructor
        public MainPage()
        {
            InitializeComponent();
            Microsoft.Xna.Framework.FrameworkDispatcher.Update();
            Song track = Song.FromUri("Sample Song", new Uri(url));
            MediaPlayer.Play(track);

        }

using Microsoft.Xna.Framework.Media; //获取MediaPlayer

答案 1 :(得分:1)

您可以在引发媒体开启事件后播放mp3。我认为你的方法(你在调用play的方法是在引发媒体打开事件之前调用的。

你可以在mediaOpened事件和你的方法(播放)中实现一些黑客攻击。像

private bool isMediaLoaded = false;
private bool isPlayCalled = false;
private void PlayMP3()
{
    if(isMediaLoaded)
       media.Play();
    else
       isPlayCalled = true;
}
void MediaElement1_MediaOpened(object sender, RoutedEventArgs e)
{
    isMediaLoaded = true;
    if(isPlayCalled)
        MediaElement1.Play();

}