上传视频到服务器并转换成flv格式实现在线播放功能1.docx
- 文档编号:24179598
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:12
- 大小:16.91KB
上传视频到服务器并转换成flv格式实现在线播放功能1.docx
《上传视频到服务器并转换成flv格式实现在线播放功能1.docx》由会员分享,可在线阅读,更多相关《上传视频到服务器并转换成flv格式实现在线播放功能1.docx(12页珍藏版)》请在冰豆网上搜索。
上传视频到服务器并转换成flv格式实现在线播放功能1
上传视频到服务器并转换成flv格式实现在线播放功能1
最近公司有一个需求:
用户注册了账号后,可以上传自己的视频,可供自己或他人在线观看,并带有图片可以预览视频内容。
而有些格式的视频是浏览器不能解析的格式。
只能将其转换成可以在线播放的格式如flv格式。
所以在用户上传完视频后必须将其他格式转换成flv格式。
这样再网上搜集了一下资料后最终做出了一个例子。
基本原理是在服务器端调用ffmepg转换其他格式的视频成flv格式的视频。
写了一个类如下:
///
///VideoToFLV的摘要说明
///视频转换和存档
///
publicclassVideoToFLV:
Page
{
publicVideoToFLV()
{}
///
///检查视频格式是否合法
///
///
///
publicstaticboolCheckVideoType(stringfileName)
{
.....
}
///
///判断视频格式是否是flv格式
///
///
///
publicstaticboolIsFLV(stringfileName)
{
...
}
///
///将其他视频格式转换成flv格式
///
///
///
///
///
///
publicstaticvoidConvertToFLV(stringffmpeg,stringFromName,stringExportFlvName,stringExportImgeName,stringWorkingDirectory)
{
....
}
///
///抓图
///
///
///
///
///
publicstaticvoidCathImage(stringffmpeg,stringExportImgName,stringflv,stringWorkingDirectory)
{
...
}
}
publicstaticboolCheckVideoType(stringfileName)
{
stringextendName=Path.GetExtension(fileName);
string[]strex={".asx",".asf",".mpg",".wmv",".mp4",".mov",".avi",".flv"};
foreach(stringtypeinstrex)
{
if(extendName==type)
{
returntrue;
}
}
returnfalse;
}
2:
publicstaticboolIsFLV(stringfileName)
{
stringextendName=Path.GetExtension(fileName);
if(extendName=="flv")
{
returntrue;
}
else
{
returnfalse;
}
}
3:
publicstaticvoidConvertToFLV(stringffmpeg,stringFromName,stringExportFlvName,stringExportImgeName,stringWorkingDirectory)
{
stringCommand="-i\""+FromName+"\"-y-ab32-ar22050-b800000-s480*360\""+ExportFlvName+"\"";
System.Diagnostics.Processp=newSystem.Diagnostics.Process();
p.StartInfo.FileName=HttpContext.Current.Server.MapPath(ffmpeg);
p.StartInfo.Arguments=Command;
p.StartInfo.WorkingDirectory=HttpContext.Current.Server.MapPath(WorkingDirectory);//"~/ffmpeg/"
p.StartInfo.UseShellExecute=false;
p.StartInfo.RedirectStandardInput=true;
p.StartInfo.RedirectStandardOutput=true;
p.StartInfo.RedirectStandardError=true;
p.StartInfo.CreateNoWindow=true;
try
{
p.Start();
}
catch(Exceptionex)
{
throwex;
}
finally
{
p.BeginErrorReadLine();
p.WaitForExit();
p.Close();
p.Dispose();
}
//抓图
CathImage(ffmpeg,ExportImgeName,ExportFlvName,WorkingDirectory);
}
4:
publicstaticvoidCathImage(stringffmpeg,stringExportImgName,stringflv,stringWorkingDirectory)
{
stringCommand="-i\""+flv+"\"-y-fimage2-ss60-t0.001-s350x240\""+ExportImgName+"\"";
System.Diagnostics.Processp=newSystem.Diagnostics.Process();
p.StartInfo.FileName=HttpContext.Current.Server.MapPath(ffmpeg);
p.StartInfo.Arguments=Command;
p.StartInfo.WorkingDirectory=HttpContext.Current.Server.MapPath(WorkingDirectory);//"~/ffmpeg/"
p.StartInfo.UseShellExecute=false;
p.StartInfo.RedirectStandardInput=true;
p.StartInfo.RedirectStandardOutput=true;
p.StartInfo.RedirectStandardError=true;
p.StartInfo.CreateNoWindow=true;
try
{
p.Start();
}
catch(Exceptionex)
{
throwex;
}
finally
{
p.BeginErrorReadLine();
p.WaitForExit();
p.Close();
p.Dispose();
}
}
}
有如下的页面:
(部分)
点击上传按钮:
//上传
protectedvoidButton1_Click(objectsender,EventArgse)
{
if(this.IsValid)
{
stringfileName=this.FileUpload1.FileName.Trim();
//上传的文件格式检查
if(VideoToFLV.CheckVideoType(fileName))
{
//检查文件大小
intfilesize=this.FileUpload1.PostedFile.ContentLength;
if(filesize<=10485760)
{
this.Execute();//方法见下
}
else
{
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(),"sizefail","alert('文件大小不能超过10M');",true);
}
}
else
{
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(),"typefail","alert('不支持本格式的文件,请您将文件转换成(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv)再进行上传');",true);
}
}
}
///
///转换文件格式或者上传
///
///
///
///
///
publicvoidExecute()
{
stringfileName=this.FileUpload1.FileName.Trim();
stringffmpeg=ConfigurationManager.AppSettings["ffmpeg"].ToString();//web.config中有相关的配置
stringWorkingDirectory=ConfigurationManager.AppSettings["WorkingDirectory"].ToString();//web.config中有相关的配置
if(VideoToFLV.IsFLV(fileName))
{
//flv格式(直接上传到flv文件夹中)
stringguid=Guid.NewGuid().ToString().Trim();
stringflvurl="../interviewing/videoflv/"+guid+".flv";//视频路径(保存到数据库)
stringflvpath=Server.MapPath(flvurl);
stringimgurl="../interviewing/videoimg/"+Guid.NewGuid().ToString()+".jpg";//图片路径(保存到数据库)
stringimgpath=Server.MapPath(imgurl);//图片上传的绝对路径
this.FileUpload1.SaveAs(flvpath);
try
{
VideoToFLV.CathImage(ffmpeg,imgpath,flvpath,WorkingDirectory);
}
catch(Exception)
{
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(),"failaaa","alert('操作失败');",true);
}
//存档:
将相关数据存入数据库
}
else
{
//先上传原格式
stringguid=Guid.NewGuid().ToString().Trim();
stringname=guid+System.IO.Path.GetExtension(fileName);//不重复的视频名称
stringuppath="../interviewing/video/"+name;
stringmappath=Server.MapPath(uppath);//视频上传的绝对路径
this.FileUpload1.SaveAs(mappath);
//其他格式(转换成flv)
stringimgurl="../interviewing/videoimg/"+Guid.NewGuid().ToString()+".jpg";//图片路径(保存到数据库)
stringimgpath=Server.MapPath(imgurl);//图片上传的绝对路径
stringflvurl="../interviewing/videoflv/"+guid+".flv";//视频路径(保存到数据库)
stringflvpath=Server.MapPath(flvurl);
////将原文件转换成flv
try
{
VideoToFLV.ConvertToFLV(ffmpeg,mappath,flvpath,imgpath,WorkingDirectory);
}
catch(Exception)
{
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(),"fail","alert('操作失败');",true);
}
//存档
if(存档成功)
{
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(),"uploadz","alert('恭喜您上传成功');window.location.href='resume.aspx';",true);
}
else
{
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(),"uploadz","alert('上传失败');;",true);
}
}
}
RepeaterID="Repeater1"runat="server"> D27CDB6E-AE6D-11cf-96B8-444553540000" codebase=" width="400"height="345"> vcastr_file=<%#Eval("VideoURL")%>&BarColor=0xff0000&BarPosition=1&IsAutoPlay=1">
Repeater>
一看便知实际上是一个flash播放器在播放:
value="play.swf?
vcastr_file=<%#Eval("VideoURL")%>&BarColor=0xff0000&BarPosition=1&IsAutoPlay=1">
Play.swf是根目录的一个flash播发器。
vcastr_file=<%#Eval("VideoURL")%>指向视频的地址。
完结
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 上传 视频 服务器 转换 flv 格式 实现 在线播放 功能