C# find the length of a video file

1k Views Asked by At

I am using the following code to find the length of a video file.

  WindowsMediaPlayer windowsMediaPlayer = new WindowsMediaPlayer();
  WindowsMediaPlayer player = windowsMediaPlayer;
  var clip = player.newMedia(strPath);
  WMPLength = $"{TimeSpan.FromSeconds(clip.duration)} ";
  player.close();

The code returns what I expect but there are two problems. One it crashes randomly. It crashes like its out of memory but while I do see memory usage go up it doesn't appear to be enough to crash the program Two it is very slow

Am I missing something in cleaning up the code, a memory leak or is there a better way to do this?

Thank you

1

There are 1 best solutions below

6
jmvcollaborator On BEST ANSWER

First thing first: your method requires WMP installed on the computer, there are many editions without WMP installed oob.

This is an approach i am using and no problems so far (not sure why you need the media player) is it a specific requirement, extension ?

1-Install the following NuGet package, Microsoft.WindowsAPICodePack-Shell https://www.nuget.org/packages/Microsoft.WindowsAPICodePack-Shell

2-Use the code snipet

using Microsoft.WindowsAPICodePack.Shell;
using Microsoft.WindowsAPICodePack.Shell.PropertySystem;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace VideoLenght
{
    internal class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine(GetVideoDuration(@"C:\videos\20190531_005611.mp4"));
            Console.ReadLine();


        }

        public static TimeSpan GetVideoDuration(string filePath)
        {
            using (var shell = ShellObject.FromParsingName(filePath))
            {
                IShellProperty prop = shell.Properties.System.Media.Duration;
                var t = (ulong)prop.ValueAsObject;
                return TimeSpan.FromTicks((long)t);
            }

        }

    }
}