捕获,DVR和流视频与RTSP - WinForms c#

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

创建项目并添加LEADTOOLS引用

在Visual Studio中,创建一个新的c# Windows Winforms项目,并添加以下必要的LEADTOOLS引用。

所需要的参考资料取决于项目的目的。引用可以由本地dll添加。

需要以下dll。

dll位于< INSTALL_DIR > \ LEADTOOLS21 \ Bin \ Dotnet4 \ x64

有关应用程序需要哪些多媒体DLL文件的完整列表,请参阅188宝金博怎么下载188宝金博怎么下载应用程序中包含的多媒体文件

设置License文件

许可证解锁项目所需的特性。它必须在调用任何工具箱函数之前设置。有关详细信息,包括针对不同平台的教程,请参阅设置运行时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然后离开文本空白。

UI控件的位置截图。

添加CaptureCtrl

解决方案资源管理器,双击Form1.Designer.cs.将下面的代码添加到InitializeComponent ()方法初始化一个新的CaptureCtrl对象。

c#
._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

c#
私人Leadtools.188宝金博怎么下载Multimedia.CaptureCtrl _CaptureCtrl;

添加CaptureCtrl初始化代码

导航回至Form1.cs,使用解决方案资源管理器.单击事件图标。属性窗口.然后,双击负载事件来创建事件处理程序(如果不存在)。这将显示表单后面的代码。

添加使用语句下面到最上面Form1类。

c#
使用系统;使用先;使用System.Net;使用System.Windows.Forms;使用Leadtools;使用Leadtools.188宝金博怎么下载Multimedia;

将下面的全局变量添加到Form1类。

c#
/ /创建RTSPServer公共RTSPServer _server;

将以下代码添加到Form1 ()方法的下面调用SetLicense ()

c#
如果(_CaptureCtrl ! =EnumerateCaptureDevices ();//获取可用的音频和视频设备_CaptureCtrl。预览=真正的//开启预览_CaptureCtrl。TargetFile =”测试。LBL”//设置生成的DVR文件的名称_CaptureCtrl。TargetFormat = leadtools 188宝金博怎么下载. multimedia . targetformatttype . dvrtransport;//设置目标格式为DVR_CaptureCtrl.VideoCompressors.Mpeg4。选择=真正的//设置视频压缩为Mpeg4_CaptureCtrl.AudioCompressors.AAC。选择=真正的//设置音频压缩为AACGetIPNumber ();//获取v4 IP地址。

控件中添加以下代码Form1_Load事件处理程序以选择第一个可用的视频设备和音频设备。

c#
私人无效Form1_Load (对象发送者,EventArgs试一试如果(_CaptureCtrl.VideoDevices。计数> 0)_CaptureCtrl.VideoDevices[0]。选择=真正的//选择第一个可用的视频设备如果(_CaptureCtrl.AudioDevices。计数> 0)_CaptureCtrl.AudioDevices[0]。选择=真正的//选择第一个可用的音频设备(异常交货)对话框。显示(“没有发现外部视频设备。”);

添加两个名为EnumerateCaptureDevices ()而且GetIPNumber ()Form1类。方法中调用这些方法Form1 ()方法,如上所示。

将下面的代码添加到EnumerateCaptureDevices ()方法将机器上所有可用的视频和音频设备添加到组合框

c#
私人无效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地址。

c#
私人无效GetIPNumber ()IPHostEntry主机;host = Dns.GetHostEntry(Dns.GetHostName());foreach(IPAddress iphost.AddressList)如果(ip。AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)txtIpAddress。文本=ip.ToString();

接下来,将下面的代码添加到newcbCaptureVideo_SelectedIndexChanged中创建的EventHandlerEnumerateCaptureDevices ()上面的方法。中视频设备的任何时候,此EventHandler都会触发组合框的变化。

c#
私人无效cbCaptureVideo_SelectedIndexChanged (对象发送者,EventArgs如果(_CaptureCtrl。状态!= Leadtools.Mult188宝金博怎么下载imedia.CaptureState.Running)_CaptureCtrl.VideoDevices [cbCaptureVideo.SelectedIndex]。选择=真正的其他的_CaptureCtrl.StopCapture ();_CaptureCtrl.VideoDevices [cbCaptureVideo.SelectedIndex]。选择=真正的

接下来,将下面的代码添加到newcbCaptureAudio_SelectedIndexChanged中创建的EventHandlerEnumerateCaptureDevices ()上面的方法。中的音频设备在任何时候触发组合框的变化。

c#
私人无效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);

添加捕获、DVR和流代码

解决方案资源管理器,双击Form1.cs显示设计师.双击所有五个按钮来创建自己的事件处理程序。这将显示表单后面的代码。

将下面的代码添加到btnDeviceProperties_Click事件处理程序来显示CaptureCtrl捕获属性对话框,并允许您调整设置。

c#
私人无效btnDeviceProperties_Click (对象发送者,EventArgs_CaptureCtrl.ShowDialog (Leadtools188宝金博怎么下载.Multimedia.CaptureDlg.Capture);

将下面的代码添加到btnStartCapture_Click事件处理程序来启动CaptureCtrl

c#
私人无效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

c#
私人无效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实例,并开始将捕获的视频流式传输到指定的端口号。

c#
私人无效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事件处理程序停止视频流。

c#
私人无效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,表单就会出现。要进行测试,请遵循以下步骤:

  1. 使用组合框,选择拍摄视频时使用的视频设备和音频设备。音频设备不是必需的。

  2. 如果您希望更改任何设备属性,请单击设备属性……

  3. 设置端口号到你想要流到的端口。

  4. 新闻开始捕捉开始你的视频。

  5. 新闻开始流启动视频流。

  6. 您可以使用LEADTOOLS MM回放演示来播放捕获的流。

  7. 一旦你完成了,你可以选择停止捕获而且停止播放结束视频采集和流。

总结

本教程展示了如何在WinForms c#应用程序中捕获、DVR和流媒体视频。我们还介绍了如何使用CaptureCtrl而且RTSPServer类。

另请参阅

net
iOS
188金宝搏的网址客服|支持|联系我们|知识产权公告
©1991 - 2021领德科技有限公司版权所有。