.net 获取音视频时长

2021-10-22  本文已影响0人  allenjcheng

1.第一种方法:

调用:shell32.dll ,win7下能够,window2008 r2 服务器上 不行。(缘由不知道,有多是声卡驱动没有安装?)

//添加引用:COM组件的Microsoft Shell Controls And Automation

引用shell32底层接口c:windows\system32\shell32.dll,vs自动转换成interop.shell32.dll(注:64位系统和32位系统生成的interop.shell32.dll不同)

               string  file = Request.Form[ "mp3path"  ];
               Shell32.  ShellClass  sh =  new  Shell32. ShellClass ();
               Folder  dir = sh.NameSpace( Path  .GetDirectoryName(file));
               FolderItem  item = dir.ParseName( Path  .GetFileName(file));
               log.Info(  "file:"  + file);
               string  mp3Time =  ""  ;
                 if  ( Environment  .OSVersion.Version.Major >= 6)
                    {
                    mp3Time = dir.GetDetailsOf(item, 27);
                    }
                 else
                    {
                    mp3Time = dir.GetDetailsOf(item, 21);
                    }
                sb.Append(  "文件路径:"  + file +  "\r\n" );
                sb.Append(  "<br />" );
                sb.Append(  "服务器的OSVersion.Version.Major:"  +  Environment .OSVersion.Version.Major);
                sb.Append(  "用Shell32.dll方式测试文件的时长:"  + mp3Time);
                sb.Append(  "<br />" );

2.第二种方法:利用: mediainfo .dll:
MediaInfo.dll
846.3 KB](https://www.evernote.com/shard/s115/sh/cc1039c4-77ae-40ee-8b7f-0db10fe02e3b/42c3c360b8587588/res/e2e7830b-a8eb-4c00-b95a-6c232521fbb4/MediaInfo.dll)

             MediaInfo  MI =  new  MediaInfo ();
             MI.Open(file);
             string  s = MI.Get( StreamKind  .Audio, 0,  "Duration" );
             string  dateTimeStr = Common. TimeHelper  .GetDateTimeStr( Convert .ToInt32(s));
             sb.Append(  "用mediainfo.dll计算时长:"  + dateTimeStr);

同样,也是win7下没有问题,服务器上有问题。

3, 第三种方法:利用:
ffmpeg.zip
5.7 MB](https://www.evernote.com/shard/s115/sh/cc1039c4-77ae-40ee-8b7f-0db10fe02e3b/42c3c360b8587588/res/ec77eba4-fcdc-4840-b3e4-101f7df507c8/ffmpeg.zip)

              //用ffmpeg.exe 获取:

            sb.Append(  "<br />" );

             string  fromffmpeg = Fromffmpeg(file);

            sb.Append(  "fromffmpeg:"  + fromffmpeg);

子方法:

private string Fromffmpeg( string fileName)

    {

         string  duration =  ""  ;

         using  (System.Diagnostics. Process  pro =  new  System.Diagnostics.  Process ())

                {

                    pro.StartInfo.UseShellExecute =  false ;

                    pro.StartInfo.ErrorDialog =  false ;

                    pro.StartInfo.RedirectStandardError =  true ;

                    pro.StartInfo.FileName =  AppDomain .CurrentDomain.BaseDirectory +

"ffmpeg.exe" ;

                    pro.StartInfo.Arguments =  " -i "  + fileName;

                    pro.Start();

                    System.IO.  StreamReader  errorreader = pro.StandardError;

                    pro.WaitForExit(1000);

                     string  result = errorreader.ReadToEnd();

                     if  (! string  .IsNullOrEmpty(result))

                    {

                        result = result.Substring(result.IndexOf(  "Duration: " ) +

( "Duration: " ).Length, ( "00:00:00" ).Length);

                        duration = result;

                    }

                     return  duration;

                }

    }

到此:成功!服务器ok~

上一篇 下一篇

猜你喜欢

热点阅读