LMNetSnk Namespace > ILMNetSnkConnection Interface : ID Property |
'Declaration <DispIdAttribute(3)> ReadOnly Property ID As Integer
'Usage Dim instance As ILMNetSnkConnection Dim value As Integer value = instance.ID
[DispIdAttribute(3)] int ID {get;}
[DispIdAttribute(3)] property int ID { int get(); }
Connections to the server are assigned IDs automatically. The connection ID is unique over the lifetime of the server object. This ID can be used to retrieve a connection interface pointer using the FindConnection method.
For more information, refer to the ILMNetSnk object.Imports Leadtools Imports Leadtools.Multimedia Imports LeadtoolsMultimediaExamples.Fixtures Public _result As Boolean = False Public _serverAndClient As CaptureAndPlayCtrlForm = New CaptureAndPlayCtrlForm() Private _captureCtrl As CaptureCtrl Private _playCtrl As PlayCtrl Private _pMux As LMNetMux Private _pSink As LMNetSnk Private Const _networkUrl As String = "ltsf://127.0.0.1:27015" ' network stream url Private Const _networkAuthenticatedUrl As String = "ltsf://User1:P99999@127.0.0.1:27015" ' network stream url Private Const TestMessage As String = "LEAD NETWORK" Public Sub RequireLoginExample() ' reference the capture control _captureCtrl = _serverAndClient.CaptureCtrl ' reference the play control _playCtrl = _serverAndClient.PlayCtrl Try ' try to find a video camera If _captureCtrl.VideoDevices("Logitech") Is Nothing Then Throw New Exception("No Logitech video device available") End If _captureCtrl.VideoDevices("Logitech").Selected = True ' select a video compressor _captureCtrl.VideoCompressors.Mpeg4.Selected = True ' set the target output file _captureCtrl.TargetFormat = TargetFormatType.NET _captureCtrl.TargetFile = _networkUrl If _captureCtrl.IsModeAvailable(CaptureMode.Video) Then ' here we will only capture 15 seconds for this example. ' in a real application, you would not normally want to ' set the time limit for capture. _captureCtrl.TimeLimit = 15 _captureCtrl.UseTimeLimit = True ' enable preview _captureCtrl.Preview = True ' subscribe to the started event for this example ' we will connect a client after the capture starts AddHandler _captureCtrl.Started, AddressOf CaptureCtrl_Started ' subscribe to the media event for the player AddHandler _playCtrl.MediaEvent, AddressOf PlayCtrl_MediaEvent ' ready the capture graph in order to get the LNMetMux instance _captureCtrl.ReadyCapture(CaptureMode.Video) ' get the network multiplexer reference _pMux = TryCast(_captureCtrl.GetSubObject(CaptureObject.TargetFilter), LMNetMux) If Not _pMux Is Nothing Then ' set some mux settings _pMux.LiveSource = True End If ' get the network sink reference _pSink = TryCast(_captureCtrl.GetSubObject(CaptureObject.Sink), LMNetSnk) If Not _pSink Is Nothing Then ' set some mux settings _pSink.RequireLogin = True _pSink.UseEncryption = LMNetSnkLib.NetSnk_Encryption.NetSnk_Encryption_None ' clear all user registrations _pSink.RemoveAllUsers() ' setup up user logins AddModifyUsers() ' enumeration users EnumerateUsers() ' add a restriction AddRestriction() ' test timer for connection checking _serverAndClient.TestTimer.Interval = 10000 _serverAndClient.TestTimer.Start() AddHandler _serverAndClient.TestTimer.Tick, AddressOf ConnectionChecker End If ' start capture _captureCtrl.StartCapture(CaptureMode.Video) ' we'll loop on the state and pump messages for this example. ' but you should not need to if running from a Windows Forms application. Do While _captureCtrl.State = CaptureState.Running OrElse _playCtrl.State = PlayState.Running Application.DoEvents() Loop ' release the mux and demux COM objects If Not _pMux Is Nothing Then Marshal.ReleaseComObject(_pMux) End If If Not _pSink Is Nothing Then Marshal.ReleaseComObject(_pSink) End If End If Catch ex As Exception _result = False End Try End Sub Private Sub AddModifyUsers() ' early out if we could not get the sink interface If _pSink Is Nothing Then Return End If ' get the current connection list version Dim oldVers As Integer = _pSink.ConnectionVersion ' add a user _pSink.AddUser("User1", "P12345") ' get the current connection list version Dim newVers As Integer = _pSink.ConnectionVersion ' add another user _pSink.AddUser("User2", "P67890") ' find a user Dim user1Id As Integer = _pSink.FindUser("User1") ' set user 1's password -- was set above in the AddUser call ' but we will change it here for demonstration purposes _pSink.SetPassword(user1Id, "P99999") ' remove User2 from the registered users list Dim user2Id As Integer = _pSink.FindUser("User2") _pSink.RemoveUser(user2Id) End Sub Private Sub EnumerateUsers() ' get the current user count Dim userCount As Integer = _pSink.UserCount ' verify that we have two users now _result = (userCount = 1) ' demonstrate enumeration registered users Dim i As Integer = 0 Do While i < userCount ' do something with user names and passwords Dim userName As String = _pSink.GetUsername(i) Dim passWord As String = _pSink.GetPassword(i) i += 1 Loop End Sub Private Sub AddRestriction() ' add a restriction to the client which has the IP = 10.0.0.5 ' this will not allow a connection from this address. ' get number of restrictions Dim oldRestCount As Integer = _pSink.RestrictionCount ' Number of restrictions we have. Dim restrictCount As Integer = _pSink.AddRestriction("10.0.0.5") ' get number of restrictions Dim newRestCount As Integer = _pSink.RestrictionCount ' verify that we have a new restriction count _result = _result And (oldRestCount <> newRestCount) ' enumeration restrictions (demonstration purposes) Dim i As Integer = 0 Do While i < restrictCount Dim restAddress As String = _pSink.GetRestriction(i) ' do something with Restriction i += 1 Loop ' find our restriction we added above Dim restriction As Integer = _pSink.FindRestriction("10.0.0.5") ' remove it _pSink.RemoveRestriction(restriction) ' remove all restrictions (demonstration purposes) _pSink.RemoveAllRestrictions() End Sub Private Sub CaptureCtrl_Started(ByVal sender As Object, ByVal e As EventArgs) StartClient() End Sub Private Sub StartClient() Try ' connect a client _playCtrl.SourceFile = _networkAuthenticatedUrl Catch ex As Exception _result = False Console.WriteLine("Player (Client) Exception: {0}", ex.Message) End Try End Sub Private Sub ConnectionChecker(ByVal sender As Object, ByVal e As EventArgs) _serverAndClient.TestTimer.Stop() ' get the number of users connected to the server Dim connCount As Integer = _pSink.ConnectionCount ' get the first connection (demonstration purposes) Dim pcon As ILMNetSnkConnection = _pSink.FindConnection(1) ' release it -- it is a COM object you know! Marshal.ReleaseComObject(pcon) ' get the first connection pcon = _pSink.FirstConnection ' check all connections with the server Do While Not pcon Is Nothing Dim pnext As ILMNetSnkConnection = pcon.NextConnection Dim id As Long = pcon.ID Dim userName As String = pcon.Username Dim connAddr As String = pcon.Address ' determine whether connection is enabled ' it should be, we just enabled it above Dim enabled As Boolean = pcon.Enabled ' is it connected Dim connected As Boolean = pcon.Connected ' determine whether connection is disabled ' and disconnect it if so If enabled = False Then ' close this connection pcon.Close() End If Marshal.ReleaseComObject(pcon) pcon = pnext Loop ' close all connections (demonstration purposes) _pSink.CloseAll() _serverAndClient.TestTimer.Start() End Sub Private Sub PlayCtrl_MediaEvent(ByVal sender As Object, ByVal e As MediaEventArgs) If e.eventCode = MediaEventCode.EC_COMPLETE Then _result = _result And True End If End Sub
using Leadtools; using Leadtools.Multimedia; using LeadtoolsMultimediaExamples.Fixtures; public bool _result = false; public CaptureAndPlayCtrlForm _serverAndClient = new CaptureAndPlayCtrlForm(); CaptureCtrl _captureCtrl; PlayCtrl _playCtrl; LMNetMux _pMux; LMNetSnk _pSink; const string _networkUrl = @"ltsf://127.0.0.1:27015"; // network stream url const string _networkAuthenticatedUrl = @"ltsf://User1:P99999@127.0.0.1:27015"; // network stream url const string TestMessage = "LEAD NETWORK"; public void RequireLoginExample() { // reference the capture control _captureCtrl = _serverAndClient.CaptureCtrl; // reference the play control _playCtrl = _serverAndClient.PlayCtrl; try { // try to find a video camera if (_captureCtrl.VideoDevices["Logitech"] == null) throw new Exception("No Logitech video device available"); _captureCtrl.VideoDevices["Logitech"].Selected = true; // select a video compressor _captureCtrl.VideoCompressors.Mpeg4.Selected = true; // set the target output file _captureCtrl.TargetFormat = TargetFormatType.NET; _captureCtrl.TargetFile = _networkUrl; if (_captureCtrl.IsModeAvailable(CaptureMode.Video)) { // here we will only capture 15 seconds for this example. // in a real application, you would not normally want to // set the time limit for capture. _captureCtrl.TimeLimit = 15; _captureCtrl.UseTimeLimit = true; // enable preview _captureCtrl.Preview = true; // subscribe to the started event for this example // we will connect a client after the capture starts _captureCtrl.Started += new EventHandler(CaptureCtrl_Started); // subcribe to the media event for the player _playCtrl.MediaEvent += new MediaEventHandler(PlayCtrl_MediaEvent); // ready the capture graph in order to get the LNMetMux instance _captureCtrl.ReadyCapture(CaptureMode.Video); // get the network multiplexer reference _pMux = _captureCtrl.GetSubObject(CaptureObject.TargetFilter) as LMNetMux; if (_pMux != null) { // set some mux settings _pMux.LiveSource = true; } // get the network sink reference _pSink = _captureCtrl.GetSubObject(CaptureObject.Sink) as LMNetSnk; if (_pSink != null) { // set some mux settings _pSink.RequireLogin = true; _pSink.UseEncryption = LMNetSnkLib.NetSnk_Encryption.NetSnk_Encryption_None; // clear all user registrations _pSink.RemoveAllUsers(); // setup up user logins AddModifyUsers(); // enumeration users EnumerateUsers(); // add a restriction AddRestriction(); // test timer for connection checking _serverAndClient.TestTimer.Interval = 10000; _serverAndClient.TestTimer.Start(); _serverAndClient.TestTimer.Tick += new EventHandler(ConnectionChecker); } // start capture _captureCtrl.StartCapture(CaptureMode.Video); // we'll loop on the state and pump messages for this example. // but you should not need to if running from a Windows Forms application. while (_captureCtrl.State == CaptureState.Running || _playCtrl.State == PlayState.Running) { Application.DoEvents(); } // release the mux and demux COM objects if (_pMux != null) Marshal.ReleaseComObject(_pMux); if (_pSink != null) Marshal.ReleaseComObject(_pSink); } } catch (Exception ex) { _result = false; } } private void AddModifyUsers() { // early out if we could not get the sink interface if (_pSink == null) return; // get the current connection list version int oldVers = _pSink.ConnectionVersion; // add a user _pSink.AddUser("User1", "P12345"); // get the current connection list version int newVers = _pSink.ConnectionVersion; // add another user _pSink.AddUser("User2", "P67890"); // find a user int user1Id = _pSink.FindUser("User1"); // set user 1's password -- was set above in the AddUser call // but we will change it here for demonstration purposes _pSink.SetPassword(user1Id, "P99999"); // remove User2 from the registered users list int user2Id = _pSink.FindUser("User2"); _pSink.RemoveUser(user2Id); } private void EnumerateUsers() { // get the current user count int userCount = _pSink.UserCount; // verify that we have two users now _result = (userCount == 1); // demostrate enumeration registered users for (int i = 0; i < userCount; i++) { // do something with user names and passwords string userName = _pSink.GetUsername(i); string passWord = _pSink.GetPassword(i); } } private void AddRestriction() { // add a restriction to the client which has the IP = 10.0.0.5 // this will not allow a connection from this address. // get number of restrictions int oldRestCount = _pSink.RestrictionCount; // Number of restrictions we have. int restrictCount = _pSink.AddRestriction("10.0.0.5"); // get number of restrictions int newRestCount = _pSink.RestrictionCount; // verify that we have a new restriction count _result &= (oldRestCount != newRestCount); // enumeration restrictions (demonstration purposes) for(int i = 0 ; i < restrictCount ; i++) { string restAddress = _pSink.GetRestriction(i); // do something with Restriction } // find our restriction we added above int restriction = _pSink.FindRestriction("10.0.0.5"); // remove it _pSink.RemoveRestriction(restriction); // remove all restrictions (demonstration purposes) _pSink.RemoveAllRestrictions(); } void CaptureCtrl_Started(object sender, EventArgs e) { StartClient(); } private void StartClient() { try { // connect a client _playCtrl.SourceFile = _networkAuthenticatedUrl; } catch (Exception ex) { _result = false; Console.WriteLine("Player (Client) Exception: {0}", ex.Message); } } void ConnectionChecker(object sender, EventArgs e) { _serverAndClient.TestTimer.Stop(); // get number of users connected to the server int connCount = _pSink.ConnectionCount; // get the first connection (demonstration purposes) ILMNetSnkConnection pcon = _pSink.FindConnection(1); // release it -- it is a COM object you know! Marshal.ReleaseComObject(pcon); // get the first connection pcon = _pSink.FirstConnection; // check all connections with the server while (pcon != null) { ILMNetSnkConnection pnext = pcon.NextConnection; long id = pcon.ID; string userName = pcon.Username; string connAddr = pcon.Address; // check if connection is enabled or not // it should be, we just enabled it above bool enabled = pcon.Enabled; // is it connected bool connected = pcon.Connected; // check if this connection is disabled // and disconnect it if so if (enabled == false) { // close this connection pcon.Close(); } Marshal.ReleaseComObject(pcon); pcon = pnext; } // close all connections (demonstration purposes) _pSink.CloseAll(); _serverAndClient.TestTimer.Start(); } private void PlayCtrl_MediaEvent(object sender, MediaEventArgs e) { if (e.eventCode == MediaEventCode.EC_COMPLETE) _result &= true; }