簡體   English   中英

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

[英]How to play last x seconds of media file

我需要播放音頻文件的最后20秒。 我嘗試指定myMediaPlayer Position屬性,但是存在問題。 因為我嘗試播放文件的最后幾秒鍾,所以無法像這樣設置音頻文件的Position屬性:

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

我需要像這樣設置Position屬性

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

問題是音頻文件持續時間的計算。 首先,我不知道文件的持續時間,因此我嘗試在MediaOpened事件處理程序中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();
}

將UnloadedBehavior =“ Manual”添加到media元素。 希望能奏效

而不是做myMediaElement.Stop(); ,執行myMediaElement.Pause();

進行Stop()重置播放器,並且不允許您設置Position 高飛,我知道,但這就是它的原理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM