一、简介
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。
~~~~~正在更新,请耐心等待,谢谢你对我关注