无需播放即可获得视频时长

时间:2012-05-16 21:48:48

标签: c# wpf video

我正在使用MediaTimelineMediaClock来控制WMV视频播放。

Timeline = new MediaTimeline(new Uri(VideoFileName));
Clock = Timeline.CreateClock(true) as MediaClock;

当我查看Clock.NaturalDuration时,值设置为Automatic而不是TimeSpan 包含持续时间Clock

当我将MediaElement分配给NaturalDuration.TimeSpan并开始播放视频时,我现在可以看到{{1}}存在并且正常。

除了为媒体元素分配时钟和播放之外,有没有办法获得视频时长?

即使不使用媒体元素,有没有办法获得持续时间(这将是最好的)?

3 个答案:

答案 0 :(得分:6)

我有类似的需要检查视频长度,所以我读到这个属性在引发MediaOpened事件时可用,否则设置为自动 - 读取此 http://msdn.microsoft.com/en-us/library/system.windows.controls.mediaelement.naturalduration(v=vs.95).aspx

media.MediaOpened += new System.Windows.RoutedEventHandler(media_MediaOpened);
            media.LoadedBehavior = MediaState.Manual;
            media.UnloadedBehavior = MediaState.Manual;
            media.Play();

void media_MediaOpened( object sender, System.Windows.RoutedEventArgs e )
        {
            progress.Maximum = (int)media.NaturalDuration.TimeSpan.TotalSeconds;
            timer.Start();
            isPlaying = true;
        }

答案 1 :(得分:0)

检查HasTimeSpan属性以确保它存在

private void Element_MediaOpened1(object sender, RoutedEventArgs e)
        {
            if (mediaElement_1.NaturalDuration.HasTimeSpan)
                timelineSlider.Maximum = mediaElement_1.NaturalDuration.TimeSpan.TotalSeconds;
        }

答案 2 :(得分:0)

在Win Rt App或Metro C#中获取视频文件的持续时间

string path = ApplicationData.Current.LocalFolder.Path;
StorageFile videoFile = 
        await StorageFile.GetFileFromPathAsync(presentationItem.Slide_path_local);
Windows.Storage.FileProperties.VideoProperties x = 
        await videoFile.Properties.GetVideoPropertiesAsync();
Duration videoDuration = x.Duration;

获取视频文件持续时间的最佳方法