우분투 18.04에서 QT5 업그레이드
우분투 18.04는 QT5 15.9 버전을 지원한다. 특정 프로그램이 15.12 에서 동작하도록 되어 있어서, apt 패키지를 통해서 QT5를 업그레이드할 수 있는 방법이 없을까 찾아보다가 기록을 남긴다.
우분투의 패키지들은 대체로 최신 버전을 따라가지 못한다. 그러나, 기본 패키지 서버 외에 PPA(Personal Package Archive)를 통해서 최신 버전들을 설치해서 사용해볼 수 있다. QT5 또한 PPA로 관리하는 서버가 있으며, 이를 이용해서 업그레이드하면 된다.
참고한 사이트는 이 곳이다.우선, PPA를 등록해야 한다.
12sudo add-apt-repository ppa:beineri/opt-qt-5.12.7-bionicsudo apt-get update
기본적으로 필요한 패키지들을 묶어서 설치해주는 패키지가 존재하는데, 세 가지를 지원한다.
qt512-meta-minimal
qt512-meta-full
qt512-meta-dbg-full
최소 버전으로 설치한 ...
PTS 개념에 대한 정리
프로젝트 중에 웹을 통해서 실시간 스트림을 재생하는 기능을 구현하는 작업이 있었다. 카메라로부터 RTSP 스트림을 받아 브라우저에서 html5 video 표준으로 재생을 하는 기능이다. 이 기능을 구현하기 위해서는 RTSP 스트림을 받아서 fragmented mp4 스트림으로 remuxing 하는 작업이 필요하다.
remuxing 작업은 ffmpeg의 example 중에 remuxing.c을 이용하면 그리 어렵지 않게 구현할 수 있다. 하지만, 실제 프로젝트에서는 ffmpeg의 입력으로 RTSP 스트림을 받는 것이 아니라, live555를 통해서 받은 payload 데이터 입력을 사용하도록 되어 있었다. 즉, remuxing을 위해서는 live555로부터 들어온 데이터를 ffmpeg의 AVPacket으로 변환 후, remuxing 예제처럼 특정 출력으로 만들어주는 작업이 필요했다.
AVPacket의 data 필드가 디먹싱 된 데이터를 요구하기 때문에, live555로 받은 subse ...
git paramters plugin을 이용한 tag 버전 빌드
젠킨스 설치 문서를 참조해서 젠킨스와 git parameter 플러그인을 설치한다.
설명을 하기 위한 github 저장소를 하나 마련했다. Readme.md 파일 하나만 덩그러니 있다. 태그 정보를 확인하기 위한 것이라, 저장소에는 v0.1.0 이라는 태그를 하나 생성해뒀다.테스트 저장소
jenkins에서 새로운 item을 하나 생성한다. 이름은 아무거나 하나 지정하고, 타입을 pipeline으로 설정한다.
생성한 item의 pipeline script 에 다음 스크립트를 추가해준다.
1234567891011121314151617181920212223242526pipeline { agent any parameters { gitParameter name: 'TAG', type: 'PT_TAG', defaultValue: 'main ...
docker를 통해 jenkins와 git paramter plugin 설치
jenkins를 도커를 통해서 설치하는 것은 다음 한 줄이면 된다.
1docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts-jdk11
실행 중에 다음과 같은 내용이 등장하고, 초기 패스워드를 확인할 수 있다.
Jenkins initial setup is required. An admin user has been created and a password generated.Please use the following password to proceed to installation:
웹브라우저에서 http://localhost:8080 으로 접속한 뒤 초기 패스워드를 입력한다.plugin 을 설치하라는 메뉴가 뜨는데, 그냥 추천하는 것으로 선택해서 진행한다.
Create First Admin User 페이지가 나타난다. 계정 정보를 넣어준다.
Instance Configuration 페이지에서 jenkins URL을 입력하게 되어 ...
git paramters plugin을 이용한 tag 버전 빌드
처음에 jenkins pipeline script 를 다음과 같이 구성했다.구성 내용은 다음과 같다.
Checkout: git repository로부터 main 브랜치의 코드를 받는다.
Packaging: nodejs로 release 할 부분의 코드를 tar로 packaging 한다. 이 파일은 dockerizing 할 때 copy가 되며, 자동으로 압축 해제된다.
Dockerinzing: 내부 docker registry 서버로 push한 후, jenkins workspace에 캐싱하는 이미지를 제거한다.
123456789101112131415161718192021222324pipeline { stages { stage('Checkout') { steps { checkout([$class: 'GitSCM', branches: [[name: ...
DASH 서비스 해보기
DASH 미디어 생성다음 명령을 실행한다.
1234ffmpeg -i f:\test-videos\bigbuckbunny.mp4 -c copy \-media_seg_name "bigbuckbunny$RepresentationID$-$Number%05d$.$ext$" \above-init_seg_name "bigbuckbunny$RepresentationID$.$ext$" \-f dash bigbuckbunny.mpd
bigbuckbunny.mp4 영상을 remuxing 을 통해서 DASH 서비스를 위한 bigbuckbunny.mpd 및 관련 segment 영상을 만든다.
segment 영상은 최초의 것(init_seg_name)과 나머지 것(media_seg_name)으로 분류되어 생성된다.ffmpeg 에서 디폴트로 최초 세그먼트 영상은,
init-stream$RepresentationID$.$ext$,
나머지 세그먼트 영상은,
chunk-strea ...
cmake로 ffmpeg 라이브러리 설치하기
cmake로 ffmpeg 라이브러리 가져오기_윈도우에서 ffmpeg 라이브러리를 가져와서 링크시키는 작업을 수작업으로 계속해왔다. 그러다보니 ffmpeg 라이브러리 자체도 함께 svn이나 git에 함께 포함시켜서 관리하고 공유하는 형태가 되어 버렸다. 물론…_medium.com
앞 선 글에서 제라노 사이트에서 ffmpeg 패키지를 다운로드할 수 있는 방법을 정리했다. 여기에서 불편한 점이 있다. cmake의 build 명령을 실행해야 다운로드가 실행된다는 점, 다운로드 받은 위치가 build하기 위해 지정한 디렉토리의 하부의 깊은 곳에 있다는 점이다.
우선은 cmake의 설정 단계에서 ffmpeg이 다운로드 되도록 시도한다. 버전 정보나 그 밖에 컴파일할 때 환경에 따른 옵션 등을 설정하고자 할 때, configure_file 을 이용한다. 주로 @이나 $ 등을 이용해서 변수 값을 대체하는 형태로 사용하는데, 여기에서는 굳이 이러한 대체 작업은 필요없다. 대신 앞 선 글에서 사용했던 ...
cmake로 ffmpeg 라이브러리 가져오기
윈도우에서 ffmpeg 라이브러리를 가져와서 링크시키는 작업을 수작업으로 계속해왔다. 그러다보니 ffmpeg 라이브러리 자체도 함께 svn이나 git에 함께 포함시켜서 관리하고 공유하는 형태가 되어 버렸다. 물론 한번 작업해 놓으면 그 뒤에 불편한 점은 없지만 버전 관리 서버 입장에서는 공간 낭비가 될 수 있기도 하고, 왠지 정석적인 방법이 아닌 것 같다.
cmake에서는 외부의 라이브러리를 쉽게 다운로드 및 압축 해제를 하고, 필요에 따라서는 빌드와 설치를 할 수 있도록 ExternalProject_Add 라는 함수를 제공한다.
ExternalProject - CMake 3.17.0-rc1 Documentation_ExternalProject_Add The ExternalProject_Add() function creates a custom target to drive download, update/patch…_cmake.org
설명이 그리 쉽지는 않기 때문에 내용을 참조 ...
node.js 에서 import 구문 사용하기
Ecmascript module — 정식 명칭인지는 모르겠다. — 은 node.js에서 기본적으로 지원하지 않는다. 즉, 최근 브라우저에서 모듈을 가져오거나 내보낼 때 사용하는 import/export 를 node.js에서는 사용할 수 없다는 것을 의미한다.
node.js 에서는 기본적으로 module 을 지원하고 있었으며, common module 방식이라는 이름으로 require/exports 을 이용해 유사한 기능을 할 수 있다.
Ecmascript 표준으로 지원하는 것을 node.js에서 그냥 두고만 보고 있지는 않을 것이고, 앞으로는 기본 지원이 될 것이라 예상한다. 실은 버전 12부터는 experimental-modules라는 옵션을 넘겨주면 사용이 가능하다.
babel을 사용해서 transpile을 통해 import/export 방식의 모듈 사용을 지원할 수도 있다. 여기에서는 이 방법을 기록해두고자 한다. 왜냐하면, 이 방법이 범용적으로 사용 ...
“3 JavaScript Refactoring Techniques for Clean Code”을 읽고…
기본적이지만 가독성을 높이기 위한 리팩토링 3가지 방법을 정리해서 머릿 속에 남겨둬야 겠다는 생각으로 기록해둔다.
3 JavaScript Refactoring Techniques for Clean Code_Some simple tips to refactor your code and make it clearer in any language._levelup.gitconnected.com
먼저, 마틴 파울러님이 하신 말씀을 마음에 새겨둔다.
Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
컴퓨터가 이해할 수 있는 코드는 누구나 만들 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 만든다.
자존심과 자긍심이 강한 개발자라면 리팩토링을 하게 될 충분한 동기를 일으키는 말씀이라 생각된다.
3가지 방법은 간단한다.
함수로 뽑아내기 ...