• C#获取视频文件播放长度


    下面两种方法只支持部分视频格式,一般格式mp3,wma等等支持

    1.使用Shell32

    添加引用,选择COM中的Microsoft Shell Controls And Automation引用

            /// <summary>
            /// 长度分钟(支持mp4?)
            /// </summary>
            /// <param name="path"></param>
            /// <returns></returns>
            public static string GetMediaTimeLenMinute(string path)
            {
                try
                {
                    Shell32.Shell shell = new Shell32.Shell();
                    //文件路径               
                    Shell32.Folder folder = shell.NameSpace(path.Substring(0, path.LastIndexOf("\")));
                    //文件名称             
                    Shell32.FolderItem folderitem = folder.ParseName(path.Substring(path.LastIndexOf("\") + 1));
                    if (Environment.OSVersion.Version.Major >= 6)
                    {
                        string mediaLength = folder.GetDetailsOf(folderitem, 27);
                        return mediaLength;
                    }
                    else
                    {
                        string mediaLength = folder.GetDetailsOf(folderitem, 21);
                        return mediaLength;
                    }
                }
                catch (Exception ex) { return null; }
            }
            /// <summary>
            /// 长度秒(支持mp4?)
            /// </summary>
            /// <param name="path"></param>
            /// <returns></returns>
            public static int GetMediaTimeLenSecond(string path)
            {
                try
                {
                    Shell32.Shell shell = new Shell32.Shell();
                    //文件路径               
                    Shell32.Folder folder = shell.NameSpace(path.Substring(0, path.LastIndexOf("\")));
                    //文件名称             
                    Shell32.FolderItem folderitem = folder.ParseName(path.Substring(path.LastIndexOf("\") + 1));
                    string len;
                    if (Environment.OSVersion.Version.Major >= 6)
                    {
                        len = folder.GetDetailsOf(folderitem, 27);
                    }
                    else
                    {
                        len = folder.GetDetailsOf(folderitem, 21);
                    }
    
                    string[] str = len.Split(new char[] { ':' });
                    int sum = 0;
                    sum = int.Parse(str[0]) * 60 * 60 + int.Parse(str[1]) * 60 + int.Parse(str[2]);
    
                    return sum;
                }
                catch (Exception ex) { return 0; }
            }
    

      

    1.使用DirectShowLib.dll

    可在NuGet中搜索到DirectShowLib添加引用

        public static string GetMediaTimeLen(string path)
        {
            var mediaDet = (IMediaDet)new MediaDet();
            DsError.ThrowExceptionForHR(mediaDet.put_Filename(path));// find the video stream in the fileint index;
            var type = Guid.Empty;
            for (int index = 0; index < 1000 && type != MediaType.Video; index++)
            {
                mediaDet.put_CurrentStream(index);
                mediaDet.get_StreamType(out type);
            }
            // retrieve some measurements from the video
            double frameRate;
            mediaDet.get_FrameRate(out frameRate);
            var mediaType = new AMMediaType();
            mediaDet.get_StreamMediaType(mediaType);
            var videoInfo = (VideoInfoHeader)Marshal.PtrToStructure(mediaType.formatPtr, typeof(VideoInfoHeader));
            DsUtils.FreeAMMediaType(mediaType);
            var width = videoInfo.BmiHeader.Width;
            var height = videoInfo.BmiHeader.Height;
            double mediaLength;//这个是视频长度,单位秒
            mediaDet.get_StreamLength(out mediaLength);
            var frameCount = (int)(frameRate * mediaLength);
            var duration = frameCount / frameRate;
            return "";
        }
    

      

  • 相关阅读:
    【转】如何将qlv格式的腾讯视频转换为mp4格式
    【转】qlv文件如何转换成mp4 怎样把下载好的qlv格式视频转换成MP4格式
    PCIe事务层包TLP Header详解
    PCIeのType0与Type1型配置请求与BAR(基地址寄存器)
    PCIeの数据链路层与物理层详解
    PCIe事务层の详解(一)
    PCIe基础篇(二)、协议详解
    PCIe基础篇(一)、基础知识扫盲
    UDP千兆光通信(一)、整体认知与概述
    Xilinx源语-------FDRE
  • 原文地址:https://www.cnblogs.com/cuihongyu3503319/p/7027451.html
Copyright © 2020-2023  润新知