一、簡介
ffmpeg.exe是一個源於Linux的工具軟件,是FLV視頻轉換器,可以輕易的實現FLV向其它格式avi、asf、mpeg的轉換或將其它格式轉換爲flv。
二、具體步驟
1、在項目中新建Tools文件夾、UploadFile文件夾、Upload文件夾
Tools文件夾--------------工具文件夾
UploadFile文件夾-------用於包含上傳文件的頁面
Upload文件夾------------用於包含上傳成功的視頻和轉換後的視頻以及截圖
將ffmpeg.exe複製到Tools文件夾
在Tools文件夾中新建一個類MyTool.cs,代碼如下,主要用於將一個視頻文件轉換爲FLV格式,和拿到縮略圖
public class MyTool
{
#region ConvertVideoToFLVAndGetPic將一個視頻文件轉換爲FLV格式並生成縮略圖
//-----------------------------------------------源視頻路徑-------------目標視頻路徑------目標視頻截圖路徑
public static void ConvertVideoToFLVAndGetPic(string srcFileName, string destFileName,string destPicFileName)
{
//(1)將視頻轉換爲FLV格式並保存到destFileName指定的位置
string videoarguments = "-i " + srcFileName + " -y -ab 56 -ar 22050 -b 800 -r 29.97 -s 872x654 " + destFileName; //視頻執行參數
StartUpFFmpeg(srcFileName, destFileName, videoarguments);
//(2)將視頻截圖爲Jpg格式並保存到outputpicfile指定的位置
string picarguments = "-i " + srcFileName + " -y -f image2 -ss 53 -t 0.001 -s 600x500 " + destPicFileName; //圖片執行參數
StartUpFFmpeg(srcFileName, destPicFileName, picarguments);
}
#endregion
#region StartUpFFmpeg啓動FFmpeg
//----------------------------------源文件路徑-----------------輸出文件路徑--------執行參數
private static void StartUpFFmpeg(string srcFileName,string destFileName,string Arguments)
{
//創建並啓動一個新進程
Process p = new Process();
//設置進程啓動信息屬性StartInfo,這是ProcessStartInfo類,包括了一些屬性和方法:
p.StartInfo.FileName = HttpContext.Current.Request.MapPath("/Tools/ffmpeg.exe");//程序名
p.StartInfo.UseShellExecute = false; //不使用操作系統shell啓動進程
p.StartInfo.Arguments =Arguments; //執行參數
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;//把外部程序錯誤輸出寫到StandardError流中
p.ErrorDataReceived += new DataReceivedEventHandler(p_ErrorDataReceived);
p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
p.StartInfo.CreateNoWindow = true; //是否顯示cmd窗口
p.Start();
p.BeginErrorReadLine();//開始異步讀取
p.WaitForExit();//阻塞等待進程結束
p.Close();//關閉進程
p.Dispose();//釋放資源
}
#endregion
#region GetMD5拿一個流的MD5值
public static string GetMD5(Stream stream)
{
string result = string.Empty;
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] bytes = md5.ComputeHash(stream);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
sb.Append(bytes[i].ToString("X2"));
}
result = sb.ToString();
return result;
}
#endregion
相關FFmpeg的相關參數:到百度中去搜,百度百科說得很清楚,此處不再遨述
2、在UploadFile文件夾中添加一UploadFile.aspx
調整用戶上傳視頻文件的大小
Asp.Net爲了防止過大的http惡意請求阻塞網站,所以限定了每次上傳文件最大4M,asp.net1.1中把用戶上傳的文件先放到內存在,2.0後如果上傳的文件過大(默認256K)則會保存到硬盤中。
不要修改全局的web.config(網站根目錄下的web.config)來解除限制,保證安全,只對視頻上傳的ashx文件夾添加獨立的web.config
在UploadFile文件夾中添加新建項“Web配置文件”,在此web.config中
<system.web>
<!--修改默認上傳文件的大小-->
<httpRuntime maxRequestLength="204800" requestLengthDiskThreshold="1024"/>
</system.web>
前端代碼很簡單
<form id="form1" runat="server" enctype="multipart/form-data">
<div>
<input type="file" name="videofile" id="Videofile" />
<input type="submit" name="btnUpload" id="btnUpload" value="上傳" />
<div id="divinfo"><%=pica %></div><!--用於顯示上傳的視頻成功後的截圖-->
</div>
</form>
後端代端也很簡單
protected string pica = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(Request.Form["btnUpload"]))
{
UploadFileMethod();
}
}
protected void UploadFileMethod()
{
//(1)首先接收用戶上傳上來的視頻,保存到指定位置,當然可以判斷一下這裏是不是視頻
HttpPostedFile sourcefile = HttpContext.Current.Request.Files["videofile"];
string sourcefilename = MyTool.GetMD5(sourcefile.InputStream) + Path.GetExtension(sourcefile.FileName);
string sourcefilepath = "/Upload/" + sourcefilename;
sourcefile.SaveAs(Request.MapPath(sourcefilepath));
//(2)上傳成功後對此文件進行轉碼(轉化爲flv格式)
string flvfilepath = "/Upload/" + Path.GetFileNameWithoutExtension(sourcefilename) + ".flv";
string picfilepath = "/Upload/" + Path.GetFileNameWithoutExtension(sourcefilename) + ".jpg";
MyTool.ConvertVideoToFLVAndGetPic(Request.MapPath(sourcefilepath),Request.MapPath(flvfilepath),Request.MapPath(picfilepath));
pica = string.Format("<a href=\"videoview.aspx?file={0}\"><img src=\"{1}\"></a>", Path.GetFileNameWithoutExtension(sourcefilename), picfilepath);
}
這時就可以新建videoview.aspx,並在其中拿文件名稱加flv去Upload文件夾中去找此文件,並進行flashplayer播放器的配置,讓它播放起來,
本人建意使用ckplayer。
~~~~~正在更新,請耐心等待,謝謝你對我關注