基本信息
源码名称:mencoder和ffmpeg 转换视频格式以及 视频截图功能
源码大小:0.71M
文件格式:.rar
开发语言:C#
更新时间:2013-08-24
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍

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;
        }
        
    }
    //删除视频
    protected void btnDelete_Click(object sender, EventArgs e)
    {
        LinkButton btnlink = (LinkButton)sender;
        string FID=btnlink.CommandArgument;
        string sqlstr = "delete from Media where FID=@FID";
        SqlDataSource1.DeleteCommand = sqlstr;
        SqlDataSource1.DeleteCommandType = SqlDataSourceCommandType.Text;
        SqlDataSource1.DeleteParameters.Add("FID",FID);
        SqlDataSource1.Delete();
    }
    //
    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
    #region //运行tool的视频解码,
    //   <summary>   
        ///   @从视频文件截图,生成在视频文件所在文件夹   
        ///   在Web.Config   中需要两个前置配置项:   
        ///   1.ffmpeg.exe文件的路径   
        ///   <add   key="ffmpeg"   value="E:\51aspx\ffmpeg.exe"   />   
        ///   2.截图的尺寸大小   
        ///   <add   key="CatchFlvImgSize"   value="240x180"   />   
        ///   3.视频处理程序ffmpeg.exe   
        ///   </summary>   
        ///   <param   name="vFileName">视频文件地址,如:/Web/FlvFile/User1/00001.Flv</param>   
        ///   <returns>成功:返回图片虚拟地址;   失败:返回空字符串</returns>   
        public string CatchImg(string vFileName,string playFile,string imgFile)
        {
            //取得ffmpeg.exe的路径,路径配置在Web.Config中,如:<add   key="ffmpeg"   value="E:\51aspx\ffmpeg.exe"   />   
            
           // string tool = PublicMethod.ffmpegtool;
            string tool = PublicMethod.mencodertool;
            tool = Server.MapPath(tool);
            if ((!System.IO.File.Exists(tool)) || (!System.IO.File.Exists(vFileName)))
            {
                return "";
            }

            //获得图片和(.flv)文件相对路径/最后存储到数据库的路径,如:/Web/User1/00001.jpg   
            string flv_img = System.IO.Path.ChangeExtension(imgFile, ".jpg");
            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);
            System.Diagnostics.ProcessStartInfo ImgstartInfo = new System.Diagnostics.ProcessStartInfo(tool);

            FilestartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            ImgstartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            //此处组合成tool.exe文件需要的参数即可,此处命令在tool   0.4.9调试通过 
            //tool -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv
           // FilestartInfo.Arguments = " -i "   vFileName   " -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 "   flv_file;
           // ImgstartInfo.Arguments = "   -i   "   vFileName   "   -y   -f   image2   -t   0.001   -s   "   FlvImgSize   "   "   flv_img;
            FilestartInfo.Arguments = " " vFileName " -o " flv_file " -of lavf -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames -oac mp3lame -lameopts abr:br=56 -ovc lavc -lavcopts vcodec=flv:vbitrate=200:mbd=2:mv0:trell:v4mv:cbp:last_pred=1:dia=-1:cmp=0:vb_strategy=1 -vf scale=512:-3 -ofps 12 -srate 22050";
            try
            {
                System.Diagnostics.Process.Start(FilestartInfo);
                System.Diagnostics.Process.Start(ImgstartInfo);
            }
            catch
            {
                return "";
            }

            ///注意:图片截取成功后,数据由内存缓存写到磁盘需要时间较长,大概在3,4秒甚至更长;   
            ///这儿需要延时后再检测,我服务器延时8秒,即如果超过8秒图片仍不存在,认为截图失败;   
            ///此处略去延时代码.如有那位知道如何捕捉tool.exe截图失败消息,请告知,先谢过!
            if (System.IO.File.Exists(flv_img))
            {
                return flv_img;
            }

            return "";
        }
   //
    #endregion
}