asp.net 获取音视频时长 的方法
2015-05-27 20:40
309 查看
http://www.evernote.com/l/AHPMEDnEd65A7ot_DbEP4C47QsPDYLhYdYg/
日志:
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不一样) 参考:http://www.stepday.com/topic/?867
[align=left] string file = Request.Form["mp3path" ];[/align]
[align=left] Shell32. ShellClass sh = new Shell32.ShellClass();[/align]
[align=left] Folder dir = sh.NameSpace(Path .GetDirectoryName(file));[/align]
[align=left] FolderItem item = dir.ParseName(Path .GetFileName(file));[/align]
[align=left] log.Info( "file:" + file);[/align]
[align=left] string mp3Time = "" ;[/align]
[align=left] if (Environment .OSVersion.Version.Major >= 6)[/align]
[align=left] {[/align]
[align=left] mp3Time = dir.GetDetailsOf(item, 27);[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] mp3Time = dir.GetDetailsOf(item, 21);[/align]
[align=left] }[/align]
[align=left] sb.Append( "文件路径:" + file + "\r\n");[/align]
[align=left] sb.Append( "<br />");[/align]
[align=left] sb.Append( "服务器的OSVersion.Version.Major:" + Environment.OSVersion.Version.Major);[/align]
[align=left] sb.Append( "用Shell32.dll方式测试文件的时长:" + mp3Time);[/align]
[align=left] sb.Append( "<br />");[/align]
[align=left] [/align]
2.第二种方法:利用:mediainfo.dll:
MediaInfo.dll
846.3 KB
[align=left] [/align]
[align=left] MediaInfo MI = new MediaInfo();[/align]
[align=left] MI.Open(file);[/align]
[align=left] string s = MI.Get(StreamKind .Audio, 0, "Duration");[/align]
[align=left] string dateTimeStr = Common.TimeHelper .GetDateTimeStr(Convert.ToInt32(s));[/align]
[align=left] sb.Append( "用mediainfo.dll计算时长:" + dateTimeStr);[/align]
[align=left] [/align]
[align=left]一样,也是win7下没有问题,服务器上有问题。[/align]
[align=left] [/align]
3, 第三种方法:利用:
ffmpeg.zip
5.7 MB
[align=left] //用ffmpeg.exe 获取:[/align]
[align=left] sb.Append( "<br />");[/align]
[align=left] string fromffmpeg = Fromffmpeg(file);[/align]
[align=left] sb.Append( "fromffmpeg:" + fromffmpeg);[/align]
[align=left]子方法:[/align]
[align=left]private string Fromffmpeg(string fileName)[/align]
[align=left] {[/align]
[align=left] string duration = "" ;[/align]
[align=left] using (System.Diagnostics.Process pro = new System.Diagnostics. Process())[/align]
[align=left] {[/align]
[align=left] pro.StartInfo.UseShellExecute = false;[/align]
[align=left] pro.StartInfo.ErrorDialog = false;[/align]
[align=left] pro.StartInfo.RedirectStandardError = true;[/align]
[align=left] [/align]
[align=left] pro.StartInfo.FileName = AppDomain.CurrentDomain.BaseDirectory +[/align]
[align=left] [/align]
[align=left]"ffmpeg.exe";[/align]
[align=left] pro.StartInfo.Arguments = " -i " + fileName;[/align]
[align=left] [/align]
[align=left] pro.Start();[/align]
[align=left] System.IO. StreamReader errorreader = pro.StandardError;[/align]
[align=left] pro.WaitForExit(1000);[/align]
[align=left] [/align]
[align=left] string result = errorreader.ReadToEnd();[/align]
[align=left] if (!string .IsNullOrEmpty(result))[/align]
[align=left] {[/align]
[align=left] result = result.Substring(result.IndexOf( "Duration: ") +[/align]
[align=left] [/align]
[align=left]("Duration: ").Length, ( "00:00:00").Length);[/align]
[align=left] duration = result;[/align]
[align=left] }[/align]
[align=left] return duration;[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]到此:成功!服务器ok~[/align]
[align=left] [/align]
日志:
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不一样) 参考:http://www.stepday.com/topic/?867
[align=left] string file = Request.Form["mp3path" ];[/align]
[align=left] Shell32. ShellClass sh = new Shell32.ShellClass();[/align]
[align=left] Folder dir = sh.NameSpace(Path .GetDirectoryName(file));[/align]
[align=left] FolderItem item = dir.ParseName(Path .GetFileName(file));[/align]
[align=left] log.Info( "file:" + file);[/align]
[align=left] string mp3Time = "" ;[/align]
[align=left] if (Environment .OSVersion.Version.Major >= 6)[/align]
[align=left] {[/align]
[align=left] mp3Time = dir.GetDetailsOf(item, 27);[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] mp3Time = dir.GetDetailsOf(item, 21);[/align]
[align=left] }[/align]
[align=left] sb.Append( "文件路径:" + file + "\r\n");[/align]
[align=left] sb.Append( "<br />");[/align]
[align=left] sb.Append( "服务器的OSVersion.Version.Major:" + Environment.OSVersion.Version.Major);[/align]
[align=left] sb.Append( "用Shell32.dll方式测试文件的时长:" + mp3Time);[/align]
[align=left] sb.Append( "<br />");[/align]
[align=left] [/align]
2.第二种方法:利用:mediainfo.dll:
MediaInfo.dll
846.3 KB
[align=left] [/align]
[align=left] MediaInfo MI = new MediaInfo();[/align]
[align=left] MI.Open(file);[/align]
[align=left] string s = MI.Get(StreamKind .Audio, 0, "Duration");[/align]
[align=left] string dateTimeStr = Common.TimeHelper .GetDateTimeStr(Convert.ToInt32(s));[/align]
[align=left] sb.Append( "用mediainfo.dll计算时长:" + dateTimeStr);[/align]
[align=left] [/align]
[align=left]一样,也是win7下没有问题,服务器上有问题。[/align]
[align=left] [/align]
3, 第三种方法:利用:
ffmpeg.zip
5.7 MB
[align=left] //用ffmpeg.exe 获取:[/align]
[align=left] sb.Append( "<br />");[/align]
[align=left] string fromffmpeg = Fromffmpeg(file);[/align]
[align=left] sb.Append( "fromffmpeg:" + fromffmpeg);[/align]
[align=left]子方法:[/align]
[align=left]private string Fromffmpeg(string fileName)[/align]
[align=left] {[/align]
[align=left] string duration = "" ;[/align]
[align=left] using (System.Diagnostics.Process pro = new System.Diagnostics. Process())[/align]
[align=left] {[/align]
[align=left] pro.StartInfo.UseShellExecute = false;[/align]
[align=left] pro.StartInfo.ErrorDialog = false;[/align]
[align=left] pro.StartInfo.RedirectStandardError = true;[/align]
[align=left] [/align]
[align=left] pro.StartInfo.FileName = AppDomain.CurrentDomain.BaseDirectory +[/align]
[align=left] [/align]
[align=left]"ffmpeg.exe";[/align]
[align=left] pro.StartInfo.Arguments = " -i " + fileName;[/align]
[align=left] [/align]
[align=left] pro.Start();[/align]
[align=left] System.IO. StreamReader errorreader = pro.StandardError;[/align]
[align=left] pro.WaitForExit(1000);[/align]
[align=left] [/align]
[align=left] string result = errorreader.ReadToEnd();[/align]
[align=left] if (!string .IsNullOrEmpty(result))[/align]
[align=left] {[/align]
[align=left] result = result.Substring(result.IndexOf( "Duration: ") +[/align]
[align=left] [/align]
[align=left]("Duration: ").Length, ( "00:00:00").Length);[/align]
[align=left] duration = result;[/align]
[align=left] }[/align]
[align=left] return duration;[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]到此:成功!服务器ok~[/align]
[align=left] [/align]
相关文章推荐
- asp.net 使用ffmpeg.exe获取视频信息并截图方法类
- asp.net获取当前页面文件名,参数,域名等方法。统一session验证和权限验证的方法
- ASP.NET实现根据IP获取省市地址的方法
- ASP.NET获取当前网址方法
- ASP.NET获取IP的6种方法
- ASP.NET总结C#中7种获取当前路径的方法
- asp.net 获取网站根目录的方法
- asp.net中获取当前url的方法
- ASP.NET获取真正的客户端IP地址的6种方法
- asp.net下使用Request.Form获取非服务器控件的值的方法
- ASP.NET获取真正的客户端IP地址的6种方法
- asp.net IIS 部署报错/获取不到当前用户信息 配置方法
- ASP.NET获取IP与MAC地址的方法
- 获取ASP.NET连接数据库字符串最简单方法
- ASP.NET获取URL方法汇总
- [ASP.NET]从Request.Url获取根网址的最简单方法
- ASP.NET获取IP的6种方法
- javascript获取asp.net后台代码的方法
- [asp.net] 获取网页访问来路的几种方法
- asp.net实现利用反射,泛型,静态方法快速获取表单值到Model的方法