libvpx 빌드하기 (파일 첨부 되어있음)
뻘짓

libvpx 빌드하기 (파일 첨부 되어있음)

MPEG의 H.264 정말 너무 좋다.

왠만한 하드웨어 가속은 다 받을 수 있고, 화질도 좋고, 용량도 작고, 스트리밍에도 최적이다. 일반 사용자에게는 말이다.

문제는 개발 할 때 이다. 이놈들을 사용하기 위해 대중적으로 사용되는 라이브러리는 FFMPEG이며 이는 GPL이 걸려있다. 내 소스를 공개해야한다. 더 큰 문제는 이 H.264 라는 규격 자체가 특허가 걸려있어 로열티를 지불 해야 한다.

최근 AOM 결성으로 그를 의식한 MPEG는 웹 서비스에 대해서만 로열티 지불을 면제 해주고있다.

VP8, VP9 등의 코덱은 구글이 인수한 코덱을 기반으로 개량된 코덱이다. 구글이 통크게 모두 제약없는 오픈소스로 풀어버렸다. 이 코덱들은 비교적 최신 코덱이라 하드웨어 가속을 빋지 못할 수도 있다. 인텔 i3, i5, i7 관계없이 일단 7세대 부터는 vp9 인코딩을 지원하기 때문에 큰 문제 없이 활용 할 수 있다. vp9 디코딩은 인텔 6세대 CPU는 지원한다. 그 외엔 확인 안해봄.

일단 깃허브 가서 libvpx 받자 -> github.com/webmproject/libvpx

 

webmproject/libvpx

Mirror only. Please do not send pull requests. Contribute to webmproject/libvpx development by creating an account on GitHub.

github.com

 

이걸 빌드 하려면 cygwin 같은 자질구레한것들을 설치하고 연동해야한다. 빌드 한번 하겠다고 자주 사용 하지도 않는걸 설치해서 컴퓨터를 더럽히는것도 꺼림칙 하니, 이걸 그대로 리눅스 환경으로 가져가서 make 한 후 만들어진 Visual Studio 솔루션들을 다시 윈도우로 가져와서 빌드 했다. 이것저것 소프트웨어의 정상 작동을 빌어야되는 것보다는 그냥 속 편하게 리눅스로 가져가서 시원하게 빌드 하는것이 낫다고 판단했다. 어차피 저런 메이크파일이나 멀티플랫폼 소스들은 리눅스를 기준으로 작성되는것이 어쩌면 당연하기 때문이다.

 

나는 이것저것 잡다한 툴과 환경이 갖춰진 녀석들중 가장 완성도 높은 칼리 리눅스를 선택했다. 물론 우분투도 되나 지금 당장 급하게 쓸 수 있는놈으로 하다보니 칼리를 쓰게 되었다. 우분투 서버를 아무래도 하나 파놓아야겠다.

시그윈이나, MingW 같은 뭐시기에 익숙한 사람은 이 방법이 오히려 생 삽질이라고 생각 할 수도 있겠다.

지금 바로 칼리 다운로드 받고 광명 찾기 :  www.kali.org/downloads

 

Kali Linux Downloads

 

www.kali.org

근데 이거 설치 할려면 한국어로 하지말고 영어로 하자. 설치가 다 된 후 한글이 다 깨져서 명령 치기가 매우 불편해진다. 

libvpx를 알아 볼 정도라면 그래도 당신은 개발 경험이 어느정도 갖춰져 있을 것이므로 굳이 이 리눅스의 설치 과정이나 가상머신 셋팅 등등의 설명은 생략 하도록 하겠다.

 

libvpx를 zip 파일로 받았다면 압축을 풀어주자.

> $ unzip libvpx-master.zip -d ~/

나는 그냥 홈 폴더에 풀었다.

 

까보면 안에 여러 소스가 있고 vp8, vp9 vpx, third-party 등등 이상한 디렉토리들이 있다. 

여러 뻘짓을 해본 결과, 가장 뒤탈이 없고 깔끔하게 빌드되는 방법을 소개한다. (사실 libvpx 깃허브에 어느정도 설명 된 내용이다.)

 

build 라는 디렉터리가 있을것이다.

> $ cd build            때려박고 이동한다.

이 안에는 make 라는 디렉터리가 있을 것인데 신경 쓰지 않고 현재 디렉터리에서 메이크파일 구성을 해주면 된다.

 

> $ sudo ../configure --target=x86_64-win64-vs16 --enable-vp8 --enable-vp9 --enable-libyuv

configure 엔 여러 빌드 옵션과 설정이 있는데 내가 선택한 옵션은 다음과 같다

--target=x86_64-win64-vs16 : 만들어질 빌드환경은 윈도우즈 64비트의 비주얼스튜디오 2016 버전으로

--enable-vp8 : vp8 코덱을 사용 하도록 셋팅

--enable-vp9 : vp9 코덱을 사용 하도록 셋팅

--enable-libyuv : libyuv 안에는 BGRAToI420( )  같은 유용한 유틸리티 함수들도 있다. RGB 포맷에서 YUV 색 공간으로 변환 해 줄 일도 간혹 있을 수 있는데 그러한 유틸리티가 이 안에 있어서 선택했다. 

 

아무튼 그렇게 실행하고 나면 뭔가 쪼로록 생성 되기 시작한다.

이 작업을 통해 설정 한 대로 메이크파일이 구성된다.

 

그리고 make 하면 된다

> $ sudo make

Visual Studio의 프로젝트 파일과 sln 솔루션이 생성된다.

 

이렇게 만들어진 애들을 윈도우로 가져온다. libvpx 통째로 가져와야한다. build 만 똑 떼오면 안된다.

 

통째로 뜯어온 모습.

 

이제 거의 끝이다.

이 코덱이라는 녀석은 연산 속도가 빨라야한다. 매 프레임마다 일일히 연산할테니 당연히 가볍고 빠르게, 하드웨어 명령이 지원한다면 그 명령을 활용하는 방향으로 가야한다. 그래서 이놈들 소스중 일부는 어셈블리로 짜여있는데, 요즘 비주얼 스튜디오는 어셈블러가 빠져있다. 이 어셈블러를 수동으로 넣어줘야한다. 되게 간단하다.

그냥 yasm 이라는 놈을 여기에 짱박아두기만 하면 된다. libvpx 에서는 이 어셈블러를 기본적으로 사용하도록 설정 되어있으므로 다른 어셈블러를 넣어 기분나쁜 빌드에러를 마주하지 않도록 주의하자.

yasm.exe
0.60MB

 

짱박은 모습

 

여기까지 끝났으면 vpx.sln 솔루션을 실행해서 비주얼스튜디오에서 빌드작업을 하면 된다. 아까 리눅스환경에서 make 할때 이미 관련 설정이 먹여진채로 프로젝트가 생성되었기 때문에 빌드에는 딱히 문제가 생기지 않는다.

 

아래 3개의 프로젝트가 .lib 를 출력으로 뱉는 프로젝트들이다. 나는 이 3개만 우클릭해서 따로따로 빌드했다.

그 3개의 프로젝트

 

나는 vpx 다음 vp9rc 다음 gtest 순서로 빌드 했다. vpx 가 핵심이므로 저녀석을 먼저 빌드했다.

나머지 프로젝트들은 예제 코드 같아 보인다. 

 

혹시 모르는 사람이 있을 수 있으므로 한가지 더 설명하는데, VS2019 버전으로 넘어 오면서 스펙터 완화 빌드 옵션이 생겼다. spectre-migrate 뭐시기 빌드오류가 보이는 듯 하다면 

이 녀석을 사용 안함으로 적용 시켜 다시 빌드 해보자.

 

 

 

 

 

 

 

 

 

 

 

 

 

뭐? 안된다고 ?? 

libvpx-custom.zip
6.02MB

그럼 내가 작업한거 빌드 해보자.