跨机器的视频录制(ASP.net+FMS)

mac2022-06-30  103

根据项目进展需要,我以前做的视频录制的程序(asp.net1.1+Ajaxpro)要部署到内部服务器上,并且程序转化为asp.net2.0+atlas,并架在两个机器上,WEB服务器+FMS。那面临的问题是视频缩略放在哪台服务器上,当然是放在WEB上最好了。    我决定在FMS上开webservice来解决两太机器协作问题:   webservice代码   1using System;  2using System.Web;  3using System.Collections;  4using System.Web.Services;  5using System.Web.Services.Protocols;  6using System.Data;  7using System.Data.SqlClient;  8using System.IO;  9using System.Text; 10using System.Configuration; 11using System.Drawing; 12 13 14/**//// <summary> 15/// 生成图片 下载 视频上传 生成图片 格式转换 16/// </summary> 17[WebService(Namespace = "http://tempuri.org/")] 18[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 19public class WsVideo : System.Web.Services.WebService { 20 21    private string fname; 22    private string fpath; 23 24    public WsVideo() 25    { 26        //如果使用设计的组件,请取消注释以下行  27        //InitializeComponent();  28    } 29    [WebMethod] 30    public string nn() 31    { 32        return fname; 33    } 34    /**//// <summary> 35    /// 用ffmpeg.exe生成缩略图 36    /// </summary> 37    /// <param name="flvName"></param> 38    /// <returns></returns> 39    [WebMethod] 40    public string flvImage(string na, string pa) 41    { 42        fname = na; 43        fpath = pa; 44        string flvName = fpath + "\\" + fname; 45        flvName = @"C:\Program Files\Macromedia\Flash Media Server 2\applications\record\streams\_definst_\" 46            + flvName + ".flv"; 47        string ffmpeg = @"ffmpeg\ffmpeg.exe"; 48        ffmpeg = Server.MapPath(ffmpeg); 49        if (!File.Exists(ffmpeg)) 50        { 51            return "ffmpeg not found!"; 52        } 53        if (!File.Exists(flvName)) 54        { 55            return "flvimg not found"; 56        } 57 58        /**/////改变后缀名 和相对路径  存入数据库的路径名 59        //string flvImg = Path.ChangeExtension(flvName, ".jpg"); 60        //flvImg = flvImg.Substring(flvImg.LastIndexOf('\\') + 1); 61 62        //图片绝对路径 63        string PathFlvImg = Server.MapPath(@"flvImg\" + fname + ".jpg"); 64 65        //截图的尺寸大小 66        string FlvImgSize = "120*90"; 67 68        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg); 69        startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 70 71        //ffmpeg.exe文件需要的参数 72        startInfo.Arguments = " -i \"" + flvName + "\" -y -f image2 -t 1 -s " + FlvImgSize + " \"" + PathFlvImg + "\""; 73 74        try 75        { 76            System.Diagnostics.Process.Start(startInfo); 77        } 78        catch 79        { 80            return "false"; 81        } 82        return "true"; 83    } 84    /**//// <summary> 85    /// 查看缩略图是否已经生成 86    /// </summary> 87    /// <param name="flvName"></param> 88    /// <returns></returns> 89    [WebMethod] 90    public bool ExistsImage(string na) 91    { 92        if (File.Exists(Server.MapPath(@"flvImg\" + na + ".jpg"))) 93        { 94            return true; 95        } 96        return false; 97    } 98    /**//// <summary> 99    /// 图片二进制数组100    /// </summary>101    /// <param name="flvName"></param>102    /// <returns></returns>103    [WebMethod]104    public byte[] ImageByte(string na)105    {106        string file = Server.MapPath(@"flvImg\" + na + ".jpg");107        if (File.Exists(file))108        {109            try110            {111                FileStream s = File.OpenRead(file);112                return ConvertStreamToByteBuffer(s);113            }114            catch115            {116                return new byte[0];117            }118        }119        else120        {121            return new byte[0];122        }        123    }124    /**//// <summary>125    /// ConvertStreamToByteBuffer:把给定的文件流转换为二进制字节数组。126    /// </summary>127    /// <param name="theStream"></param>128    /// <returns></returns>129    public byte[] ConvertStreamToByteBuffer(System.IO.Stream theStream)130    {131        int b1;132        System.IO.MemoryStream tempStream = new System.IO.MemoryStream();133        while ((b1 = theStream.ReadByte()) != -1)134        {135            tempStream.WriteByte(((byte)b1));136        }137        return tempStream.ToArray();138 这里工具还是以前选择的ffmpeg.exe来生成缩略图  这里放在了项目根目录ffmpeg\文件夹下继续处理web程序 是在录制成功后跳转的页面 用到了timer控件   1<%@ Page Language="C#" AutoEventWireup="true" CodeFile="VideoInf.aspx.cs" Inherits="_Default" Async="true" %>  2  3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">  4<html xmlns="http://www.w3.org/1999/xhtml">  5<head runat="server">  6    <title>第二步:填写视频相关信息</title>  7    <style type="text/css">  8    .table1  9{}{ 10    BORDER-RIGHT: #62d9ff 1px solid; 11    BORDER-TOP: #62d9ff 1px solid;  12    FONT-SIZE: 14px;  13    BORDER-LEFT: #62d9ff 1px solid;  14    COLOR: #333366;  15    BORDER-BOTTOM: #62d9ff 1px solid; 16    border-top-width: 1px; 17    border-right-width: 1px; 18    border-bottom-width: 1px; 19    border-left-width: 1px; 20    TABLE-LAYOUT:fixed;  21} 22.tdbg1 23{}{ 24font-weight: bold; font-size: 14px; color: #000066; background-color: #33ccff; 25} 26.input1 27{}{ 28    BORDER-RIGHT: #000099 1px solid;  29    BORDER-TOP: #000099 1px solid;  30    FONT-SIZE: 14px; 31    BORDER-LEFT: #000099 1px solid;  32    WIDTH: 235px; COLOR: #330066;  33    BORDER-BOTTOM: #000099 1px solid;  34    BACKGROUND-COLOR: #fff8f0; 35    border-top-width: 1px; 36    border-right-width: 1px; 37    border-bottom-width: 1px; 38    border-left-width: 1px; 39} 40.txtArea 41{}{ 42    overflow:visible; 43    BORDER-RIGHT: #000099 1px solid;  44    BORDER-TOP: #000099 1px solid;  45    FONT-SIZE: 14px; 46    BORDER-LEFT: #000099 1px solid;  47    WIDTH: 235px; COLOR: #330066;  48    BORDER-BOTTOM: #000099 1px solid;  49    HEIGHT: 25px;  50    BACKGROUND-COLOR: #fff8f0; 51    border-top-width: 1px; 52    border-right-width: 1px; 53    border-bottom-width: 1px; 54    border-left-width: 1px; 55} 56    </style> 57</head> 58<body> 59    <form id="form1" runat="server"> 60        <asp:ScriptManager ID="ScriptManager1" runat="server" /> 61        <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 62            <ContentTemplate> 63                <asp:Timer ID="Timer1" runat="server" Interval="500" OnTick="Timer1_Tick"> 64                </asp:Timer> 65                <asp:Panel ID="Panel1" runat="server"> 66                <table class="table1" id="Table1" style="WIDTH: 163px; HEIGHT: 32px"> 67                <tr> 68                    <td id="load" align="center"><img alt="loading" src="img/load.gif"> 69                        <asp:Label ID="msg" runat="server" Text="正在处理,请稍候!"></asp:Label></td> 70                </tr> 71                </table> 72                </asp:Panel> 73                <asp:Panel ID="Panel2" runat="server"> 74                <div class="tdbg1" style="WIDTH:561px;height:20px"> 75                    第二步:填写视频相关信息</div> 76                <table class="table1" style="WIDTH:550px" cellspacing="3" cellpadding="0" border="0"> 77                <tr><td style="width: 100px;"> 78                    视频缩略图</td> 79                <td style="width: 450px;"> 80                    <asp:Image ID="Image1" runat="server" /></td> 81                </tr> 82                <tr><td> 83                    视频标题</td> 84                <td> 85                    <asp:TextBox ID="tbTitle" runat="server" Width="247px" CssClass="input1"></asp:TextBox></td> 86                </tr> 87                <tr><td> 88                    tag/标签</td> 89                <td style="height: 16px"> 90                    <asp:TextBox ID="tbTag" runat="server" Width="247px" CssClass="input1"></asp:TextBox></td> 91                </tr> 92                <tr><td> 93                    视频分类</td> 94                <td> 95                    <asp:DropDownList ID="DropDownList1" runat="server" Width="63px"> 96                        <asp:ListItem>自拍</asp:ListItem> 97                        <asp:ListItem>翻唱</asp:ListItem> 98                        <asp:ListItem>生活</asp:ListItem> 99                        <asp:ListItem>搞笑</asp:ListItem>100                        <asp:ListItem>娱乐</asp:ListItem>101                        <asp:ListItem>绝活</asp:ListItem>102                        <asp:ListItem>广告</asp:ListItem>103                        <asp:ListItem>舞秀</asp:ListItem>104                        <asp:ListItem>游戏</asp:ListItem>105                        <asp:ListItem>体育</asp:ListItem>106                        <asp:ListItem>艺术</asp:ListItem>107                        <asp:ListItem>综艺</asp:ListItem>108                    </asp:DropDownList></td>109                </tr>110                <tr><td style="vertical-align: top">111                    视频描述</td>112                <td>113                    <asp:TextBox CssClass="txtArea" ID="tbDisc" runat="server" Width="247px" TextMode="MultiLine"></asp:TextBox></td>114                </tr>115                    <tr>116                        <td>117                        </td>118                        <td>119                            <asp:Button ID="Button1" runat="server" Text="ok! 确定发布" OnClick="Button1_Click" /></td>120                    </tr>121                </table>122                </asp:Panel>123            </ContentTemplate>124        </asp:UpdatePanel>125    </form>126</body>127</html> cs代码:   1using System;  2using System.Data;  3using System.Configuration;  4using System.Web;  5using System.Web.Security;  6using System.Web.UI;  7using System.Web.UI.WebControls;  8using System.Web.UI.WebControls.WebParts;  9using System.Web.UI.HtmlControls; 10using System.IO; 11 12public partial class _Default : System.Web.UI.Page  13{ 14    private fmss1.WsVideo fmsVideo = new fmss1.WsVideo(); 15    string sqlcs = ConfigurationManager.ConnectionStrings["Ds10ConnectionString"].ToString(); 16     17    protected void Page_Load(object sender, EventArgs e) 18    { 19        if (!IsPostBack) 20        { 21            string path; 22            string fname; 23            Panel1.Visible = true; 24            Panel2.Visible = false; 25            try 26            { 27                path = Request.QueryString["pa"]; 28                fname = Request.QueryString["na"]; 29            } 30            catch 31            { 32                msg.Text = "非法操作!"; 33                Timer1.Visible = false; 34                return; 35            } 36            if (CheckVideo(path, fname)) 37            { 38                //异步操作webservice 39                fmsVideo.flvImageCompleted += new fmss1.flvImageCompletedEventHandler(flvImage_Finished); 40                fmsVideo.flvImageAsync(fname,path); 41            } 42            else  43            { 44                msg.Text = "不要重复操作!"; 45                Timer1.Visible = false; 46            } 47        } 48    } 49    protected void flvImage_Finished(object sender,fmss1.flvImageCompletedEventArgs e) 50    { 51        if (e.Result == "false") 52        { 53            System.Drawing.Image m = System.Drawing.Image.FromFile(Server.MapPath("flvImg\\失败.jpg")); 54            m.Save(Server.MapPath("flvImg\\" + Request.QueryString["na"+ ".jpg"), System.Drawing.Imaging.ImageFormat.Jpeg); 55        } 56        else  57        {             58            while (!CreateImg()) 59            { 60                System.Threading.Thread.Sleep(1000); 61            } 62        } 63    } 64    protected void Button1_Click(object sender, EventArgs e) 65    { 66        int userID = 1;        //@@ 67        string sql = "relVideo " + userID + ",'原创','" + DropDownList1.SelectedValue + "','"  68            + tbTitle.Text + "','" +tbTag.Text + "','" + tbDisc.Text + "','" 69            + Request.QueryString["na"+ "','" + Request.QueryString["pa"+ "'"; 70        MyCommonSQL Csql = new MyCommonSQL(sqlcs); 71        if (Csql.Return_exec_If(sql)) 72        { 73            string script = "alert('录制成功,页面跳转!');window.location.replace('partyaddif.aspx?if=')"; 74            Microsoft.Web.UI.ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "click", script, true); 75        } 76    } 77    /**//// <summary> 78    /// timer的触发器 79    /// </summary> 80    /// <param name="sender"></param> 81    /// <param name="e"></param> 82    protected void Timer1_Tick(object sender, EventArgs e) 83    { 84        if (File.Exists(Server.MapPath("flvImg\\" + Request.QueryString["na"+ ".jpg"))) 85        { 86            Timer1.Visible = false; 87            Panel1.Visible = false; 88            Panel2.Visible = true; 89            Image1.ImageUrl = "flvImg/" + Request.QueryString["na"+ ".jpg"; 90        } 91    } 92    /**//// <summary> 93    /// 查看数据库中是否存在 94    /// </summary> 95    /// <param name="pa"></param> 96    /// <param name="na"></param> 97    /// <returns></returns> 98    private bool CheckVideo(string pa,string na) 99    {100        MyCommonSQL Csql = new MyCommonSQL(sqlcs);101        string sql = "ExistsVideo '" + na + "','" + pa + "'";102        sql = Csql.Return_s(sql);103        if (sql != "0")104        {105            return false;106        }107        return true;108    }109    /**//// <summary>110    /// 接收图片并生成111    /// </summary>112    /// <returns></returns>113    private bool CreateImg()114    {115        if (fmsVideo.ExistsImage(Request.QueryString["na"]))//检测图片在FMS上是否生成116        {117            try118            {119                /**////定义并初始化文件对象;120                ///得到二进制文件字节数组;121                byte[] image = fmsVideo.ImageByte(Request.QueryString["na"]);122                /**////转换为支持存储区为内存的流123                System.IO.MemoryStream memStream = new System.IO.MemoryStream(image);124                System.Drawing.Image m = System.Drawing.Image.FromStream(memStream);125                /**////保存126                m.Save(Server.MapPath("flvImg\\" + Request.QueryString["na"+ ".jpg"), System.Drawing.Imaging.ImageFormat.Jpeg);127                return true;128            }129            catch130            {131                System.Drawing.Image m = System.Drawing.Image.FromFile(Server.MapPath("flvImg\\失败.jpg"));132                m.Save(Server.MapPath("flvImg\\" + Request.QueryString["na"+ ".jpg"), System.Drawing.Imaging.ImageFormat.Jpeg);133                return true;134            }135        }136        return false;137    }138} 运行测试一下 图片成功生成 开始录制: 提交后页面在处理中: 视频缩略图生成后: 新Blog,第一贴  以后都在这里写。嘿嘿,写给自己看。

转载于:https://www.cnblogs.com/gugula/archive/2006/11/27/573917.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)