代码改变世界

视频网站相关(视频解码、特大文件上传等)

2011-06-22 14:54  熬夜的虫子  阅读(1233)  评论(1编辑  收藏  举报

一. 大文件上传分析

需要解决的问题

1.解决客户端请求限制

web.config中的httpRuntime节的 maxRequestLength 参数的默认值为 4096 (4 MB)。所以,默认情况下不能上传大于这个值的文件。
我们这里这要更改这个参数即可  

2.服务器内存占用问题

利用HttpModule截断http请求、获取HttpWorkerRequest对象然后重新对客户端请求数据进行分块分析整理,这样的处理结果可以使客户端上传的大小不再受限,但是httpRuntime还是会抛出一个页面的警告,不过与上传逻辑无关

3.大文件分块处理

首先判断预先加载的HTTP请求的部分数据
这个数据我测试了一下一般大概是49152左右,只要没超过这个大小,这次请求就不需要进行下面的分块处理 一次处理就完成了。
如果大于这个值的话 .net 2.0以上会自动分块处理,我在程序在分配出一块缓存 大小在webconfig里配置  appsetting里单位为K<add key="BufferSize" value="1024"/>
每次先处理完这个缓存里的数据后,继续向http索取下一步的数据
其中http请求数据并不是一次提交上来的,数据在任何一个地方都有可能出现断点问题,程序里针对断点的算法 参考了网上的一些资料,调试结果还是Ok的,这里面添加系统应用数据分析。作用是为了在下面的进度读取模块提供数据
主要的分块处理结果完成以后重新封装HTTP请求,

4.上传进度实时显示

由ajax轮询调用上面的信息,生成静态页面,包括当前上传大小、平均上传速度、已用时间大小、预计剩余时间大小、暂时做的比较粗糙还没有做成比较用好用户界面

二. 视频解码

1.工具使用

ffmepg,mencoder。2者的区别
ffmpeg 压缩一个 视频 文件,可能使用不到一分钟,但是 mencoder 却压缩了好几分钟,由于 mencoder 需要计算更多东西,所以,需要花更多的时间。ffmpeg 也可以压缩视频,不过,效果可是比mencoder 差好些。并且ffmpeg对","wmv", "rmvb", "rm" 的效果不是很好,所以考虑的性能以及功能,"asf", "avi", "mpg", "3gp", "mov" 类型和截图功能使用ffmepg,"wmv", "rmvb", "rm"类型使用mencoder实现

2.net调用系统工具

主要使用System.Diagnostics.Process 同时需要System.Diagnostics.ProcessStartInfo附带参数信息

3.异步处理

为了不让用户上传完以后还要编码时间,编码过程的实现由异步来处理,玩家ui上上传后就可以看到已审核的信息。

4.编码处理

 

根据玩家推广系统的实例 我对编码的参数设置进行了4层处理
第一层在webconfig里 系统初始化是应用
第二层为系统参数  第三层位游戏项目应用参数 第四层为单个视频个别参数
初始上传的视频 读取游戏项目应用参数 如果项目参数未配置 读取系统参数

编码的规则以及方法 在后台管理中配置 提供主要功能的界面操作(界面操作在整理中 还未完成) 以及全部的功能的参数操作

 

效果图: