IT정보공유/C#

C# OpenCV RTSP 네트워크 IP 카메라 영상 연결

알지오™ 2019. 8. 28.

예전에 MP4, AVI 등의 영상 파일을 재생 시키는 방법을 알아봤었는데요.

이번엔 RTSP 프로토콜을 이용하는 IP 카메라의 영상을 재생 시키는 방법에 대해서 알아보도록 하겠습니다.

예전과 동일하게 오픈소스인 OpenCVSharp 을 이용할건데, 

이번에 보니 OpenCVSharp4로 버전이 업그레이드 되었습니다.

(실제 OpenCVSharp4 버전 v4.1.0.20190416)

NuGet OpenCvSharp4, OpenCvSharp4.runtime.win

NuGet을 통해 설치할수 있고, 

NuGet을 통해 설치할 때는 OpenCvSharp4.runtime.win 도 함께 설치해줘야 합니다.

안그러면 관련된 dll 없다고 오류 메세지 뜨고 샘플코드가 동작되지 않습니다.

 

그리고 추가적으로 OpenCvSharp4에 맞는 ffmpeg dll 파일이 필요합니다.

그리고 기존 버전과 다르게 ffmpeg 관련 dll 파일들이 1개로 통합이 되었습니다.

opencv_ffmpeg410.dll 1개로 통합됨.

설치방법과 다운로드 방법은 기존 포스팅과 비슷하니 참고하시도록 하시고요.

[IT/C#] - C#에서 OpenCV 를 사용하는 방법 - OpenCVSharp 환경구축과 ffmpeg 사용

 

C# RTSP 프로토콜 영상 재생 샘플 코드

네크워크 카메라의 RSTP 영상 스트림을 받는 소스 오픈합니다.

 

//
//
using OpenCvSharp;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace OpencvTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string rtspaddr = "rtsp://admin:admin@10.10.220.151/stream0";
            

            VideoCapture capture = new VideoCapture();

            capture.Open(rtspaddr);


            //Window window = new Window("Form1");
            using (Mat image = new Mat()) // Frame image buffer
            {
                while (true)
                {
                    
                    if (!capture.Read(image))
                    {
                        Cv2.WaitKey();
                    }

                    if (image.Size().Width > 0 && image.Size().Height > 0)
                    {
                        //window.ShowImage(image);
                        Bitmap bitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(image);
                        picScr1.Image = bitmap;
    
                    }

                    if (Cv2.WaitKey(1) >= 0)
                        break;
                    //Cv2.WaitKey(sleepTime);
                    
                }
            }

        }
    }
}

//
//

기존 동영상 파일 재생 소스와 큰 차이는 없습니다. 

차이점에 대해서는 직접 소스를 보면서 참고하시기 바랍니다.

 

그리고 이번 소스에서는 동영상을 OpenCVSharp에서 제공하는 Window로 새창을 띄워 재생하지 않고

MAT 타입의 이미지 정보객체를 OpenCvSharp.Extensions.BitmapConverter.ToBitmap 함수를 사용해

PictureBox.Image에 할당해 RTSP 스트림을 PictureBox에 표시하는 소스입니다.


Bitmap bitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(image);
picScr1.Image = bitmap;

이 부분입니다.

 

PS. VLCPlayer를 이용해 로컬 컴퓨터에서 스트리밍을 하고 해당 스트리밍에 RTSP로 접속을 하려니

영상이 재생이 안되더군요. 같은 VLCPlayer를 이용해 RTSP 접속하면 영상은 나오는데.. 그래서 한참 왜 영상이 나오지 않을까 고민하다 실제 카메라에 붙였더니 바로 나오네요.

 

댓글

💲 추천 글