我有一个在应用程序级别运行背景音乐的应用程序,这样当用户浏览页面时音乐不会停止。但是,我也使用了VideoBrush。正如我发现的那样,我不能让两者同时运行,因为VideoBrush在设置源时会崩溃。
我发现如果我在用户尝试使用VideoBrush时将MediaElement的源设置为null,那么一切正常。当然音乐会停止,这让我很懊恼,但没有错误发生。
但是,当用户点击VideoBrush时,我试图让音乐重新开始(开始很好)无济于事。简而言之,我无法重新启动音乐。
这是我的代码:
的App.xaml
<Application.Resources>
<MediaElement x:Key="GlobalMedia" Source="minutelongsong.mp3"
MediaEnded="MediaElement_MediaEnded" Visibility="Collapsed" />
</Application.Resources>
App.xaml.cs
public static MediaElement GlobalMediaElement
{
get { return Current.Resources["GlobalMedia"] as MediaElement; }
}
private void Application_Launching(object sender, LaunchingEventArgs e)
{
var AppMediaElement = App.GlobalMediaElement;
AppMediaElement.Position = TimeSpan.Zero;
AppMediaElement.Play();
}
private void MediaElement_MediaEnded(object sender, RoutedEventArgs e)
{
var AppMediaElement = App.GlobalMediaElement;
AppMediaElement.Position = TimeSpan.Zero;
AppMediaElement.Play();
}
现在正在使用VideoBrush的页面。
MainPage.xaml中
<Canvas x:Name="viewfinderCanvas" Width="480" Height="800" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Collapsed">
<Canvas.Background>
<VideoBrush x:Name="videoBrush" Stretch="Fill">
<VideoBrush.RelativeTransform>
<CompositeTransform x:Name="previewTransform"
CenterX=".5"
CenterY=".5" />
</VideoBrush.RelativeTransform>
</VideoBrush>
</Canvas.Background>
</Canvas>
MainPage.xaml.cs中
private void Button_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var AppMediaElement = App.GlobalMediaElement;
AppMediaElement.Pause();
AppMediaElement.Stop();
AppMediaElement.Source = null; //set it to null to allow the cam to be set.
if ((PhotoCamera.IsCameraTypeSupported(CameraType.Primary)))
{
viewfinderCanvas.Visibility = Visibility.Visible;
cam = new PhotoCamera(CameraType.Primary);
if (Orientation == PageOrientation.PortraitUp || Orientation == PageOrientation.PortraitDown || Orientation == PageOrientation.Portrait)
{
videoBrush.RelativeTransform = new CompositeTransform() { CenterX = 0.5, CenterY = 0.5, Rotation = 90 };
}
videoBrush.SetSource(cam);
}
当用户通过点击屏幕按钮退出相机VideoBrush时,将触发此代码。它配置了凸轮,并且如果用户允许音乐,则尝试再次播放音乐。 但即使使用此代码,音乐也无法播放。
private void zoomout_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (cam != null)
{
cam.Dispose();
}
viewfinderCanvas.Visibility = Visibility.Collapsed;
if (allowingamemusic == true)
{
var AppMediaElement = App.Current.Resources["GlobalMedia"] as MediaElement;
AppMediaElement.Source = new Uri("minutelongsong.mp3", UriKind.RelativeOrAbsolute);
AppMediaElement.Position = TimeSpan.Zero;
AppMediaElement.Play(); //despite this here, it will not play. No error thrown.
}
}
答案 0 :(得分:1)
我在手机应用程序的同一页面中捕捉图像和音频之间来回切换。
您非常接近,但您还必须将videoBrush源设置为其他内容,否则它将不会释放资源。
因此,当您想要使用MediaElement时,请首先像这样处理相机:
cam.Dispose();
viewfinderBrush.SetSource(new MediaElement()); //so it will let go of cam
cam = null;
//now set source for MediaElemet and do whatever
当您再次使用相机时:
mediaElement.Stop();
mediaElement.Source = null; //or else setting the source for the video brush will fail
//now set source for videoBrush and do whatever
老问题,但希望这会对某人有所帮助......我花了几次尝试才弄明白。
答案 1 :(得分:0)
在昨晚写完这篇文章,并在今天早上测试之后,我看到可能发生了什么,但是一旦它停止,我仍然没有重播音乐的问题。
MediaElement.MediaFailed是整个时间被调用的。我发现它正在调用:AG_E_NETWORK_ERROR。当Zune运行且我的设备USB连接到同一台计算机时,抛出此错误。
有人建议我将我的应用程序部署到手机上,关闭zune,然后断开USB连接。我试过这个,一旦我试着重播它,音乐仍然没有播放。这也发生在模拟器上。
仍在抛出相同的AG_E_NETWORK_ERROR。
从那时起,我已经放弃了这个,因为我花了几个小时没有找到如何实现这一点。所以,我已经使用了MediaPlayer类,并将使用它。
------如果有人解决了这个问题,我会给你一个正确答案的复选标记。