首先,我播放
MyMediaElement
和CurrentState
如下(打开->暂停->播放)
其次,我停止
MyMediaElementby MyMediaElement.Source = null
代码。当前状态为(已关闭)。在此步骤中,不会发生 MediaEnded() 事件。 (我的期望是如果按下停止按钮,MyMediaElemen
它会变黑)
第三,我又玩了
MyMediaElement
,但是CurrentState
是(opening -> closed)
。 MyMediaElement 仍然显示黑屏。在这一步,我调试在
MediaOpened() event never comes, but MyediaElement_MediaFailed() event occurs with the message "MF_MEDIA_ENGINE_ERR_SRC_NOT_SUPPORTED : HRESULT - 0xC00D3E85" (The media resource is not supported.
)`
第三步,如何像第一步一样再次播放MediaElement? _mediaStreamSource 仍然具有有效值,但为什么步骤 1 可以,步骤 3 失败? 我的源代码如下
private MediaStreamSource _mediaStreamSource;
private DispatcherTimer _mediaPlayerTimer;
...
...
private void btn_play(object sender, RoutedEventArgs e)
{
if (MyMediaElement.CurrentState == MediaElementState.Closed)
{
MyMediaElement.SetMediaStreamSource(_mediaStreamSource);
}
else
{
// do nothing
}
}
private void btn_stop(object sender, RoutedEventArgs e)
{
MyMediaElement.Stop();
MyMediaElement.Source = null;
}
private void MyMediaElement_MediaOpened(object sender, RoutedEventArgs e)
{
MediaElement player = sender as MediaElement;
if (player.NaturalDuration.HasTimeSpan)
{
_mediaPlayerTimer = new DispatcherTimer();
_mediaPlayerTimer.Interval = TimeSpan.FromMilliseconds(100);
_mediaPlayerTimer.Tick += MediaPlayerTimer_Tick;
_mediaPlayerTimer.Start();
}
}
private void MyediaElement_MediaFailed(object sender, ExceptionRoutedEventArgs e)
{
string msg = e.ErrorMessage;
}
我可以重现您的问题,这是一种意外行为,在 MediaStreamSource 多路复用文档中未涵盖。
在我的测试中,如果我像方法
MediaClip
一样使用MediaComposition
和MediaStreamSource
在play_Click
中动态生成AppendVideos_Click
,就没有错误。我将与团队一起检查此行为。根据您的场景,建议您使用与AppendVideos_Click
相同的方法动态生成MediaStreamSource
。或者使用 Visibility
来达到类似的效果。
private void play_Click(object sender, RoutedEventArgs e)
{
if (MyMediaElement.CurrentState == MediaElementState.Stopped)
{
MyMediaElement.Visibility = Visibility.Visible;
}
else
{
// do nothing
}
}
private void stop_Click(object sender, RoutedEventArgs e)
{
MyMediaElement.Stop();
MyMediaElement.Visibility = Visibility.Collapsed;
}