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播放视频