“上传视频到服务器”之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。






~~~~~正在更新,请耐心等待,谢谢你对我关注








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值