欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【ASP中将视频文件转换成.flv格式】,下面是详细的分享!
ASP中将视频文件转换成.flv格式
算一算,自从上次发表一篇asp.net中用VML画数据统计图的文章后差不多有一两个月没有来博客了,今天中秋,没事做发现自己已经很久没有来博客园了.正好前几天有小做一个视频转换的Demo,现在出现很的网上在线视频其文件格式都是.FLV格式,那些视频网站大概也有一个视频转换软件,所我在也试着去做了一个demo拿出来和大家共享一下,由于自己的技术有限,做的不怎么样,愿有高人看完给
在下指点一二.呵.... 费话不多说了,下面来分解一下这个Demo.
首先,我们部署一下文件夹.在工程的目录下新建几个文件夹如下图:
中将视频文件转换成.flv格式UpFiles文件夹是要保存你上传的文件,PlayFiles文件夹是用于你转换后保存的文件(用于网上播放)
ImgFile文件夹是保存截取视频文件的图片,然后那两个mencoder和ffmpeg文件夹是视频转换工具.此视频转换也
可叫做mencoder+ffmpeg视频转换.
首先,在配置文件中给这些文件夹进行路径的配置.如下
|
<appSettings> 标题:<asp:TextBox ID="txtTitle" runat="server" Width="358px"></asp:TextBox> |
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
}
它的主要原理是另起一个进程在转换的时候你会发现你的进程里多了一个.
| using System; using System.Configuration; /// <summary> |
| } //文件路径 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; } //获取文件扩展名 public static string GetExtension(string fileName) { int i=fileName.LastIndexOf(".")+1; string Name=fileName.Substring(i); return Name; } |
| // #region //运行FFMpeg的视频解码,(这里是绝对路径) /// <summary> /// 转换文件并保存在指定文件夹下面(这里是绝对路径) /// </summary> /// <param name="fileName">上传视频文件的路径(原文件)</param> /// <param name="playFile">转换后的文件的路径(网络播放文件)</param> /// <param name="imgFile">从视频文件中抓取的图片路径</param> /// <returns>成功:返回图片虚拟地址; 失败:返回空字符串</returns> public string ChangeFilePhy(string fileName, string playFile, string imgFile) { //取得ffmpeg.exe的路径,路径配置在Web.Config中,如:<add key="ffmpeg" value="E:\51aspx\ffmpeg.exe" /> string ffmpeg=Server.MapPath(PublicMethod.ffmpegtool); if ((!System.IO.File.Exists(ffmpeg)) (!System.IO.File.Exists(fileName))) { return ""; } |
| //获得图片和(.flv)文件相对路径/最后存储到数据库的路径,如:/Web/User1/00001.jpg
string flv_file=System.IO.Path.ChangeExtension(playFile, ".flv"); |
string FlvImgSize=PublicMethod.sizeOfImg;
System.Diagnostics.ProcessStartInfo FilestartInfo=new System.Diagnostics.ProcessStartInfo(ffmpeg);
FilestartInfo.WindowStyle=System.Diagnostics.ProcessWindowStyle.Hidden;
FilestartInfo.Arguments=" -i " + fileName + " -ab 56 -ar 22050 -b 500 -r 15 -s " + widthOfFile + "x" + heightOfFile + " " + flv_file;
//ImgstartInfo.Arguments=" -i " + fileName + " -y -f image2 -t 0.05 -s " + FlvImgSize + " " + flv_img;
try
{
//转换
System.Diagnostics.Process.Start(FilestartInfo);
//截图
CatchImg(fileName, imgFile);
//System.Diagnostics.Process.Start(ImgstartInfo);
}
catch
{
return "";
}
//
return "";
}
//
public string CatchImg(string fileName,string imgFile)
{
//
string ffmpeg=Server.MapPath(PublicMethod.ffmpegtool);
//
string flv_img=imgFile+".jpg";
//
string FlvImgSize=PublicMethod.sizeOfImg;
//
System.Diagnostics.ProcessStartInfo ImgstartInfo=new System.Diagnostics.ProcessStartInfo(ffmpeg);
ImgstartInfo.WindowStyle=System.Diagnostics.ProcessWindowStyle.Hidden;
//
ImgstartInfo.Arguments=" -i " + fileName + " -y -f image2 -ss 2 -vframes 1 -s " + FlvImgSize + " " + flv_img;
try
{
System.Diagnostics.Process.Start(ImgstartInfo);
}
catch
{
return "";
}
//
if (System.IO.File.Exists(flv_img))
{
return flv_img;
}
return "";
}
#endregion
//
#region //运行FFMpeg的视频解码,(这里是(虚拟)相对路径)
/// <summary>
/// 转换文件并保存在指定文件夹下面(这里是相对路径)
/// </summary>
/// <param name="fileName">上传视频文件的路径(原文件)</param>
/// <param name="playFile">转换后的文件的路径(网络播放文件)</param>
/// <param name="imgFile">从视频文件中抓取的图片路径</param>
/// <returns>成功:返回图片虚拟地址; 失败:返回空字符串</returns>
public string ChangeFileVir(string fileName, string playFile, string imgFile)
{
//取得ffmpeg.exe的路径,路径配置在Web.Config中,如:<add key="ffmpeg" value="E:\51aspx\ffmpeg.exe" />
string ffmpeg=Server.MapPath(PublicMethod.ffmpegtool);
if ((!System.IO.File.Exists(ffmpeg)) (!System.IO.File.Exists(fileName)))
{
return "";
}
| //截图的尺寸大小,配置在Web.Config中,如:<add key="CatchFlvImgSize" value="240x180" /> string FlvImgSize=PublicMethod.sizeOfImg; |
| System.Diagnostics.ProcessStartInfo FilestartInfo=new System.Diagnostics.ProcessStartInfo(ffmpeg); System.Diagnostics.ProcessStartInfo ImgstartInfo=new System.Diagnostics.ProcessStartInfo(ffmpeg); |
| FilestartInfo.WindowStyle=System.Diagnostics.ProcessWindowStyle.Hidden; ImgstartInfo.WindowStyle=System.Diagnostics.ProcessWindowStyle.Hidden; //此处组合成ffmpeg.exe文件需要的参数即可,此处命令在ffmpeg 0.4.9调试通过 //ffmpeg -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv FilestartInfo.Arguments=" -i " + fileName + " -ab 56 -ar 22050 -b 500 -r 15 -s " + widthOfFile + "x" + heightOfFile + " " + flv_file; ImgstartInfo.Arguments=" -i " + fileName + " -y -f image2 -t 0.001 -s " + FlvImgSize + " " + flv_img; |
| try { System.Diagnostics.Process.Start(FilestartInfo); System.Diagnostics.Process.Start(ImgstartInfo); } catch { return ""; } |
|
return ""; |
|
#region //运行mencoder的视频解码器转换(这里是(绝对路径)) if ((!System.IO.File.Exists(tool)) (!System.IO.File.Exists(vFileName))) string flv_file=System.IO.Path.ChangeExtension(playFile, ".flv"); |
| //截图的尺寸大小,配置在Web.Config中,如:<add key="CatchFlvImgSize" value="240x180" /> string FlvImgSize=PublicMethod.sizeOfImg; System.Diagnostics.ProcessStartInfo FilestartInfo=new System.Diagnostics.ProcessStartInfo(tool); FilestartInfo.WindowStyle=System.Diagnostics.ProcessWindowStyle.Hidden; |
全文的主要内容就在这里了
还有其视频转换工具,由于比较大有十多MB博客上传不了.所以还需大家另外去下载
以上所分享的是关于ASP中将视频文件转换成.flv格式,下面是编辑为你推荐的有价值的用户互动:
相关问题:怎么将普通视频文件转换成FLV的?
答:Ultra Flash Video FLV Converter 这个转换器挺不错的,本人亲自用过,能将任何格式的视频转换为FLV的,地址: http://www.skycn.com/soft/36004.html楼主,据你所说,从百度视频上弄下来的视频,大部分都是FLV格式的。 >>详细
相关问题:如何将flv格式转换成mp4格式?
答:将FLV转MP4格式,推荐用 MP4/RM转换专家 软件对各种视频格式的支持非常好,支持转成FLV视频格式。 支持转成各种机子官方MP4、AVI、FLV等格式,还有高清MP4格式,视频参数根据机型设置,可以在机子上播放。 转换速度是目前最快,视频画面质量非常... >>详细
相关问题:FLV格式的视频怎么转换成MP4格式的
答:1、格式工厂直接转换。 2、除了MP4格式,其他主流格式都有,可选范围很广。 3、不仅支持FLV格式转换,其他格式相互转换都可以。 4、转换的时候注意设置,也就是分辨率和码率的设置,这样有助于视频的清晰度。 >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
