如何在Close方法调用后重用BackgroundAudioPlayer

时间:2012-12-07 18:55:45

标签: windows-phone-7 mediaelement background-audio

我正在使用MediaElement播放视频,而使用BackgroundAudioPlayer播放音频。

这是一个案例。

我正在通过BackgroundAudioPlayer播放远程音频。 然后我想播放视频,在MediaElement开始播放视频之前我按照BackgroundAudioPlayer最佳实践中的建议调用BackgroundAudioPlayer.Close。

MediaElement and the BackgroundAudioPlayer

Care must be taken when mixing BackgroundAudioPlayer and MediaElement for audio playback.

1. Close() must be called before switching to MediaElement playback.

2. There is only one media queue. Your application cannot pause background audio, play something with MediaElement then resume the background audio stream.

但在播放视频后我想再次播放音频。

// Play audio result
BackgroundAudioPlayer.Instance.Track = new AudioTrack(new Uri(audioSearchResult.Url, UriKind.Absolute), audioSearchResult.Title, null, null, null, 
                AudioPlayer.TrackStateBuffering, EnabledPlayerControls.All);
BackgroundAudioPlayer.Instance.Play();

我在第一行代码中收到InvalidOperationException,说“后台音频资源不再可用”。 那么在使用MediaElement后如何在我的应用程序中重用BackgroundAudioPlayer?

编辑:

如果使用MediaPlayerLauncher而不是MediaElement,它会在第二次播放音频时工作,导致应用程序在MediaPlayerLauncher启动时被逻辑删除。但是有可能在一个应用程序中混合使用MediaElement和BackgroundAudioPlayer!?!?! 似乎是来自MS的另一场噩梦:(

3 个答案:

答案 0 :(得分:2)

在您使用MediaElement播放视频后,您似乎能够继续使用背景音频播放器,您需要在视频结束后和使用任何其他BackgroundAudioPlayer方法之前再次调用BackgroundAudioPlayer.Instance.Close()。

你的例子应该是这样的:

// Play audio result
BackgroundAudioPlayer.Instance.Close();
BackgroundAudioPlayer.Instance.Track = new AudioTrack(new Uri(audioSearchResult.Url, UriKind.Absolute), audioSearchResult.Title, null, null, null, AudioPlayer.TrackStateBuffering, EnabledPlayerControls.All);
BackgroundAudioPlayer.Instance.Play();

答案 1 :(得分:1)

在开始播放媒体元素之前,您必须先调用BackgroundAudioPlayer.Instance.Close()。我已经在WP7.1和WP8仿真器中尝试了这个,它有一个简单的背景音频代理(不是流媒体)。没有这个电话,我一直看到InvalidOperationException s。事情表现得更好。

例如:

    private void ButtonPlayMediaElement(object sender, RoutedEventArgs e)
    {
        BackgroundAudioPlayer.Instance.Close();
        mediaElement.Source = new Uri("http://wpdevpodcast.episodes.s3.amazonaws.com/Episode_093_Were_All_Stickmen.mp3", UriKind.Absolute);
        mediaElement.Play();
    }

此外: 您正在从UI添加曲目,您应该在后台音频代理中的GetNextTrack中执行此操作。

答案 2 :(得分:0)

如果您想在应用中同时使用音频和视频媒体内容,请不要将MediaElementBackgroundAudioPlayer混合使用! 将MediaLauncherBackgroundAudioPlayer一起使用,当然不要忘记在BackgroundAudioPlayer.Instance.Close()之前致电MediaLauncher.Show()