首先,我们部署一下文件夹.在工程的目录下新建几个文件夹如下图:
UpFiles文件夹是要保存你上传的文件,PlayFiles文件夹是用于你转换后保存的文件(用于网上播放) ImgFile文件夹是保存截取视频文件的图片,然后那两个mencoder和ffmpeg文件夹是视频转换工具.此视频转换也可叫做mencoder+ffmpeg视频转换. 首先,在配置文件中给这些文件夹进行路径的配置.如下
- <appSettings>
- <!--工具文件夹-->
- <add key="ffmpeg" value="ffmpeg/ffmpeg.exe"/>
- <add key="mencoder" value="mencoder/mencoder.exe"/>
- <add key="mplayer" value="mencoder/mplayer.exe"/>
- <!--上传文件的路径-->
- <add key="upfile" value="UpFiles"/>
- <!--上专文件图片路径-->
- <add key="imgfile" value="ImgFile"/>
- <!--上传文件图片大小-->
- <add key="CatchFlvImgSize" value="240x180"/>
- <add key="widthSize" value="400"/>
- <add key="heightSize" value="350"/>
- <!--转换后文件路径-->
- <add key="playfile" value="PlayFiles"/>
- </appSettings>
复制代码
在上传.ASPX页面中
- 标题:<asp:TextBox ID="txtTitle" runat="server" Width="358px"></asp:TextBox>
- <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="txtTitle"
- ErrorMessage="标题不为空"></asp:RequiredFieldValidator>
- <br />
- <asp:FileUpload ID="FileUpload1" runat="server" Width="339px" />
- <asp:Button ID="btnUpload" runat="server" OnClick="btnUpload_Click" Text="上传视频" Width="70px" />
- 文件类型<span style="color:Red;">(.asf|.flv|.avi|.mpg|.3gp|.mov|.wmv|.rm|.rmvb)</span>
- <asp:RegularExpressionValidator ID="imagePathValidator" runat="server" ErrorMessage="文件类型不正确"
- ValidationGroup="vgValidation" Display="Dynamic" ValidationExpression="^[a-zA-Z]:(\\.+)(.asf|.flv|.avi|.mpg|.3gp|.mov|.wmv|.rm|.rmvb)$"
- ControlToValidate="FileUpload1">
- </asp:RegularExpressionValidator>
- <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="FileUpload1"
- ErrorMessage="文件不为空"></asp:RequiredFieldValidator></div>
- <div style=" height:0px; border-top:solid 1px red; font-size:0px;"></div>
- <div>上传列表.</div>
复制代码
程序工作的原理是:视频先上传上去,然后跟着就是开始转换. 所以.在CS 文件中有这里为了方便我是用sqlDatasource数据控件做数据的操作.
- using System;
- using System.Data;
- using System.Configuration;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using System.Web.UI.HtmlControls;
- public partial class _Default : System.Web.UI.Page
- {
- // 扩展名定义
- string[] strArrFfmpeg = new string[] {"asf","avi","mpg","3gp","mov" };
- string[] strArrMencoder = new string[] {"wmv","rm","rmvb" };
- protected void Page_Load(object sender, EventArgs e)
- {
- }
- //
- protected void btnUpload_Click(object sender, EventArgs e)
- {
- string upFileName = "";
- if (this.FileUpload1.HasFile)
- {
- string fileName = PublicMethod.GetFileName(this.FileUpload1.FileName);// GetFileName();
- if ((string)Session["file"] == fileName)
- {
- return;
- }
- upFileName = Server.MapPath(PublicMethod.upFile + fileName);
- this.FileUpload1.SaveAs(upFileName);
- string saveName = DateTime.Now.ToString("yyyyMMddHHmmssffff") ;
- string playFile = Server.MapPath(PublicMethod.playFile + saveName);
- string imgFile = Server.MapPath(PublicMethod.imgFile + saveName);
- //System.IO.File.Copy(Server.MapPath(PublicMethod.playFile + "00000002.jpg"), Server.MapPath(PublicMethod.imgFile+"aa.jpg"));
- PublicMethod pm = new PublicMethod();
- string m_strExtension = PublicMethod.GetExtension(this.FileUpload1.PostedFile.FileName).ToLower();
- if (m_strExtension == "flv")
- {//直接拷贝到播放文件夹下
- System.IO.File.Copy(upFileName, playFile+".flv");
- pm.CatchImg(upFileName, imgFile);
- }
- string Extension = CheckExtension(m_strExtension);
- if (Extension == "ffmpeg")
- {
- pm.ChangeFilePhy(upFileName, playFile, imgFile);
- }
- else if (Extension == "mencoder")
- {
- pm.MChangeFilePhy(upFileName, playFile, imgFile);
- }
- InsertData(this.txtTitle.Text, fileName,saveName);
- Session["file"] = fileName;
- }
- }
- //
- private string CheckExtension(string extension)
- {
- string m_strReturn = "";
- foreach (string var in this.strArrFfmpeg)
- {
- if (var == extension)
- {
- m_strReturn = "ffmpeg"; break;
- }
- }
- if (m_strReturn == "")
- {
- foreach (string var in strArrMencoder)
- {
- if (var == extension)
- {
- m_strReturn = "mencoder"; break;
- }
- }
- }
- return m_strReturn;
- }
- #region 插入数据到数据库中
- private void InsertData(string MediaName,string fileName,string saveName)
- {
- //string name=fileName.Substring(0, fileName.LastIndexOf('.'));
- string imgName = saveName + ".jpg";//图片文件名;
- string playName = saveName + ".flv";
- string sqlstr = "insert into Media(FMediaName,FMediaUpPath,FMediaPlayPath,FMediaImgPath) values(@MName,@MUppath,@MPlaypath,@MImgpath)";
- //string constr = ConfigurationManager.ConnectionStrings["sqlcon"].ToString();
- SqlDataSource1.InsertCommand = sqlstr;
- SqlDataSource1.InsertCommandType = SqlDataSourceCommandType.Text;// CommandType.Text;
- SqlDataSource1.InsertParameters.Add("MName",MediaName);
- SqlDataSource1.InsertParameters.Add("MUppath",PublicMethod.upFile+fileName);
- SqlDataSource1.InsertParameters.Add("MPlaypath",PublicMethod.playFile+playName);
- SqlDataSource1.InsertParameters.Add("MImgpath",PublicMethod.imgFile+imgName);
- SqlDataSource1.Insert();
- }
- #endregion
- }
- PublicMethod类如下:
- 在这个类里面主要是做文件转换和保存,在转换文件的时候CPU的利用率可以达100%.
- 它的主要原理是另起一个进程在转换的时候你会发现你的进程里多了一个.
- using System;
- using System.Configuration;
- /// <summary>
- /// Summary description for PublicMethod
- /// </summary>
- public class PublicMethod:System.Web.UI.Page
- {
- public PublicMethod()
- {
- }
- //文件路径
- public static string ffmpegtool = ConfigurationManager.AppSettings["ffmpeg"];
- public static string mencodertool = ConfigurationManager.AppSettings["mencoder"];
- public static string mplayertool = ConfigurationManager.AppSettings["mplayer"];
- public static string upFile = ConfigurationManager.AppSettings["upfile"] + "/";
- public static string imgFile = ConfigurationManager.AppSettings["imgfile"] + "/";
- public static string playFile = ConfigurationManager.AppSettings["playfile"] + "/";
- //文件图片大小
- public static string sizeOfImg = ConfigurationManager.AppSettings["CatchFlvImgSize"];
- //文件大小
- public static string widthOfFile = ConfigurationManager.AppSettings["widthSize"];
- public static string heightOfFile = ConfigurationManager.AppSettings["heightSize"];
- // // //获取文件的名字
- public static string GetFileName(string fileName)
- {
- int i = fileName.LastIndexOf("\\") + 1;
- string Name = fileName.Substring(i);
- return Name;
- }