/// <summary> /// @從視頻檔案截圖,產生在視頻檔案所在檔案夾 /// 在Web.Config 中需要兩個前置配置項: /// 1.ffmpeg.exe檔案的路徑 /// <add key="ffmpeg" value="E:ffmpegffmpeg.exe" /> /// 2.截圖的尺寸大小 /// <add key="CatchFlvImgSize" value="240x180" /> /// 3.視頻處理常式ffmpeg.exe /// </summary> /// <param name="vFileName">視頻檔案地址,如:/Web/FlvFile/User1/00001.Flv</param> /// <returns>成功:返回圖片虛擬位址; 失敗:返回Null 字元串</returns> public string CatchImg(string vFileName) { //取得ffmpeg.exe的路徑,路徑配置在Web.Config中,如:<add key="ffmpeg" value="E:ffmpegffmpeg.exe" /> string ffmpeg=System.Configuration.ConfigurationSettings.AppSettings["ffmpeg"]; if ( (!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(vFileName)) ) { return ""; } //獲得圖片相對路徑/最後儲存到資料庫的路徑,如:/Web/FlvFile/User1/00001.jpg string flv_img = System.IO.Path.ChangeExtension(vFileName,".jpg") ; //圖片絕對路徑,如:D:VideoWebFlvFileUser1001.jpg string flv_img_p = HttpContext.Current.Server.MapPath(flv_img); //截圖的尺寸大小,配置在Web.Config中,如:<add key="CatchFlvImgSize" value="240x180" /> string FlvImgSize=System.Configuration.ConfigurationSettings.AppSettings["CatchFlvImgSize"]; System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg); startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //此處組合成ffmpeg.exe檔案需要的參數即可,此處命令在ffmpeg 0.4.9調試通過 startInfo.Arguments = " -i " + vFileName + " -y -f image2 -t 0.001 -s " + FlvImgSize + " " + flv_img_p ; try { System.Diagnostics.Process.Start(startInfo); } catch { return ""; } ///注意:圖片截取成功後,資料由記憶體緩衝寫到磁碟需要時間較長,大概在3,4秒甚至更長; ///這兒需要延時後再檢測,我伺服器延時8秒,即如果超過8秒圖片仍不存在,認為截圖失敗; ///此處略去延時代碼.如有那位知道如何捕捉ffmpeg.exe截圖失敗訊息,請告知,先謝過! if ( System.IO.File.Exists(flv_img_p)) { return flv_img; } return ""; } 有個問題就是截圖失敗後我們得不到失敗的訊息,這個問題還等待高手解決哦 |