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 "";
    }

  

时间: 2024-11-11 23:18:52

C#获取视频文件播放长度的相关文章

Android必知必会-获取视频文件的截图、缩略图

背景 公司最近要求给我负责的APP加上视频录制和发布的功能,我简单的完成了基本的录制和视频压缩功能,后来发现发布接口需要上传视频的截图,网上搜索了一下资料,在这里整理一下. 代码实现 /** * 获取视频文件截图 * * @param path 视频文件的路径 * @return Bitmap 返回获取的Bitmap */ public static Bitmap getVideoThumb(String path) { MediaMetadataRetriever media = new Me

android 中获取视频文件的缩略图(非原创)

在android中获取视频文件的缩略图有三种方法: 1.从媒体库中查询 2. android 2.2以后使用ThumbnailUtils类获取 3.调用jni文件,实现MediaMetadataRetriever类 三种方法各有利弊 第一种方法,新视频增加后需要SDCard重新扫描才能给新增加的文件添加缩略图,灵活性差,而且不是很稳定,适合简单应用 第二种方法,实现简单,但2.2以前的版本不支持 第三种方法,实现复杂,但比较灵活,推荐使用 下面给出三种方法的Demo 1.第一种方法: publi

Android:通过ThumbnailUtils类获取视频文件的缩略图

在视频播放器上经常会看到,有很多的视频缩略图,本文讲的就是通过ThumbnailUtils类获取视频文件的缩略图; 运行截图如下: 代码如下: MainActivity.java: package com.vrinux.thumbnailutilsdemo; import android.app.Activity; import android.graphics.Bitmap; import android.media.ThumbnailUtils; import android.os.Bund

获取视频停止播放时已经播放的时间

获取停止,暂停时视频已经播放的时间主要靠注册通知,当暂停或停止时响应通知时间,获取当前已经播放的时间,同时也可以在视频开始播放时给一个播放时间,从当前播放时间播放视频,用此方法来达到播放视频从上次播放时间开始播放 主要代码 MPMoviePlayerViewController *mPlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:self.itemVideoUrl]]; [

PHP + NGINX 控制视频文件播放,并防止文件下载

最简单的方法是使用NGINX的 internal 功能 server {    listen 80;    server_name www.xxx.com;     location / {        index index.php index.html index.htm;        root  /xxx; if (!-e $request_filename) {         rewrite ^/index.php(.*)$ /index.php?s=$1 last;      

python获取视频文件信息

import os import sys import xlwt from moviepy.editor import VideoFileClip file_dir = u"G:/视频目录/" #定义文件目录 class FileCheck(): def __init__(self): self.file_dir = file_dir def get_filesize(self,filename): u""" 获取文件大小(M: 兆) "&quo

java获取音频文件播放时长

方法一: 在项目开发过程中,需要获取音视频文件时长.查询资料后发现 JAVE能够完美得到想要的结果,JAVE项目简介如下: The JAVE (Java Audio Video Encoder) library is Java wrapper on the ffmpeg project. Developers can take take advantage of JAVE to transcode audio and video files from a format to another. I

java 处理获取视频文件时长

现在所做的项目需要获取视频的时长.因为jdk1.5的api没看到有这个方法.所以在网上找了一下,发现jave这个项目.Encoder这个类有个方法: MulitimediaInfo中有个getDuration() 这便是我要找的答案 试验代码加上 因为返回的为毫秒,实际情况需要转换.

[原]通过配合ffmpeg.exe获取视频文件时长

import subprocess import os import time def getTime(flvpath,fid): #file_str = '1.flv' file_str = flvpath wg = subprocess.Popen(['ffmpeg.exe', '-i', file_str], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) (standardout, junk) = wg.communicate() an