视频上传

1、用户上传视频文件
注意:调整允许上传文件的大小:
ASP.Net为了防止过大的http恶意请求阻塞网站,所以限定了每次上传文件最大4M,asp.net1.1中把用户上传的文件先放到内存中,2.0后如果上传的文件过大(默认256K)则会把文件保存到磁盘中。
不要修改全局的web.config来解除限制,保证安全,只对视频上传的ashx文件夹添加独立的web.config

<system.web>
<httpRuntime maxRequestLength="204800" requestLengthDiskThreshold="1024"/>
</system.web>

maxRequestLength 表示最大上传文件的长度(KB为单位)。requestLengthDiskThreshold表示最多上传204800K(200M),大于1024K以后保存到磁盘,防止占用内存空间。

通过根文件夹和子文件夹中设置不同的AppSettings值来看到:子文件夹中的Web.Config可以覆盖父文件夹中的设置。这样对于上传的文件夹才把上传限制放开到200MB。

2、启动FFMepg进行转码、抓缩略图
最牛的:利用ffmpeg让用户上传任意格式的视频、生成预览图片、动态gif预览图片,然后转换为flv、多线程。

//创建并启动一个新进程
Process p = new Process();
//设置进程启动信息属性StartInfo,这是ProcessStartInfo类,包括了一些属性和方法:
p.StartInfo.FileName = Server.MapPath("/ffmpeg/ffmpeg.exe"); //程序名
p.StartInfo.UseShellExecute = false;
//-y选项的意思是当输出文件存在的时候自动覆盖输出文件,不提示“y/n”这样才能自动化

// string srcFileName = Server.MapPath("/Video/aa.avi");
//string destFile =Server.MapPath("/Video/1.jpg");
//p.StartInfo.Arguments = "-i " + srcFileName + " -y -f image2 -ss 53 -t 0.001 -s 600x500 " + destFile; //执行参数


string srcFileName = Server.MapPath("/Video/aa.avi");
string destFileName = Server.MapPath("/Video/a.flv");
p.StartInfo.Arguments = "-i " + srcFileName + " -y -ab 56 -ar 22050 -b 800 -r 29.97 -s 420x340 " + destFileName; //执行参数
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.Start();
p.BeginErrorReadLine();//开始异步读取
p.WaitForExit();//阻塞等待进程结束
p.Close();//关闭进程
p.Dispose();//释放资源

转码结束后p.WaitForExit()才会返回

这样在转码、抓图结束后在数据库中添加一条记录(建一个和视频表:Id、Title、FlvPath:Flv的路径、ThumbPath:缩略图的路径)

3、做一个页面展示所有的视频,点击某个视频后打开页面,使用OsFLVPlayer播放视频

原文地址:https://www.cnblogs.com/guohuiru/p/3057051.html