Потоковая веб-камера с использованием C # и просматривать вывод через веб-браузер - PullRequest
0 голосов
/ 01 октября 2019

Я сейчас работаю над этим проектом. Это как 3D-принтер с камерой, которую можно просматривать в Интернете.

Я нашел эту библиотеку "Motion JPEG Streaming Server" в codeproject, но она работает как средство просмотра VNC.

ImageStreamingServer server = new ImageStreamingServer(); 
server.Start(8080);

Я только хотел транслировать выходные данные веб-камеры, которая уже транслируется на PictureBox. Поэтому я попытался поместить его в качестве источника.

ImageStreamingServer server = new ImageStreamingServer();
server.ImagesSource = pictureBox1.Image;
server.Start(8080);

, и он возвращает это сообщение.

Невозможно неявно преобразовать тип 'System.Drawing.Image' в 'System.Collections.Generic.IEnumerable (System.Drawing.Image) '.

Возможно ли преобразовать System.Drawing.Image в System.Collections.Generic.IEnumerable (System.Drawing.Image)?

Если нет, можете ли вы предложить бесплатную библиотеку, где я могу транслировать веб-камеру (через C #) в сеть (через HTML, JavaScript или PHP).

Источник: https://www.codeproject.com/Articles/371955/Motion-JPEG-Streaming-Server

Обновление: я использую aforge для отображения веб-камеры на картинке.

        private bool DeviceExist = false;
        private FilterInfoCollection videoDevices;
        private VideoCaptureDevice videoSource = null;
        private ImageStreamingServer webcam_server;

        private void Form1_Load(object sender, EventArgs e)
        {            
            // Initialize Webcam
            getCamList(); 
            if (DeviceExist)
            {
                videoSource = new VideoCaptureDevice(videoDevices[webcam_list.SelectedIndex].MonikerString);
                videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame);
                CloseVideoSource();
                videoSource.Start();
            }

            // Start Webcam Server
            webcam_server = new ImageStreamingServer();
            webcam_server.ImagesSource = webcam.Image; // This Line
            webcam_server.Start(8080);

        }

        // Display Camera List on ListBox
        private void getCamList()
        {
            try
            {
                videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
                webcam_list.Items.Clear();
                if (videoDevices.Count == 0)
                {
                    throw new ApplicationException();
                }
                DeviceExist = true;
                foreach (FilterInfo device in videoDevices)
                {
                    webcam_list.Items.Add(device.Name);
                }
                webcam_list.SelectedIndex = 0;
            }
            catch (ApplicationException)
            {
                DeviceExist = false;
            }
        }

        // Webcam Frames
        private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            Bitmap webcam_output = (Bitmap)eventArgs.Frame.Clone();
            webcam.Image = webcam_output;

        }

        // Close Video Source
        private void CloseVideoSource()
        {
            if (!(videoSource == null))
            {
                if (videoSource.IsRunning)
                {
                    videoSource.SignalToStop();
                    videoSource = null;
                }
            }
        }

1 Ответ

0 голосов
/ 01 октября 2019

Вы можете предоставить бесконечный «поток» изображений:

server.ImagesSource = GetImages();

private IEnumerable<Image> GetImages()
{
    while (true)
    {
       yield return pictureBox1.Image;
    }
}
...