本教程展示了如何使用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
类。