算一算,自从上次发表一篇asp.net中用VML画数据统计图的文章后差不多有一两个月没有来博客了,今天中秋,没事做发现自己已经很久没有来博客园了.正好前几天有小做一个视频转换的Demo,现在出现很的网上在线视频其文件格式都是.FLV格式,那些视频网站大概也有一个视频转换软件,所我在也试着去做了一个demo拿出来和大家共享一下,由于自己的技术有限,做的不怎么样,愿有高人看完给
在下指点一二.呵.... 费话不多说了,下面来分解一下这个Demo.
首先,我们部署一下文件夹.在工程的目录下新建几个文件夹如下图:
中将视频文件转换成.flv格式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
}
|
P