最近领导下令做一个视频播放和业务数据关联的系统,做了80%,总结下感悟,以及细节防止忘记。
技术问题,1,大文件上传,2视频转换成可在线播放的格式。3在线播放。
1,大文件上传。
HttpWorkerRequest实现介绍
利用隐含的HttpWorkerRequest,用它的GetPreloadedEntityBody和ReadEntityBody方法从IIS为ASP.NET建立的pipe里分块读取数据可以实现文件上传。实现方法如下:
- IServiceProvider provider=(IServiceProvider)
- HttpContext.Current;
- HttpWorkerRequest wr=(HttpWorkerRequest)
- provider.GetService(typeof(HttpWorkerRequest));
- byte[] bs=wr.GetPreloadedEntityBody();
- if(!wr.IsEntireEntityBodyIsPreloaded())
- {
- int n=1024;
- byte[] bs2=new byte[n];
- while(wr.ReadEntityBody(bs2,n) 〉0)
- {
- }
- }
感觉挺复杂的,干脆就在坛子里下载了个大文件上传组件,直接可以用,但是还是反编译了下。大体看懂什么意思。
2,视频转换
查阅资料后使用 ffmpeg,下载地址
关于参数说明,网上都有,我只用最简单的
ffmpeg.exe -y -i "输入文件名" -qscale 8 "输出文件名"可以将视频转换成flv格式用来在线播放。
3,在线播放,使用flash来做播放器,flash组件在网页中是swf格式的,随便下个swf的播放器,如flvplayer.swf
传递给这个flash组件的flv格式的文件。
注意,iis设置需要设置 .flv格式 .flv flv-application/octet-stream 把flv作为流播放。
这个设置在iis管理器,http 头 mime设置中
整体程序结构,就是一个网页程序,接受与业务关联大文件视频上传,一个windows服务,监控某个目录下的文件,有文件就转换为flv,并且转移这个文件,到其他目录。网页查找相关业务,显示出相关视频,可以在线播放,也能下载观看。