2017-10-04 5 views
0

Je joue une vidéo en utilisant MediaElement. Maintenant, je veux obtenir sa durée totale avant de le jouer. Comment est-ce possible?Comment obtenir la durée totale d'une vidéo en utilisant MediaElement de UWP

FileOpenPicker openPicker = new FileOpenPicker(); 
foreach (string extension in FileExtensions.Video) 
{ 
    openPicker.FileTypeFilter.Add(extension); 
} 
StorageFile file = await openPicker.PickSingleFileAsync(); 
// mediaPlayer is a MediaElement defined in XAML 
if (file != null) 
{ 
    var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read); 
    videoMediaElement.SetSource(stream, file.ContentType); 

    var totalDurationTime = videoMediaElement.NaturalDuration.TimeSpan.TotalSeconds;//get value zero 
    var totalDurationTime1 = TimeSpan.FromSeconds(videoMediaElement.NaturalDuration.TimeSpan.TotalSeconds);//get zero 
    videoMediaElement.Play(); 
} 
+1

peut-être que vous devez attendre l'événement MediaOpened et vérifiez la longueur après le chargement du fichier. Selon l'exemple [ici] (https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.mediaelement#Windows_UI_Xaml_Controls_MediaElement_MediaOpened) au moins pour un flux en direct une valeur autre que 0 est ensemble, donc je suppose que dans le cas d'un fichier local sa longueur devrait être définie aussi bien après cet événement – Hannes

Répondre

1

Comme @Hannes dit, si vous voulez obtenir la durée des médias par NaturalDuration propriété de MediaElement classe, vous devez mettre l'extrait de code ci-dessus à l'intérieur MediaOpened poignée d'événements, par exemple:

<MediaElement x:Name="videoMediaElement" MediaOpened="videoMediaElement_MediaOpened"></MediaElement> 

private void videoMediaElement_MediaOpened(object sender, RoutedEventArgs e) 
{ 
    var totalDurationTime = videoMediaElement.NaturalDuration.TimeSpan.TotalSeconds; 
    var totalDurationTime1 = TimeSpan.FromSeconds(videoMediaElement.NaturalDuration.TimeSpan.TotalSeconds); 
} 

En fait, vous pouvez obtenir la durée du fichier vidéo à travers le fichier VideoProperties. Vous pouvez obtenir la durée avant même d'avoir ouvert le fichier.

StorageFile file = await openPicker.PickSingleFileAsync(); 
Windows.Storage.FileProperties.VideoProperties videoProperties = await file.Properties.GetVideoPropertiesAsync(); 
Duration videoDuration = videoProperties.Duration; 
0

utilisé XAML

<TextBox x:Name="startTime" Width="20" Height="20" VerticalAlignment="Bottom" HorizontalAlignment="Right" BorderThickness="1" InputScope="Number" /> 

et

<TextBox x:Name="endTime" Width="20" Height="20" VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="0,0,630,135" BorderThickness="1" InputScope="Number"/> 

puis dans xaml.cs fichier

long x = Int64.Parse(startTime.Text); 
long y = Int64.Parse(endTime.Text); 


var clip = await MediaClip.CreateFromFileAsync(pickedFile); 
clip.TrimTimeFromStart = new TimeSpan(x * 10000000); 
clip.TrimTimeFromStart = new TimeSpan(y * 10000000); 


composition = new MediaComposition(); 
composition.Clips.Add(clip); 
mediaElement.Position = TimeSpan.Zero; 
mediaStreamSource = composition.GeneratePreviewMediaStreamSource((int)mediaElement.ActualWidth, (int)mediaElement.ActualHeight); 
mediaElement.SetMediaStreamSource(mediaStreamSource); 

vous wil obtenir la durée totale en utilisant le code suivant: clip.OriginalDuration.TotalSeconds