您的位置:首页 > 编程语言 > ASP

ASP.NET上传视频文件同时转换为flv并且抓取第一帧生成图片

2011-09-18 20:07 816 查看
以下源码参考别人的,但网上大部分用不了,在此做了些改动,能运行....

(注:需要下载视频转换软件"ffmpeg")

一.文件夹结构



二.web.config文件配置

<add key="ffmpeg" value="ffmpeg/ffmpeg.exe"/>

<add key="CatchFlvImgSize" value="240x180"/>

<add key="widthSize" value="400"/>

<add key="heightSize" value="350"/>

二..aspx页面



(点击上传文件按钮时实现全部功能,转换这个按钮无效)

二..aspx.cs页面

1.初始化

//转换工具存放路径

public static string ffmpegtool = ConfigurationManager.AppSettings["ffmpeg"];

//文件图片大小

public static string sizeOfImg = ConfigurationManager.AppSettings["CatchFlvImgSize"];

//文件大小

public static string widthOfFile = ConfigurationManager.AppSettings["widthSize"];

public static string heightOfFile = ConfigurationManager.AppSettings["heightSize"];

2.视频解码,转换方法

//运行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(ffmpegtool);

if ((!System.IO.File.Exists(ffmpeg)) || (!System.IO.File.Exists(fileName)))

{

return "";

}

string flv_file = System.IO.Path.ChangeExtension(playFile, ".flv");

//截图的尺寸大小,配置在Web.Config中,如:<add key="CatchFlvImgSize" value="240x180" />

string FlvImgSize = 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;

try

{

//转换

System.Diagnostics.Process.Start(FilestartInfo);

//截图

CatchImg(fileName, imgFile);

//System.Diagnostics.Process.Start(ImgstartInfo);

}

catch

{

return "";

}

finally

{

}

return "";

}

3.截图方法

/// <summary>

/// 截图

/// </summary>

/// <param name="fileName"></param>

/// <param name="imgFile"></param>

/// <returns></returns>

public string CatchImg(string fileName, string imgFile)

{

//

string ffmpeg = Server.MapPath(ffmpegtool);

//

string flv_img = imgFile + ".jpg";

//

string FlvImgSize = 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 "";

}

4.上传按钮方法

protected void lnkUpload_Click(object sender, EventArgs e)

{

HttpFileCollection files = Request.Files;

bool flag = true;

string filename = "";

string filepath = "";

if (files.Count == 1)

{

HttpPostedFile postedfile = files[0];

filename = Path.GetFileName(postedfile.FileName);

filepath = Server.MapPath("~/UpFiles/" + filename);

if (postedfile.FileName.Length > 0)

{

FileUpload1.SaveAs(filepath);

//Label1.Text = filepath;

Cache["FileName"] = filename;

}

}

string playfile = Server.MapPath("~/PlayFiles/" + filename);

string imgfile = Server.MapPath("~/ImgFile/" + Path.GetFileNameWithoutExtension(filename));

ChangeFilePhy(filepath, playfile, imgfile);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: