1

我使用 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 的另一个噩梦:(

4

3 回答 3

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();
于 2014-03-06T20:37:14.667 回答
1

您必须BackgroundAudioPlayer.Instance.Close()在开始播放媒体元素之前调用。我已经在 WP7.1 和 WP8 模拟器中使用简单的后台音频代理(不是流式传输)进行了尝试。没有这个电话,我一直看到InvalidOperationExceptions。有了它,事情表现得更好。

例如:

    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在后台音频代理中执行此操作。

于 2012-12-10T12:16:43.223 回答
0

如果您想在应用程序中同时使用音频和视频媒体内容,请不要MediaElementBackgroundAudioPlayer! 使用MediaLauncherwith BackgroundAudioPlayer,当然不要忘记调用BackgroundAudioPlayer.Instance.Close()beforeMediaLauncher.Show()

于 2012-12-22T15:34:06.303 回答