본문 바로가기

Programming

끄적끄적 Effective C# 1. 지역 변수를 사용할 때는 var를 사용하는 것이 낫다. 타입을 명확하게 나타내야 하는 경우가 아니라면 var를 사용하는 것이 좋다. 다만 숫자 타입(int, float, double)등을 선언할 때는 정밀도 때문에 명시적 선언이 좋다. 명확하게 타입을 선언하더라고 가독성이나 안정성이 향상되는 것은 아니다. 올바르게 타입을 명시하지 않은 경우에 var로 선언했을 때 컴파일러의 도움으로 피해갈 수 있는 문제를 강제로 발생시키는 꼴이 될 수도 있다. 2. const보다는 readonly가 좋다. const는 컴파일 상수, readonly는 런타임 상수이다. (컴파일 상수: 컴파일 타임에 값이 설정된다. 숫자형, enum, 문자형, null에 대해서만 사용 가능 중간에 값 변경 시 .. 더보기
[C#/WPF] Joystick 입력 데이터 디스플레이 [MVVM] WPF 기반에서 조이스틱 입력값을 화면에 실시간으로 디스플레이 1. 참조 파일 설정 - Microsoft.DirectX- Microsoft.DirectX.DirectInput 위 2가지 dll 파일 참조가 필요하다. 참조파일 위치는 아래와 같다. (C:\\Windows\...) 그리고 WPF에서 DirectX.DirectInput을 사용하기 위한 패키지를 설치해준다. SharpDX.DirectInput 패키지를 설치하면 아래 패키지 2개가 설치된다. SharpDX의 샘플 코드는 아래 사이트에서 참고하면 된다. SharpDX.DirectInput Sample Code 해당 샘플 코드를 바탕으로 WPF에서 MVVM 패턴으로 소스를 짜봤다. Joystick 입력 값을 받는 Thread를 돌리고 값의 입력이나 .. 더보기
[C#/WPF] FFmpeg로 WebCam / RTP / RTSP 영상 Display & Recode 이전에 웹캠, RTSP 영상을 단순히 출력하는 프로그램을 작성해보았다. 이번에는 출력과 동시에 녹화까지 하도록 수정해 볼 것이다. 시작을 위한 환경설정은 이전 포스팅과 동일하다. [C#/WPF] FFmpeg로 USB Camera(WebCam) Display 하기 - 1 영상 녹화를 위해서는 트랜스코딩을 해야 한다. 물론 비디오 프레임을 읽어서 그대로 파일로 저장할 수도 있지만 대게 입력 비디오의 코덱이 다 다르고 내가 원하는 출력 비디오의 코덱이 다르기 때문이다. (ex. Rawvideo -> H.264) 요즘엔 H.264 코덱을 가장 널리 쓰기 때문에(손실 압축이지만 괜찮은 화질은 보장한다) H.264로 압축해서 비디오 파일을 만들어본다. 트랜스 코딩의 대략적인 과정은 아래 그림과 같다. Input F.. 더보기
[C#/WPF] FFmpeg로 RTP / RTSP 영상 Display 하기 본 포스팅은 [C#/WPF] FFmpeg로 USB Camera(WebCam) Display 하기 시리즈의 보너스 판이다. 링크 [C#/WPF] FFmpeg로 USB Camera(WebCam) Display 하기 - 1[C#/WPF] FFmpeg로 USB Camera(WebCam) Display 하기 - 2[C#/WPF] FFmpeg로 USB Camera(WebCam) Display 하기 - 3 기본적인 환경설정과 대부분의 소스코드는 동일하다. 단 2개 소스 파일의 일부분만 변경하면 웹캠에서 RTP 혹은 RTSP 영상을 출력할 수 있다. 수정할 파일 목록이다. VideoStreamDecoder.cs MainWindow.xaml.cs VideoStreamDecoder.cs using FFmpeg.AutoGe.. 더보기
[C#/WPF] FFmpeg로 USB Camera(WebCam) Display 하기 - 3 웹캠을 디스플레이하기 위해 UI에 Play 버튼과 Image 컨트롤을 추가한다. Image 컨트롤의 이름은 image로 설정하고 (x:Name="image") Button 컨트롤의 이름은 Play_Button으로 설정하고(x:Name="Play_Button") 클릭 이벤트를 추가한다. 그리고 종료 시 thread종료를 위해 MianWindow Closing 이벤트를 추가한다. 프로젝트 참조에 System.Drawing 을 추가하고 MainWindow 코드비하인드에 아래 소스를 추가한다. MianWindow.xaml.cs using System;using System.Linq;using System.Runtime.InteropServices;using System.Threading;using System... 더보기
[C#/WPF] FFmpeg로 USB Camera(WebCam) Display 하기 - 2 아래부터는 이전 장에서 생성한 FFmpegBinariesHelper.csFFmpegHelper.cs VideoFrameConverter.csVideoStreamDecoder.cs 파일들의 소스 코드이니 복사해서 붙여넣는다. (* 클래스 이름이나 네임스페이스는 잘 확인해서 붙여넣어야 오류가 안난다.) FFmpegBinariesHelper.cs using System;using System.IO;using System.Runtime.InteropServices; namespace FFmpeg_usbCam.FFmpeg{ public class FFmpegBinariesHelper { private const string LD_LIBRARY_PATH = "LD_LIBRARY_PATH"; internal stat.. 더보기
[C#/WPF] FFmpeg로 USB Camera(WebCam) Display 하기 - 1 오랜만에 가장 유명한 멀티미디어 오픈소스 라이브러리 중 하나인 FFmpeg로 C#, WPF 환경에서 웹캠 영상을 받아와 화면에 디스플레이하는 기능을 구현해본다. 1장에서는 FFmpeg 패키지 설치부터 기본 환경설정에 대해 다루고 2장에서 관련된 소스를 코딩하는 작업을 다룰까 한다. 먼저 WPF App 프로젝트를 생성하고 NuGet 패키지 관리자로 들어간다. (C# 프로젝트로 생성해도 무방하다. 대신 영상을 디스플레이하는 컨트롤이 달라질수도 있다.) NuGet 패키지 관리자에서 찾아보기로 들어가 ffmpeg.Autogen을 검색해서 설치한다. 그러면 아래 그림과 같이 프로젝트 참조파일에 FFmpeg.AutoGen이 추가된걸 확인할 수 있다. 그리고 프로젝트 아래에 FFmpeg 폴더를 만들어 주고 그 아래에.. 더보기
Text to Speech(TTS) 사용 + 편법 Text to Speech 는 단어나 문장을 기계어가 자동으로 읽어주는 것을 말한다. 윈도우 10버전에서는 단순히 참조 추가만으로 사용할 수 있고 그 이하 버전에서는 SDK를 따로 설치해줘야 할 것이다. 그럼 C#기준으로 윈도우 기본 목소리를 활용하여 텍스트를 읽어보자. 먼저 참조 추가에서 System.Speech를 추가해준다. using System.Speech.Synthesis; SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer();speechSynthesizer.SetOutputToDefaultAudioDevice();speechSynthesizer.SelectVoice("Microsoft Heami Desktop"); speechSynthe.. 더보기