Отключение потоковой камеры Ozeki SDK

Итак, я создаю приложение для IP-камеры onvif, оно настроено так:

public partial class MainWindow : Window
{
    private VideoViewerWPF _videoViewerWpf;
    private BitmapSourceProvider _provider;
    private IIPCamera _ipCamera;
    private MediaConnector _connector;
    private MotionDetector _detector;

    public MainWindow()
    {
        InitializeComponent();
        _connector = new MediaConnector();
        _provider = new BitmapSourceProvider();
        _detector = new MotionDetector();
        SetVideoViewer();

    }

    private void SetVideoViewer()
    {
        _videoViewerWpf = new VideoViewerWPF
        {
            HorizontalAlignment = HorizontalAlignment.Stretch,
            VerticalAlignment = VerticalAlignment.Stretch,
            Background = Brushes.Black,
            Width = 1280,
            Height = 720
        };

        CameraBox.Children.Add(_videoViewerWpf);
        _videoViewerWpf.SetImageProvider(_provider);
    }

    private void CameraStateChanged(object sender, CameraStateEventArgs e)
    {
        Dispatcher.Invoke(() => {
            labeltest.Content = e.State.ToString();
        });
    }

    private void ConnectIPCamera_Click(object sender, RoutedEventArgs e)
    {
        var host = HostTextBox.Text;
        var user = UserTextBox.Text;
        var pass = Password.Password;

        _ipCamera = IPCameraFactory.GetCamera(host, user, pass);
        if (_ipCamera == null) return;
        _connector.Connect(_ipCamera.VideoChannel, _detector);
        _connector.Connect(_detector, _provider);
        _ipCamera.Connect();
        _ipCamera.CameraStateChanged += CameraStateChanged;
        _videoViewerWpf.Start();
    }

    private void DisconnectIPCamera_Click(object sender, RoutedEventArgs e)
    {
        _videoViewerWpf.Stop();

        _ipCamera.Disconnect();
        _ipCamera.Dispose();

        _connector.Disconnect(_ipCamera.VideoChannel, _detector);
        _connector.Disconnect(_detector, _provider);
    }

    void GuiThread(Action action)
    {
        Dispatcher.BeginInvoke(action);
    }

    private void StartMotionDetection()
    {
        _detector.HighlightMotion = HighlightMotion.Highlight;
        _detector.MotionColor = MotionColor.Red;
        _detector.MotionDetection += Detector_MotionDetection;
        _detector.Start();
    }

    void Detector_MotionDetection(object sender, MotionDetectionEvent e)
    {
        GuiThread(() =>
        {
            if (e.Detection)
                MotionEventLabel.Content = "Motion Detected";
            else
                MotionEventLabel.Content = "Motion Stopped";
        });
    }

    private void StopMotionDetection()
    {
        _detector.Stop();
        _detector.MotionDetection -= Detector_MotionDetection;
        _detector.Dispose();
    }

    private void MotionChecked(object sender, RoutedEventArgs e)
    {
        MotionEventLabel.Content = String.Empty;
        if (sender is CheckBox check)
        {
            if ((bool)check.IsChecked)
                StartMotionDetection();
            else
                StopMotionDetection();
        }
    }

    private void Start_Click(object sender, RoutedEventArgs e)
    {
        if(_ipCamera.State == IPCameraState.Connected)
        {
            _ipCamera.CurrentStream = _ipCamera.AvailableStreams.FirstOrDefault(x => x.Name == "MJPEG");

            _ipCamera.Start();
        }
    }

Он подключается просто отлично, но как только я запускаю поток, он начинает подключать поток на секунду, а затем отключается от сети. Я попробовал то, что смог найти в интернете, но ничего не устранило проблему, я чувствую, что не настроил ее правильно, но это первый раз, когда я работаю с камерой onvif и библиотекой, любые советы или информация оцениваются, спасибо!

1 ответ

Это, вероятно, из-за неправильной трансляции, вот что случилось со мной в прошлый раз. Вы можете изменить его в диспетчере устройств onvif для профилей... Создайте новый профиль, выберите поток H264 (независимо от того, какой именно) и удалите все другие профили, которые уже существуют, затем сохраните его и попробуйте свою программу, это должно работать тогда:)

Другие вопросы по тегам