“上傳視頻到服務器”之FLV視頻轉換利器ffmpeg.exe的簡單使用

一、簡介

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。






~~~~~正在更新,請耐心等待,謝謝你對我關注








發佈了32 篇原創文章 · 獲贊 7 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章