如何播放媒体文件的最后x秒

本文关键字:最后 媒体文件 何播放 播放 | 更新日期: 2023-09-27 18:36:53

我需要播放最后 20 秒的音频文件。我尝试指定Position myMediaPlayer的属性,但存在问题。因为我尝试播放文件的最后一秒Position所以我无法像这样设置音频文件的属性:

myMediaPlayer.Position = new TimeSpan(0, 0, 20);

我需要像这样设置Position属性

myMediaPlayer.Position = new TimeSpan(0, 0, DURATION_OF_FILE - 20);

音频文件持续时间的计算是问题所在。首先,我不知道文件的持续时间,因此我尝试在MediaOpened事件处理程序中计算它。

void MediaOpened(object sender, System.Windows.RoutedEventArgs e)
{
    _duration = myMediaElement.NaturalDuration.TimeSpan;
}

要调用MediaOpened我需要开始播放音频文件,所以我被强制编写在构造函数中:

// Just for MediaOpened call
myMediaElement.Play();
// I need not playing file right here, so I stop playing immediately
myMediaElement.Stop();

现在计算持续时间,一切似乎都很好。但是在那次虚假的播放停止操作之后,myMediaPlayer忽略了Position财产!音频文件始终从头开始打开,从设置Position的第一秒开始。

如何解决?

XAML:

<StackPanel>
    <MediaElement  Name="myMediaElement"
                    LoadedBehavior="Manual"/>
    <Button Click="SeekToMediaPosition">Click</Button>
</StackPanel>

。.cs

TimeSpan _duration;
public MainWindow()
{
    InitializeComponent();
    myMediaElement.Source = new Uri("D:/VS_Projects/WpfApplication1/WpfApplication1/Resources/Audio.mp3");
    myMediaElement.MediaOpened += new System.Windows.RoutedEventHandler(MediaOpened);
    myMediaElement.Play();
    myMediaElement.Stop();
}
void MediaOpened(object sender, System.Windows.RoutedEventArgs e)
{
    _duration = myMediaElement.NaturalDuration.TimeSpan;
}

private void SeekToMediaPosition(object sender, RoutedEventArgs args)
{
    var test = (Int32)Math.Truncate(_duration.TotalSeconds) - 20;
    TimeSpan ts = new TimeSpan(0, 0, test);
    myMediaElement.Position = ts;
    myMediaElement.Play();
}

如何播放媒体文件的最后x秒

将 UnloadedBehavior="Manual" 添加到媒体元素。希望它有效

与其做myMediaElement.Stop();,不如做myMediaElement.Pause();

执行Stop()会重置播放器,并且不允许您设置Position。 高飞,我知道,但这就是它的工作原理。