본문 바로가기

놀기/잡스러운 것39

__DATE__ and __TIME__ 을 time_t로 변환하기 __DATE__ , __TIME__은 자주 쓰는 macro 중의 하나다. 프로그램의 로그 또는 빌드 날짜를 넣을 때 쓰기도 하고 아주 유용하다. 이 유용한 macro를 time_t로 변환해 볼까 하는 생각을 다들 해봤을 것 같다. 이번에 __DATE__, __TIME__을 쓰면서 값을 유지해야 할 일이 있었다. 같은 값을 여러 군데 넣어야 하는데 그냥 macro를 사용하면 차이가 나서 문제가 되는 상황이었다. 그렇다면 방법은 이 값을 저장해야 하는데 그냥 저장하는 것보다 time_t와 같은 형태로 저장하면 유용할 것 같다. 이럴 때 우리가 해야 할 일은 코딩이 아니라 검색 검색 검색. 당연히 많은 예제가 있고 입맛에 맞는 것을 고르면 된다. compile_time_to_system_time - Funct.. 2023. 9. 20.
[NVR 만들기] H.265 지원 H.264를 기본으로 보통 사용하지만 압축효율이 좋은 H.265도 많이 쓴다. 한정된 저장 공간 안에 많은 일 수의 영상을 저장하기 위해서는 당연히 압축 효율이 좋은 것이 최고다. LIVE555에서도 H.265 Transport Stream을 지원한다. bmNVR을 하면서 사용했던 testH264VideoToTransportStream와 동일한 형태의 testH265VideoToTransportStream가 sample program으로 포함되어 있다. 파일을 열어보면 라인 수도 동일하다. 차이점은 H264VideoStreamFramer를 쓰느냐 H265VideoStreamFramer를 쓰느냐의 차이다. H.264와 H.265는 NAL Type에서 달라 구분이 쉽다. 이 정보를 기반으로 어떤 Framer.. 2023. 9. 2.
[bmNVR] 수신한 데이터를 받을 Source 만들기 (ByteStreamMemoryBufferSource 참조) 앞서 테스트 프로그램으로 사용한 ts 파일을 만드는 프로그램 소스는 간단하다. RTSPClient 테스트 프로그램으로 저장한 H.264 파일을 넣으면 ts 파일을 출력해 준다. 소스도 손바닥 정도로 짤막하다. 대신, 파일을 소스로 하여 ByteStreamFileSource를 사용한다. 우리는 파일이 아닌 RTSPClient로 받은 Stream Data를 바로 전달해야 하므로 적합하지는 않다. 십여 년 전 dshow를 사용할 때는 Shared Memory를 사용하여 Sink / Source filter를 만들어 사용했는데 LIVE555에는 ByteStreamMemoryBufferSource를 제공한다. 이 클래스를 사용하면 간단하게 해결 가능할 것 같다. testH264VideoToTransportStre.. 2023. 9. 1.
[bmNVR] QT 기반으로 옮기기 한때, MFC를 많이 사용했다. 내가 느끼기에 MFC의 전성기는 Visual C++ 6.0이다. 손쉽게 윈도우즈 프로그래밍 가능했고 요즘은 다양한 편집기가 있지만, Visual C++ IDE는 편집기로써도 우수했다. 그러나 세상이 바뀌면서 좋은 도구가 많이 나오고 프로그래밍 언어도 늘어나면서 MFC의 가치는 떨어졌다. 전적으로 나의 개인적인 생각이다. 그에 반해 QT는 강력한 것 같다. 리눅스 시절, X상에서 UI 프로그래밍을 할 때 접했지만 큰 관심이 없어 지나갔던 QT였는데 OS에 상관없이 사용가능한 훌륭한 라이브러리가 되었다. ‘OS independent’라는 말은 그 자체로 효과적이다. 스크립트 언어의 장점 중의 하나가 OS에 상관없이 사용할 수 있다는 것인데 QT 또한 그와 같다. 또한, QT라.. 2023. 8. 30.