private void WorkThread() { do { try { // Get device link - takes a few moments, as this has to query the device deviceLink = new Onvif.DeviceLink(settings); deviceLink.Start(); // Get media link - also has to do some queries mediaLink = deviceLink.GetMedia(); mediaLink.Start(); Onvif.MediaLink.Profile[] profiles = mediaLink.GetProfiles(); var defaultProfile = profiles[0]; snapshotUri = mediaLink.GetSnapshotUri(defaultProfile); streamUri = mediaLink.GetStreamUri(defaultProfile); } catch (Exception e) { Console.WriteLine($"Failed to access camera {settings.Identifier}, retrying shortly: " + e.ToString()); Thread.Sleep(1000); } } while (streamUri == null); while (!stop.IsSet) { // TODO: Some sort of ongoing work? Or are we done? Thread.Sleep(1000); } }
internal void Stop() { stop.Set(); startupThread.Join(); if (deviceLink != null) { deviceLink.Stop(); deviceLink = null; } if (mediaLink != null) { mediaLink.Stop(); mediaLink = null; } snapshotUri = null; streamUri = null; StopStream(true); streamWatcher.Stop(); }