您的位置:首页 > 编程语言 > ASP

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]

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: