日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

在asp.net中做视频转换,将各种视频文件转换成.flv格式

發布時間:2023/12/9 asp.net 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在asp.net中做视频转换,将各种视频文件转换成.flv格式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先,我們部署一下文件夾.在工程的目錄下新建幾個文件夾如下圖:

UpFiles文件夾是要保存你上傳的文件,PlayFiles文件夾是用于你轉換后保存的文件(用于網上播放)

ImgFile文件夾是保存截取視頻文件的圖片,然后那兩個mencoder和ffmpeg文件夾是視頻轉換工具.此視頻轉換也
可叫做mencoder+ffmpeg視頻轉換.
首先,在配置文件中給這些文件夾進行路徑的配置.如下
<appSettings>
????????
<!--工具文件夾-->
????????
<add?key="ffmpeg"?value="ffmpeg/ffmpeg.exe"/>
????
<add?key="mencoder"?value="mencoder/mencoder.exe"/>
????
<add?key="mplayer"?value="mencoder/mplayer.exe"/>
????????
<!--上傳文件的路徑-->
????????
<add?key="upfile"?value="UpFiles"/>
????????
<!--上專文件圖片路徑-->
????????
<add?key="imgfile"?value="ImgFile"/>
????????
<!--上傳文件圖片大小-->
????????
<add?key="CatchFlvImgSize"?value="240x180"/>
????
<add?key="widthSize"?value="400"/>
????
<add?key="heightSize"?value="350"/>
????????
<!--轉換后文件路徑-->
????????
<add?key="playfile"?value="PlayFiles"/>
????
</appSettings>
在上傳.ASPX頁面中
??標題:<asp:TextBox?ID="txtTitle"?runat="server"?Width="358px"></asp:TextBox>
????????
<asp:RequiredFieldValidator?ID="RequiredFieldValidator2"?runat="server"?ControlToValidate="txtTitle"
????????????ErrorMessage
="標題不為空"></asp:RequiredFieldValidator>
???????
<br?/>
????????
<asp:FileUpload?ID="FileUpload1"?runat="server"?Width="339px"?/>
????????
<asp:Button?ID="btnUpload"?runat="server"?OnClick="btnUpload_Click"?Text="上傳視頻"?Width="70px"?/>
????????文件類型
<span?style="color:Red;">(.asf|.flv|.avi|.mpg|.3gp|.mov|.wmv|.rm|.rmvb)</span>
????????????
<asp:RegularExpressionValidator?ID="imagePathValidator"?runat="server"?ErrorMessage="文件類型不正確"
????????????ValidationGroup
="vgValidation"?Display="Dynamic"?ValidationExpression="^[a-zA-Z]:(\\.+)(.asf|.flv|.avi|.mpg|.3gp|.mov|.wmv|.rm|.rmvb)$"
????????????ControlToValidate
="FileUpload1">
????????????
</asp:RegularExpressionValidator>
????????
<asp:RequiredFieldValidator?ID="RequiredFieldValidator1"?runat="server"?ControlToValidate="FileUpload1"
????????????ErrorMessage
="文件不為空"></asp:RequiredFieldValidator></div>
????????
<div?style="?height:0px;?border-top:solid?1px?red;?font-size:0px;"></div>
????????
<div>上傳列表.</div>
程序工作的原理是:視頻先上傳上去,然后跟著就是開始轉換.
所以.在CS 文件中有

這里為了方便我是用sqlDatasource數據控件做數據的操作.

using?System;
using?System.Data;
using?System.Configuration;
using?System.Web;
using?System.Web.Security;
using?System.Web.UI;
using?System.Web.UI.WebControls;
using?System.Web.UI.WebControls.WebParts;
using?System.Web.UI.HtmlControls;

public?partial?class?_Default?:?System.Web.UI.Page?
{
????
//?擴展名定義
????string[]?strArrFfmpeg?=?new?string[]?{"asf","avi","mpg","3gp","mov"?};
????
string[]?strArrMencoder?=?new?string[]?{"wmv","rm","rmvb"?};
????
protected?void?Page_Load(object?sender,?EventArgs?e)
????{

????}
????
//
????protected?void?btnUpload_Click(object?sender,?EventArgs?e)
????{
????????
????????
string?upFileName?=?"";
????????
if?(this.FileUpload1.HasFile)
????????{
????????????
string?fileName?=?PublicMethod.GetFileName(this.FileUpload1.FileName);//?GetFileName();
????????????if?((string)Session["file"]?==?fileName)
????????????{
????????????????
return;
????????????}
????????????upFileName?
=?Server.MapPath(PublicMethod.upFile?+?fileName);
????????????
this.FileUpload1.SaveAs(upFileName);
????????????
string?saveName?=?DateTime.Now.ToString("yyyyMMddHHmmssffff")?;
????????????
string?playFile?=?Server.MapPath(PublicMethod.playFile?+?saveName);
????????????
string?imgFile?=?Server.MapPath(PublicMethod.imgFile?+?saveName);
????????????
//System.IO.File.Copy(Server.MapPath(PublicMethod.playFile?+?"00000002.jpg"),?Server.MapPath(PublicMethod.imgFile+"aa.jpg"));
????????????PublicMethod?pm?=?new?PublicMethod();
????????????
string?m_strExtension?=?PublicMethod.GetExtension(this.FileUpload1.PostedFile.FileName).ToLower();
????????????
if?(m_strExtension?==?"flv")
????????????{
//直接拷貝到播放文件夾下
????????????????System.IO.File.Copy(upFileName,?playFile+".flv");
????????????????pm.CatchImg(upFileName,?imgFile);
????????????}
????????????
string?Extension?=?CheckExtension(m_strExtension);
????????????
if?(Extension?==?"ffmpeg")
????????????{
??????????????? pm.ChangeFilePhy(upFileName,?playFile,?imgFile);
????????????}
????????????
else?if?(Extension?==?"mencoder")
????????????{
?????????????????pm.MChangeFilePhy(upFileName,?playFile,?imgFile);
????????????}
????????????InsertData(
this.txtTitle.Text,?fileName,saveName);
????????????Session[
"file"]?=?fileName;
????????}
????????
????}
?

????
//
????private?string?CheckExtension(string?extension)
????{
????????
string?m_strReturn?=?"";
????????
foreach?(string?var?in?this.strArrFfmpeg)
????????{
????????????
if?(var?==?extension)
????????????{
????????????????m_strReturn?
=?"ffmpeg";?break;
????????????}
????????}
????????
if?(m_strReturn?==?"")
????????{
????????????
foreach?(string?var?in?strArrMencoder)
????????????{
????????????????
if?(var?==?extension)
????????????????{
????????????????????m_strReturn?
=?"mencoder";?break;
????????????????}
????????????}
????????}
????????
return?m_strReturn;
????}
????
#region?插入數據到數據庫中
????
private?void?InsertData(string?MediaName,string?fileName,string?saveName)
????{
????????
//string?name=fileName.Substring(0,?fileName.LastIndexOf('.'));
????????string?imgName?=?saveName?+?".jpg";//圖片文件名;
????????string?playName?=?saveName?+?".flv";
????????
string?sqlstr?=?"insert?into?Media(FMediaName,FMediaUpPath,FMediaPlayPath,FMediaImgPath)?values(@MName,@MUppath,@MPlaypath,@MImgpath)";
????????
//string?constr?=?ConfigurationManager.ConnectionStrings["sqlcon"].ToString();
????????SqlDataSource1.InsertCommand?=?sqlstr;
????????SqlDataSource1.InsertCommandType?
=?SqlDataSourceCommandType.Text;//?CommandType.Text;
????????SqlDataSource1.InsertParameters.Add("MName",MediaName);
????????SqlDataSource1.InsertParameters.Add(
"MUppath",PublicMethod.upFile+fileName);
????????SqlDataSource1.InsertParameters.Add(
"MPlaypath",PublicMethod.playFile+playName);
????????SqlDataSource1.InsertParameters.Add(
"MImgpath",PublicMethod.imgFile+imgName);
????????SqlDataSource1.Insert();
????}
????
#endregion
?

}
PublicMethod類如下:
在這個類里面主要是做文件轉換和保存,在轉換文件的時候CPU的利用率可以達100%.

它的主要原理是另起一個進程在轉換的時候你會發現你的進程里多了一個.
using?System;
using?System.Configuration;

///?<summary>
///?Summary?description?for?PublicMethod
///?</summary>
public?class?PublicMethod:System.Web.UI.Page
{
????
public?PublicMethod()
????{
?????????
????}
????
//文件路徑
????public?static?string?ffmpegtool?=?ConfigurationManager.AppSettings["ffmpeg"];
????
public?static?string?mencodertool?=?ConfigurationManager.AppSettings["mencoder"];
????
public?static?string?mplayertool?=?ConfigurationManager.AppSettings["mplayer"];
????
public?static?string?upFile?=?ConfigurationManager.AppSettings["upfile"]?+?"/";
????
public?static?string?imgFile?=?ConfigurationManager.AppSettings["imgfile"]?+?"/";
????
public?static?string?playFile?=?ConfigurationManager.AppSettings["playfile"]?+?"/";
????
//文件圖片大小
????public?static?string?sizeOfImg?=?ConfigurationManager.AppSettings["CatchFlvImgSize"];
????
//文件大小
????public?static?string?widthOfFile?=?ConfigurationManager.AppSettings["widthSize"];
????
public?static?string?heightOfFile?=?ConfigurationManager.AppSettings["heightSize"];
????
//???//?//獲取文件的名字
????public?static?string?GetFileName(string?fileName)
????{
????????
int?i?=?fileName.LastIndexOf("\\")?+?1;
????????
string?Name?=?fileName.Substring(i);
????????
return?Name;
????}
????
//獲取文件擴展名
????public?static?string?GetExtension(string?fileName)
????{
????????
int?i?=?fileName.LastIndexOf(".")+1;
????????
string?Name?=?fileName.Substring(i);
????????
return?Name;
????}
????
//
????#region?//運行FFMpeg的視頻解碼,(這里是絕對路徑)
????
///?<summary>
????
///?轉換文件并保存在指定文件夾下面(這里是絕對路徑)
????
///?</summary>
????
///?<param?name="fileName">上傳視頻文件的路徑(原文件)</param>
????
///?<param?name="playFile">轉換后的文件的路徑(網絡播放文件)</param>
????
///?<param?name="imgFile">從視頻文件中抓取的圖片路徑</param>
????
///?<returns>成功:返回圖片虛擬地址;???失敗:返回空字符串</returns>
????public??string?ChangeFilePhy(string?fileName,?string?playFile,?string?imgFile)
????{
????????
//取得ffmpeg.exe的路徑,路徑配置在Web.Config中,如:<add???key="ffmpeg"???value="E:\51aspx\ffmpeg.exe"???/>???
????????string?ffmpeg?=?Server.MapPath(PublicMethod.ffmpegtool);
????????
if?((!System.IO.File.Exists(ffmpeg))?||?(!System.IO.File.Exists(fileName)))
????????{
????????????
return?"";
????????}

????????
//獲得圖片和(.flv)文件相對路徑/最后存儲到數據庫的路徑,如:/Web/User1/00001.jpg???
???????
????????
string?flv_file?=?System.IO.Path.ChangeExtension(playFile,?".flv");


????????
//截圖的尺寸大小,配置在Web.Config中,如:<add???key="CatchFlvImgSize"???value="240x180"???/>???
????????string?FlvImgSize?=?PublicMethod.sizeOfImg;

????????System.Diagnostics.ProcessStartInfo?FilestartInfo?
=?new?System.Diagnostics.ProcessStartInfo(ffmpeg);

????????FilestartInfo.WindowStyle?
=?System.Diagnostics.ProcessWindowStyle.Hidden;

????????FilestartInfo.Arguments?
=?"?-i?"?+?fileName?+?"?-ab?56?-ar?22050?-b?500?-r?15?-s?"?+?widthOfFile?+?"x"?+?heightOfFile?+?"?"?+?flv_file;
????????
//ImgstartInfo.Arguments?=?"???-i???"?+?fileName?+?"???-y???-f???image2???-t???0.05???-s???"?+?FlvImgSize?+?"???"?+?flv_img;

????????
try
????????{
????????????
//轉換
????????????System.Diagnostics.Process.Start(FilestartInfo);
????????????
//截圖
????????????CatchImg(fileName,?imgFile);
????????????
//System.Diagnostics.Process.Start(ImgstartInfo);
????????}
????????
catch
????????{
????????????
return?"";
????????}
????????
//
????????return?"";
????}
????
//
????public?string?CatchImg(string?fileName,string?imgFile)
????{
????????
//
????????string?ffmpeg?=?Server.MapPath(PublicMethod.ffmpegtool);
????????
//
????????string?flv_img?=imgFile+".jpg";
????????
//
????????string?FlvImgSize?=?PublicMethod.sizeOfImg;
????????
//
????????System.Diagnostics.ProcessStartInfo?ImgstartInfo?=?new?System.Diagnostics.ProcessStartInfo(ffmpeg);
????????ImgstartInfo.WindowStyle?
=?System.Diagnostics.ProcessWindowStyle.Hidden;
????????
//
????????ImgstartInfo.Arguments?=?"???-i???"?+?fileName?+?"??-y??-f??image2???-ss?2?-vframes?1??-s???"?+?FlvImgSize?+?"???"?+?flv_img;
????????
try
????????{
????????????System.Diagnostics.Process.Start(ImgstartInfo);
????????}
????????
catch
????????{
????????????
return?"";
????????}
????????
//
????????if?(System.IO.File.Exists(flv_img))
????????{
????????????
return?flv_img;
????????}

????????
return?"";
????}
????
#endregion
????
//
????#region?//運行FFMpeg的視頻解碼,(這里是(虛擬)相對路徑)
????
///?<summary>
????
///?轉換文件并保存在指定文件夾下面(這里是相對路徑)
????
///?</summary>
????
///?<param?name="fileName">上傳視頻文件的路徑(原文件)</param>
????
///?<param?name="playFile">轉換后的文件的路徑(網絡播放文件)</param>
????
///?<param?name="imgFile">從視頻文件中抓取的圖片路徑</param>
????
///?<returns>成功:返回圖片虛擬地址;???失敗:返回空字符串</returns>
????public??string?ChangeFileVir(string?fileName,?string?playFile,?string?imgFile)
????{
????????
//取得ffmpeg.exe的路徑,路徑配置在Web.Config中,如:<add???key="ffmpeg"???value="E:\51aspx\ffmpeg.exe"???/>???
????????string?ffmpeg?=?Server.MapPath(PublicMethod.ffmpegtool);
????????
if?((!System.IO.File.Exists(ffmpeg))?||?(!System.IO.File.Exists(fileName)))
????????{
????????????
return?"";
????????}

????????
//獲得圖片和(.flv)文件相對路徑/最后存儲到數據庫的路徑,如:/Web/User1/00001.jpg???
????????string?flv_img?=?System.IO.Path.ChangeExtension(Server.MapPath(imgFile),?".jpg");
????????
string?flv_file?=?System.IO.Path.ChangeExtension(Server.MapPath(playFile),?".flv");


????????
//截圖的尺寸大小,配置在Web.Config中,如:<add???key="CatchFlvImgSize"???value="240x180"???/>???
????????string?FlvImgSize?=?PublicMethod.sizeOfImg;

????????System.Diagnostics.ProcessStartInfo?FilestartInfo?
=?new?System.Diagnostics.ProcessStartInfo(ffmpeg);
????????System.Diagnostics.ProcessStartInfo?ImgstartInfo?
=?new?System.Diagnostics.ProcessStartInfo(ffmpeg);

????????FilestartInfo.WindowStyle?
=?System.Diagnostics.ProcessWindowStyle.Hidden;
????????ImgstartInfo.WindowStyle?
=?System.Diagnostics.ProcessWindowStyle.Hidden;
????????
//此處組合成ffmpeg.exe文件需要的參數即可,此處命令在ffmpeg???0.4.9調試通過?
????????
//ffmpeg?-i?F:\01.wmv?-ab?56?-ar?22050?-b?500?-r?15?-s?320x240?f:\test.flv
????????FilestartInfo.Arguments?=?"?-i?"?+?fileName?+?"?-ab?56?-ar?22050?-b?500?-r?15?-s?"?+?widthOfFile?+?"x"?+?heightOfFile?+?"?"?+?flv_file;
????????ImgstartInfo.Arguments?
=?"???-i???"?+?fileName?+?"???-y???-f???image2???-t???0.001???-s???"?+?FlvImgSize?+?"???"?+?flv_img;

????????
try
????????{
????????????System.Diagnostics.Process.Start(FilestartInfo);
????????????System.Diagnostics.Process.Start(ImgstartInfo);
????????}
????????
catch
????????{
????????????
return?"";
????????}

????????
/**/
????????
///注意:圖片截取成功后,數據由內存緩存寫到磁盤需要時間較長,大概在3,4秒甚至更長;???
????????
///這兒需要延時后再檢測,我服務器延時8秒,即如果超過8秒圖片仍不存在,認為截圖失敗;???
????????
///此處略去延時代碼.如有那位知道如何捕捉ffmpeg.exe截圖失敗消息,請告知,先謝過!???
????????if?(System.IO.File.Exists(flv_img))
????????{
????????????
return?flv_img;
????????}

????????
return?"";
????}
????
#endregion

????
#region?//運行mencoder的視頻解碼器轉換(這里是(絕對路徑))
????
public?string?MChangeFilePhy(string?vFileName,?string?playFile,?string?imgFile)
????{
????????
string?tool?=?Server.MapPath(PublicMethod.mencodertool);
????????
//string?mplaytool?=?Server.MapPath(PublicMethod.ffmpegtool);
????????
????????
if?((!System.IO.File.Exists(tool))?||?(!System.IO.File.Exists(vFileName)))
????????{
????????????
return?"";
????????}

????????
string?flv_file?=?System.IO.Path.ChangeExtension(playFile,?".flv");


????????
//截圖的尺寸大小,配置在Web.Config中,如:<add???key="CatchFlvImgSize"???value="240x180"???/>???
????????string?FlvImgSize?=?PublicMethod.sizeOfImg;

????????System.Diagnostics.ProcessStartInfo?FilestartInfo?
=?new?System.Diagnostics.ProcessStartInfo(tool);
???????
????????FilestartInfo.WindowStyle?
=?System.Diagnostics.ProcessWindowStyle.Hidden;
????????FilestartInfo.Arguments?
=?"?"?+?vFileName?+?"?-o?"?+?flv_file?+?"?-of?lavf?-lavfopts
?? i_certify_that_my_video_stream_does_not_use_b_frames?-oac?mp3lame?-lameopts?abr:br=56?-ovc?lavc
-lavcopts?vcodec=flv:vbitrate=200:mbd=2:mv0:trell:v4mv:cbp:last_pred=1:dia=-1:cmp=0:vb_strategy=1
-vf?scale=
"?+?widthOfFile?+?":"?+heightOfFile?+?"?-ofps?12?-srate?22050";
????????
try
????????{
????????????System.Diagnostics.Process.Start(FilestartInfo);
????????????CatchImg(flv_file,?imgFile);
????????}
????????
catch
????????{
????????????
return?"";
????????}?
????????
//
????????return?"";
????}
????
#endregion
}


轉載于:https://www.cnblogs.com/moviestar/archive/2007/12/21/1009388.html

總結

以上是生活随笔為你收集整理的在asp.net中做视频转换,将各种视频文件转换成.flv格式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。