UWP MediaElement 关闭后无法播放

问题描述 投票:0回答:1

首先,我播放

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;
}
c# uwp
1个回答
0
投票

我可以重现您的问题,这是一种意外行为,在 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;
}
© www.soinside.com 2019 - 2024. All rights reserved.