회사 업무 관련하여서 C#을 이용하여 IP Camera를 보는 프로그램을 작성하게 되었어요.
IP Camera의 RSTP Address를 사용하여 View 기능을 구현했어요.
사용 환경
1. IDE : Visual Studio Professional 2013
2. IP Camera : EVC-2MD24S
3. DLL : FFmpeg.AutoGen, OpenCvSharp
4. .NET Framework Version : 4.6.1
영상 처리를 해주는 OpenCvSharp와 영상 재생을 위해서 FFmpeg를 NuGet 패키지에서 다운로드하여 참조했어요.
EVC-2MD24S IP Camera RTSP Address 획득은 웹브라우저를 이용하여 카메라에 접속하여,
SETUP의 NETWORK->RTSP->ONVIF에서 RTSP ADDRESS의 SUB STREAM을 이용하였어요.
Test가 목적이었기 때문에,
폼 디자인은 영상이 출력될 PictureBox와 영상의 시작을 알리는 Button만 넣었어요.
그리고, 별도의 예외처리는 하지 않았다는 점을 참고해주세요.
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;
using System.Diagnostics;
using OpenCvSharp;
using FFmpeg;
namespace Camera_OpenCV
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
VideoCapture camera;
private void button1_Click(object sender, EventArgs e)
{
string RSTPaddr = "rtsp://192.168.100.101/stream2";
camera = new VideoCapture(RSTPaddr);
using(Mat cameraImage = new Mat)
{
while(true)
{
if (!camera.Read(cameraImage))
{
Cv2.WaitKey();
}
if (cameraImage.Size().Width > 0 && cameraImage.Size().Height > 0)
{
Bitmap bitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(cameraImage);
pictureBox1.Image = bitmap;
}
if(Cv2.WaitKey(1) >= 0)
break;
}
}
}
}
}
프로그램에 대해서 간단히 설명을 드릴게요.
OpenCv의 VideoCapture를 사용하여 RTSP 주소 IP Camera 영상 정보 가져오는 부분이에요.
camera = new VideoCapture(RSTPaddr);
Mat를 사용하여 IP Camera 영상을 저장하는 부분이에요.
using(Mat cameraImage = new Mat())
IP Camera의 영상을 PictureBox에 그리는 부분이에요.
Bitmap bitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(cameraImage);
pictureBox1.Image = bitmap;
Test 확인을 위하여 VideoLAN 프로그램 VLC 미디어 재생기를 설치했어요.
https://mingtrace.tistory.com/441
프로그램을 동작시켜 봤어요.
정상적으로 동작하는 것을 확인했어요.
VLC 미디어 재생기와 비교를 해봤어요.
영상이 스트림이 되는 것은 제가 작성한 프로그램이 반응 속도는 빨랐어요.
- 한 분에게 부탁하여, 잠시 지나가 보라고 했었어요.
VLC의 기능이 많아서 그렇지 않을까 생각됩니다.
IP 카메라의 RTSP 주소를 이용하여,
NuGet 패키지 OpenCV와 FFmpeg를 사용하여 스트리밍을 재생하는 프로그램을 제작해 보았어요^^
저의 글을 읽어 주셔서 감사합니다. 오늘도 즐거운 하루 보내세요.
저의 글이 조금이나마 도움이 되셨다면 로그인이 필요 없는 공감♥ 한번 꾸욱 눌러주세요 하하~
[혼자서 공부해본 C#] 'Hello C# World' 출력! (10) | 2020.06.19 |
---|---|
[혼자서 공부해본 C#] C# 예약어(키워드) 정리! (10) | 2020.06.12 |
[혼자서 공부해본 C#] C# 이란? (12) | 2020.05.27 |
댓글 영역