本教程展示了如何使用LEADTOOLS SDK在WinForms c#应用程序中通过RTSP捕获、DVR和流媒体视频。
| 概述 | |
|---|---|
| 总结 | 本教程展示如何在WinForms c#应用程序中使用LEADTOOLS多媒体SDK188宝金博怎么下载技术。 |
| 完成时间 | 30分钟 |
| Visual Studio项目 | 下载教程项目(12kb) |
| 平台 | Windows WinForms c#应用程序 |
| IDE | Visual Studio 2017, 2019 |
| 开发许可 | 下载LEADTOOLS |
步骤熟悉创建项目的基本步骤添加引用和设置License教程,在工作之前捕获,DVR和流视频与RTSP - WinForms c#教程。
在Visual Studio中,创建一个新的c# Windows Winforms项目,并添加以下必要的LEADTOOLS引用。
所需要的参考资料取决于项目的目的。引用可以由本地dll添加。
需要以下dll。
dll位于< INSTALL_DIR > \ LEADTOOLS21 \ Bin \ Dotnet4 \ x64:
Leadtools.188宝金博怎么下载Multimedia.dll有关应用程序需要哪些多媒体DLL文件的完整列表,请参阅188宝金博怎么下载188宝金博怎么下载应用程序中包含的多媒体文件.
许可证解锁项目所需的特性。它必须在调用任何工具箱函数之前设置。有关详细信息,包括针对不同平台的教程,请参阅设置运行时License.
有两种类型的运行时许可证:
请注意
中详细介绍了添加LEADTOOLS本地引用和设置许可添加引用和设置License教程。
随着项目的创建、引用的添加和许可的设置,编码就可以开始了。
在解决方案资源管理器,双击Form1.cs显示设计师.打开工具箱再加5按钮到表单的右上角,如下面的截图所示。的按钮的文本而且的名字属性如下表所示。
| 按钮文字 | 按钮名称 |
|---|---|
| 及元件属性…… | btnDeviceProperties |
| 开始捕捉 | btnStartCapture |
| 停止捕获 | btnStopCapture |
| 开始流 | btnStartStreaming |
| 停止播放 | btnStopStreaming |
新增4个标签到表单的左上角,如下面的截图所示。的唱片公司文本而且的名字属性如下表所示。
| 标签文本 | 标签名称 |
|---|---|
| 捕获视频设备 | lblCaptureVideo |
| 捕获音频设备 | lblCaptureAudio |
| IP地址 | lblIpAddress |
| 端口号 | lblPortNumber |
现在,加上两个组合框在表格的顶部,在lblCaptureVideo而且lblCaptureAudio标签.的名字组合框,cbCaptureVideo而且cbCaptureAudio分别。接下来,添加两个新的文本框在表格的顶部,在lblIpAddress而且lblPortNumber标签.的名字文本框,txtIpAddress而且txtPortNumber分别。离开txtIpAddress”文本空白,并设置txtPortNumber的文本来554.
最后,添加一个RichTextBox项移到表单底部,如下面的截图所示。设置它的名字来rtbStatus然后离开文本空白。
在解决方案资源管理器,双击Form1.Designer.cs.将下面的代码添加到InitializeComponent ()方法初始化一个新的CaptureCtrl对象。
这._CaptureCtrl =新Leadtools.188宝金博怎么下载Multimedia.CaptureCtrl ();((System.ComponentModel.ISupportInitialize) (这._CaptureCtrl) .BeginInit ();这.SuspendLayout ();/// / _CaptureCtrl//这._CaptureCtrl.AudioCompressors。选择= -1;这._CaptureCtrl.AudioDevices。选择= -1;这._CaptureCtrl。位置=新System.Drawing。点(100);这._CaptureCtrl。Name =“_CaptureCtrl”;这._CaptureCtrl。OcxState =零;这._CaptureCtrl。大小=新System.Drawing。规模(768、300);这._CaptureCtrl。TabIndex = 2;这._CaptureCtrl.TargetDevices。选择= -1;这._CaptureCtrl。TargetFile =“C: \ \ Temp \ \ capture.avi”;这._CaptureCtrl。文本=“captureCtrl1”;这._CaptureCtrl.VideoCompressors。选择= -1;这._CaptureCtrl.VideoDevices。选择= -1;这._CaptureCtrl.WMProfile。描述="";这._CaptureCtrl.WMProfile。Name ="";
的底部添加下面的代码行Form1类,后# endregion:
私人Leadtools.188宝金博怎么下载Multimedia.CaptureCtrl _CaptureCtrl;
导航回至Form1.cs,使用解决方案资源管理器.单击事件图标。属性窗口.然后,双击负载事件来创建事件处理程序(如果不存在)。这将显示表单后面的代码。
添加使用语句下面到最上面Form1类。
使用系统;使用先;使用System.Net;使用System.Windows.Forms;使用Leadtools;使用Leadtools.188宝金博怎么下载Multimedia;
将下面的全局变量添加到Form1类。
/ /创建RTSPServer公共RTSPServer _server;
将以下代码添加到Form1 ()方法的下面调用SetLicense ().
如果(_CaptureCtrl ! =零){EnumerateCaptureDevices ();//获取可用的音频和视频设备_CaptureCtrl。预览=真正的;//开启预览_CaptureCtrl。TargetFile =”测试。LBL”;//设置生成的DVR文件的名称_CaptureCtrl。TargetFormat = leadtools 188宝金博怎么下载. multimedia . targetformatttype . dvrtransport;//设置目标格式为DVR_CaptureCtrl.VideoCompressors.Mpeg4。选择=真正的;//设置视频压缩为Mpeg4_CaptureCtrl.AudioCompressors.AAC。选择=真正的;//设置音频压缩为AAC}GetIPNumber ();//获取v4 IP地址。
控件中添加以下代码Form1_Load事件处理程序以选择第一个可用的视频设备和音频设备。
私人无效Form1_Load (对象发送者,EventArgs{试一试{如果(_CaptureCtrl.VideoDevices。计数> 0)_CaptureCtrl.VideoDevices[0]。选择=真正的;//选择第一个可用的视频设备如果(_CaptureCtrl.AudioDevices。计数> 0)_CaptureCtrl.AudioDevices[0]。选择=真正的;//选择第一个可用的音频设备}抓(异常交货){对话框。显示(“没有发现外部视频设备。”);}}
添加两个名为EnumerateCaptureDevices ()而且GetIPNumber ()到Form1类。方法中调用这些方法Form1 ()方法,如上所示。
将下面的代码添加到EnumerateCaptureDevices ()方法将机器上所有可用的视频和音频设备添加到组合框.
私人无效EnumerateCaptureDevices (){如果(_CaptureCtrl.VideoDevices。计数!= 0){为(intI = 0;i < _CaptureCtrl.VideoDevices.Count;我+ +){cbCaptureVideo.Items.Add (_CaptureCtrl.VideoDevices[我]);}cbCaptureVideo。SelectedIndex = 0;cbCaptureVideo。SelectedIndexChanged + =新EventHandler (cbCaptureVideo_SelectedIndexChanged);}如果(_CaptureCtrl.AudioDevices。计数!= 0){为(intI = 0;i < _CaptureCtrl.AudioDevices.Count;我+ +){cbCaptureAudio.Items.Add (_CaptureCtrl.AudioDevices[我]);}cbCaptureAudio。SelectedIndex = 0;cbCaptureAudio。SelectedIndexChanged + =新EventHandler (cbCaptureAudio_SelectedIndexChanged);}}
将下面的代码添加到GetIPNumber ()方法获取访问RTSP流的IP地址。
私人无效GetIPNumber (){IPHostEntry主机;host = Dns.GetHostEntry(Dns.GetHostName());foreach(IPAddress ip在host.AddressList){如果(ip。AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork){txtIpAddress。文本=ip.ToString();}}}
接下来,将下面的代码添加到newcbCaptureVideo_SelectedIndexChanged中创建的EventHandlerEnumerateCaptureDevices ()上面的方法。中视频设备的任何时候,此EventHandler都会触发组合框的变化。
私人无效cbCaptureVideo_SelectedIndexChanged (对象发送者,EventArgs{如果(_CaptureCtrl。状态!= Leadtools.Mult188宝金博怎么下载imedia.CaptureState.Running)_CaptureCtrl.VideoDevices [cbCaptureVideo.SelectedIndex]。选择=真正的;其他的{_CaptureCtrl.StopCapture ();_CaptureCtrl.VideoDevices [cbCaptureVideo.SelectedIndex]。选择=真正的;}}
接下来,将下面的代码添加到newcbCaptureAudio_SelectedIndexChanged中创建的EventHandlerEnumerateCaptureDevices ()上面的方法。中的音频设备在任何时候触发组合框的变化。
私人无效cbCaptureAudio_SelectedIndexChanged (对象发送者,EventArgs{试一试{如果(_CaptureCtrl。状态!= Leadtools.Mult188宝金博怎么下载imedia.CaptureState.Running)_CaptureCtrl.AudioDevices [cbCaptureAudio.SelectedIndex]。选择=真正的;其他的{_CaptureCtrl.StopCapture ();_CaptureCtrl.AudioDevices [cbCaptureAudio.SelectedIndex]。选择=真正的;}}抓(异常交货){cbCaptureAudio。SelectedIndex = 0;_CaptureCtrl.AudioDevices[0]。选择=真正的;MessageBox.Show (ex.Message);}}
在解决方案资源管理器,双击Form1.cs显示设计师.双击所有五个按钮来创建自己的事件处理程序。这将显示表单后面的代码。
将下面的代码添加到btnDeviceProperties_Click事件处理程序来显示CaptureCtrl捕获属性对话框,并允许您调整设置。
私人无效btnDeviceProperties_Click (对象发送者,EventArgs{_CaptureCtrl.ShowDialog (Leadtools188宝金博怎么下载.Multimedia.CaptureDlg.Capture这);}
将下面的代码添加到btnStartCapture_Click事件处理程序来启动CaptureCtrl.
私人无效btnStartCapture_Click (对象发送者,EventArgs{//取消注释下面两行以显示构建的图形。/ / _CaptureCtrl.ReadyCapture (Leadtool188宝金博怎么下载s.Multimedia.CaptureMode.VideoAndAudio);/ / _CaptureCtrl.EditGraph ();试一试{如果(_CaptureCtrl.AudioDevices。计数== 0){对话框。显示(“捕捉和流媒体将没有音频”);_CaptureCtrl.StartCapture (Leadtools188宝金博怎么下载.Multimedia.CaptureMode.Video);}其他的{_CaptureCtrl.StartCapture (Leadtools188宝金博怎么下载.Multimedia.CaptureMode.VideoAndAudio);}btnStartCapture。启用了=!btnStartCapture.Enabled;btnStartCapture。启用了=!btnStartCapture.Enabled;如果(System.IO.File.Exists(_CaptureCtrl.TargetFile) && btnStopStreaming.;)启用了= =假)btnStartStreaming。启用了=真正的;如果(_CaptureCtrl。State == CaptureState.Running)rtbStatus。文本=“捕获……”;如果(btnStopStreaming。启用了= =真正的)rtbStatus。文本+ =“t \”+“流……”;}抓(异常交货){MessageBox.Show (ex.Message这。text);}}
将下面的代码添加到btnStopCapture_Click事件处理程序来停止CaptureCtrl.
私人无效btnStopCapture_Click (对象发送者,EventArgs{如果(_CaptureCtrl。State == Leadtools.188宝金博怎么下载Multimedia.CaptureState.Running)//检查Capture控件是否正在运行_CaptureCtrl.StopCapture ();//停止捕获btnStartCapture。启用了=!btnStartCapture.Enabled;btnStopCapture。启用了=!btnStopCapture.Enabled;rtbStatus。文本=_CaptureCtrl。State.ToString() +“…”;如果(btnStartStreaming。启用了= =假)rtbStatus。文本+ ="不流式保存捕获文件";}
将下面的代码添加到btnStartStreaming_Click事件处理程序来创建一个新的RTSPServer实例,并开始将捕获的视频流式传输到指定的端口号。
私人无效btnStartStreaming_Click (对象发送者,EventArgs{如果(txtPortNumber。文本= =“0”){对话框。显示(端口号不能为0);返回;}如果((txtIpAddress。文本! =字符串. empty) && (txtPortNumber。文本! =字符串空虚)){_server =新RTSPServer ();//创建新的RTSPServer实例_server。SetSourceFolder (0,"");//将文件夹名称保留为空字符串会导致保存在当前目录_server。TargetAddress = txtIpAddress.Text;//设置IP地址_server。StartServer (int.Parse (txtPortNumber.Text));//使用端口号开始流btnStopStreaming。启用了=!btnStopStreaming.Enabled;btnStartStreaming。启用了=!btnStartStreaming.Enabled;rtbStatus。文本=“流……”+“不使用这个播放RTSP:”+“rtsp: / /”+ txtIpAddress。文本+”:“+ txtPortNumber。文本+”/测试。LBL”;}其他的{对话框。显示("请确保输入正确的IP地址和端口号");}}
将下面的代码添加到btnStopStreaming_Click事件处理程序停止视频流。
私人无效btnStopStreaming_Click (对象发送者,EventArgs{如果(_server ! =零){_server。StopServer (int.Parse (txtPortNumber.Text));//使用端口号停止流}btnStartStreaming。启用了=!btnStartStreaming.Enabled;btnStopStreaming。启用了=!btnStopStreaming.Enabled;如果(_CaptureCtrl。State == CaptureState.Running)rtbStatus。文本=“捕获……”;其他的rtbStatus。文本=_CaptureCtrl。State.ToString() +“…”;}
按下运行项目F5,或选择调试->开始调试.
如果正确地执行了上述步骤,则应用程序将运行并初始化CaptureCtrl,表单就会出现。要进行测试,请遵循以下步骤:
使用组合框,选择拍摄视频时使用的视频设备和音频设备。音频设备不是必需的。
如果您希望更改任何设备属性,请单击设备属性……
设置端口号到你想要流到的端口。
新闻开始捕捉开始你的视频。
新闻开始流启动视频流。
您可以使用LEADTOOLS MM回放演示来播放捕获的流。
一旦你完成了,你可以选择停止捕获而且停止播放结束视频采集和流。
本教程展示了如何在WinForms c#应用程序中捕获、DVR和流媒体视频。我们还介绍了如何使用CaptureCtrl而且RTSPServer类。