Ajoutez des fichiers projet.
This commit is contained in:
61
MainForm.Designer.cs
generated
Normal file
61
MainForm.Designer.cs
generated
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
namespace robospot_camera_finder
|
||||||
|
{
|
||||||
|
partial class MainForm
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
lbMain = new ListBox();
|
||||||
|
SuspendLayout();
|
||||||
|
//
|
||||||
|
// lbMain
|
||||||
|
//
|
||||||
|
lbMain.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
||||||
|
lbMain.FormattingEnabled = true;
|
||||||
|
lbMain.ItemHeight = 15;
|
||||||
|
lbMain.Location = new Point(12, 23);
|
||||||
|
lbMain.Name = "lbMain";
|
||||||
|
lbMain.Size = new Size(776, 409);
|
||||||
|
lbMain.TabIndex = 0;
|
||||||
|
lbMain.MouseDoubleClick += lbMain_MouseDoubleClick;
|
||||||
|
//
|
||||||
|
// MainForm
|
||||||
|
//
|
||||||
|
AutoScaleDimensions = new SizeF(7F, 15F);
|
||||||
|
AutoScaleMode = AutoScaleMode.Font;
|
||||||
|
ClientSize = new Size(800, 450);
|
||||||
|
Controls.Add(lbMain);
|
||||||
|
Name = "MainForm";
|
||||||
|
Text = "RoboSpot MotionCamera finder";
|
||||||
|
FormClosing += MainForm_FormClosing;
|
||||||
|
ResumeLayout(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private ListBox lbMain;
|
||||||
|
}
|
||||||
|
}
|
||||||
95
MainForm.cs
Normal file
95
MainForm.cs
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
using System.ComponentModel;
|
||||||
|
using System.Net;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Web;
|
||||||
|
using Tmds.MDns;
|
||||||
|
|
||||||
|
namespace robospot_camera_finder
|
||||||
|
{
|
||||||
|
public partial class MainForm : Form
|
||||||
|
{
|
||||||
|
private readonly ServiceBrowser browser = new();
|
||||||
|
|
||||||
|
private BindingList<Camera> all_cameras = new();
|
||||||
|
|
||||||
|
class Camera
|
||||||
|
{
|
||||||
|
private IPAddress ip;
|
||||||
|
private string name;
|
||||||
|
|
||||||
|
public Camera(string name, IPAddress ip)
|
||||||
|
{
|
||||||
|
this.name = name;
|
||||||
|
this.ip = ip;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string camera_name
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public IPAddress camera_ip
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return ip;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public MainForm()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
browser.StartBrowse("_rtsp._tcp");
|
||||||
|
|
||||||
|
lbMain.DataSource = all_cameras;
|
||||||
|
lbMain.DisplayMember = "camera_name";
|
||||||
|
lbMain.ValueMember = "camera_ip";
|
||||||
|
|
||||||
|
browser.ServiceAdded += (sender, args) =>
|
||||||
|
{
|
||||||
|
foreach (var cam_addr in args.Announcement.Addresses)
|
||||||
|
{
|
||||||
|
if (cam_addr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
|
||||||
|
{
|
||||||
|
Camera camera = new Camera("Camera " + cam_addr.ToString(), cam_addr);
|
||||||
|
all_cameras.Add(camera);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
browser.ServiceRemoved += (sender, args) =>
|
||||||
|
{
|
||||||
|
foreach (var cam_ip in args.Announcement.Addresses)
|
||||||
|
{
|
||||||
|
if (cam_ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
|
||||||
|
{
|
||||||
|
foreach (var camera in all_cameras)
|
||||||
|
{
|
||||||
|
if (cam_ip == camera.camera_ip)
|
||||||
|
{
|
||||||
|
all_cameras.Remove(camera);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||||
|
{
|
||||||
|
browser.StopBrowse();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void lbMain_MouseDoubleClick(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
Form viewer = new StreamViewer(lbMain.GetItemText(lbMain.SelectedItem), lbMain.SelectedValue.ToString());
|
||||||
|
viewer.Show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
60
MainForm.resx
Normal file
60
MainForm.resx
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
<root>
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
||||||
17
Program.cs
Normal file
17
Program.cs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
namespace robospot_camera_finder
|
||||||
|
{
|
||||||
|
internal static class Program
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The main entry point for the application.
|
||||||
|
/// </summary>
|
||||||
|
[STAThread]
|
||||||
|
static void Main()
|
||||||
|
{
|
||||||
|
// To customize application configuration such as set high DPI settings or default font,
|
||||||
|
// see https://aka.ms/applicationconfiguration.
|
||||||
|
ApplicationConfiguration.Initialize();
|
||||||
|
Application.Run(new MainForm());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
124
StreamViewer.Designer.cs
generated
Normal file
124
StreamViewer.Designer.cs
generated
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
using LibVLCSharp.Forms.Shared;
|
||||||
|
|
||||||
|
namespace robospot_camera_finder
|
||||||
|
{
|
||||||
|
partial class StreamViewer
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
components = new System.ComponentModel.Container();
|
||||||
|
videoView = new LibVLCSharp.WinForms.VideoView();
|
||||||
|
tbZoom = new TrackBar();
|
||||||
|
lblMinZoom = new Label();
|
||||||
|
lblMaxZoom = new Label();
|
||||||
|
timerUpdateZoom = new System.Windows.Forms.Timer(components);
|
||||||
|
((System.ComponentModel.ISupportInitialize)videoView).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)tbZoom).BeginInit();
|
||||||
|
SuspendLayout();
|
||||||
|
//
|
||||||
|
// videoView
|
||||||
|
//
|
||||||
|
videoView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
||||||
|
videoView.BackColor = Color.Black;
|
||||||
|
videoView.Location = new Point(12, 12);
|
||||||
|
videoView.MediaPlayer = null;
|
||||||
|
videoView.Name = "videoView";
|
||||||
|
videoView.Size = new Size(870, 495);
|
||||||
|
videoView.TabIndex = 0;
|
||||||
|
videoView.Text = "videoView";
|
||||||
|
//
|
||||||
|
// tbZoom
|
||||||
|
//
|
||||||
|
tbZoom.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right;
|
||||||
|
tbZoom.LargeChange = 20;
|
||||||
|
tbZoom.Location = new Point(889, 30);
|
||||||
|
tbZoom.Maximum = 9999;
|
||||||
|
tbZoom.Name = "tbZoom";
|
||||||
|
tbZoom.Orientation = Orientation.Vertical;
|
||||||
|
tbZoom.Size = new Size(45, 459);
|
||||||
|
tbZoom.SmallChange = 10;
|
||||||
|
tbZoom.TabIndex = 1;
|
||||||
|
tbZoom.TickFrequency = 300;
|
||||||
|
tbZoom.TickStyle = TickStyle.TopLeft;
|
||||||
|
tbZoom.Value = 10;
|
||||||
|
tbZoom.KeyUp += tbZoom_KeyUp;
|
||||||
|
tbZoom.MouseUp += tbZoom_MouseUp;
|
||||||
|
//
|
||||||
|
// lblMinZoom
|
||||||
|
//
|
||||||
|
lblMinZoom.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||||
|
lblMinZoom.AutoSize = true;
|
||||||
|
lblMinZoom.Location = new Point(902, 492);
|
||||||
|
lblMinZoom.Name = "lblMinZoom";
|
||||||
|
lblMinZoom.Size = new Size(19, 15);
|
||||||
|
lblMinZoom.TabIndex = 2;
|
||||||
|
lblMinZoom.Text = "1x";
|
||||||
|
//
|
||||||
|
// lblMaxZoom
|
||||||
|
//
|
||||||
|
lblMaxZoom.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||||
|
lblMaxZoom.AutoSize = true;
|
||||||
|
lblMaxZoom.Location = new Point(902, 12);
|
||||||
|
lblMaxZoom.Name = "lblMaxZoom";
|
||||||
|
lblMaxZoom.Size = new Size(25, 15);
|
||||||
|
lblMaxZoom.TabIndex = 3;
|
||||||
|
lblMaxZoom.Text = "32x";
|
||||||
|
//
|
||||||
|
// timerUpdateZoom
|
||||||
|
//
|
||||||
|
timerUpdateZoom.Enabled = true;
|
||||||
|
timerUpdateZoom.Interval = 10000;
|
||||||
|
timerUpdateZoom.Tick += timerUpdateZoom_Tick;
|
||||||
|
//
|
||||||
|
// StreamViewer
|
||||||
|
//
|
||||||
|
AutoScaleDimensions = new SizeF(7F, 15F);
|
||||||
|
AutoScaleMode = AutoScaleMode.Font;
|
||||||
|
ClientSize = new Size(933, 519);
|
||||||
|
Controls.Add(lblMaxZoom);
|
||||||
|
Controls.Add(lblMinZoom);
|
||||||
|
Controls.Add(tbZoom);
|
||||||
|
Controls.Add(videoView);
|
||||||
|
Margin = new Padding(4, 3, 4, 3);
|
||||||
|
Name = "StreamViewer";
|
||||||
|
Text = "LibVLCSharp.WinForms";
|
||||||
|
FormClosed += StreamViewer_FormClosed;
|
||||||
|
((System.ComponentModel.ISupportInitialize)videoView).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)tbZoom).EndInit();
|
||||||
|
ResumeLayout(false);
|
||||||
|
PerformLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private LibVLCSharp.WinForms.VideoView videoView;
|
||||||
|
private TrackBar tbZoom;
|
||||||
|
private Label lblMinZoom;
|
||||||
|
private Label lblMaxZoom;
|
||||||
|
private System.Windows.Forms.Timer timerUpdateZoom;
|
||||||
|
}
|
||||||
|
}
|
||||||
95
StreamViewer.cs
Normal file
95
StreamViewer.cs
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
using LibVLCSharp.Shared;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Data;
|
||||||
|
using System.DirectoryServices.ActiveDirectory;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace robospot_camera_finder
|
||||||
|
{
|
||||||
|
public partial class StreamViewer : Form
|
||||||
|
{
|
||||||
|
public LibVLC _libVLC;
|
||||||
|
public MediaPlayer _mp;
|
||||||
|
|
||||||
|
string username = "admin";
|
||||||
|
string password = "RoboSpot10";
|
||||||
|
string cam_ip = "";
|
||||||
|
|
||||||
|
public StreamViewer(string name, string ip)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
_libVLC = new LibVLC();
|
||||||
|
_mp = new MediaPlayer(_libVLC);
|
||||||
|
cam_ip = ip;
|
||||||
|
|
||||||
|
timerUpdateZoom.Start();
|
||||||
|
updateZoomSlider();
|
||||||
|
|
||||||
|
videoView.MediaPlayer = _mp;
|
||||||
|
var media = new Media(_libVLC, new Uri("rtsp://" + ip + "/profile2/media.smp"));
|
||||||
|
media.AddOption(":network-caching=25");
|
||||||
|
_mp.Play(media);
|
||||||
|
media.Dispose();
|
||||||
|
this.Text = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateZoomSlider()
|
||||||
|
{
|
||||||
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://" + cam_ip + "/stw-cgi/ptzcontrol.cgi?msubmenu=query&action=view&Query=Zoom");
|
||||||
|
request.Credentials = new NetworkCredential(username, password);
|
||||||
|
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
|
||||||
|
string text;
|
||||||
|
using (var sr = new StreamReader(response.GetResponseStream())) { text = sr.ReadToEnd(); }
|
||||||
|
string[] resp_lines = text.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
string zoom_value = resp_lines[1].Substring(resp_lines[1].LastIndexOf('=') + 1);
|
||||||
|
tbZoom.Value = int.Parse(zoom_value);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendZoomValue(string zoom_pulse)
|
||||||
|
{
|
||||||
|
// clamp values to allowed range
|
||||||
|
if (int.Parse(zoom_pulse) < 10)
|
||||||
|
{
|
||||||
|
zoom_pulse = "10";
|
||||||
|
}
|
||||||
|
if (int.Parse(zoom_pulse) > 9999)
|
||||||
|
{
|
||||||
|
zoom_pulse = "9999";
|
||||||
|
}
|
||||||
|
|
||||||
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://" + cam_ip + "/stw-cgi/ptzcontrol.cgi?msubmenu=absolute&action=control&ZoomPulse=" + zoom_pulse);
|
||||||
|
request.Credentials = new NetworkCredential(username, password);
|
||||||
|
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void StreamViewer_FormClosed(object sender, FormClosedEventArgs e)
|
||||||
|
{
|
||||||
|
_mp.Stop();
|
||||||
|
_mp.Dispose();
|
||||||
|
_libVLC.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void tbZoom_KeyUp(object sender, KeyEventArgs e)
|
||||||
|
{
|
||||||
|
sendZoomValue(tbZoom.Value.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void tbZoom_MouseUp(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
sendZoomValue(tbZoom.Value.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void timerUpdateZoom_Tick(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
updateZoomSlider();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
63
StreamViewer.resx
Normal file
63
StreamViewer.resx
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
<root>
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<metadata name="timerUpdateZoom.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>17, 17</value>
|
||||||
|
</metadata>
|
||||||
|
</root>
|
||||||
20
robospot-camera-finder.csproj
Normal file
20
robospot-camera-finder.csproj
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<TargetFramework>net7.0-windows</TargetFramework>
|
||||||
|
<RootNamespace>robospot_camera_finder</RootNamespace>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<UseWindowsForms>true</UseWindowsForms>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="LibVLCSharp" Version="3.8.2" />
|
||||||
|
<PackageReference Include="LibVLCSharp.Forms" Version="3.8.2" />
|
||||||
|
<PackageReference Include="LibVLCSharp.WinForms" Version="3.8.2" />
|
||||||
|
<PackageReference Include="Tmds.MDns" Version="0.8.0" />
|
||||||
|
<PackageReference Include="VideoLAN.LibVLC.Windows" Version="3.0.20" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
25
robospot-camera-finder.sln
Normal file
25
robospot-camera-finder.sln
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 17
|
||||||
|
VisualStudioVersion = 17.5.33516.290
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "robospot-camera-finder", "robospot-camera-finder.csproj", "{D68CD277-4F05-4BEC-879C-E2097CC4BEDC}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{D68CD277-4F05-4BEC-879C-E2097CC4BEDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{D68CD277-4F05-4BEC-879C-E2097CC4BEDC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{D68CD277-4F05-4BEC-879C-E2097CC4BEDC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{D68CD277-4F05-4BEC-879C-E2097CC4BEDC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {23A9FE53-49F6-4D0C-951F-CF3CA11F091C}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
Reference in New Issue
Block a user