반응형

WebRTC로 개인 프로젝트를 진행할 때, SFU 서버로 동작하는 미디어 서버를 구축하기 위해 설치했던 과정입니다.

설치가 복잡했어서 기록해봤습니다.

 

https://github.com/meetecho/janus-gateway

 

GitHub - meetecho/janus-gateway: Janus WebRTC Server

Janus WebRTC Server. Contribute to meetecho/janus-gateway development by creating an account on GitHub.

github.com

진행한 과정은 위에 나오는 메뉴얼과 동일합니다.

 

 

~$ sudo apt-get update
~$ sudo apt-get install libmicrohttpd-dev libjansson-dev libssl-dev \
libsrtp-dev libsofia-sip-ua-dev libglib2.0-dev libopus-dev libogg-dev \
libcurl4-openssl-dev liblua5.3-dev libconfig-dev pkg-config gengetopt libtool automake

먼저 필요한 라이브러리들을 설치해줍니다.

 

이번엔 libnice를 설치해야합니다.

libnice를 빌드하려면, python3, meson, Ninja가 필요합니다.

우분투에는 기본적으로 python3가 깔려있으니, meson과 Ninja를 설치해주겠습니다.

apt로 설치하면 이전 버전으로 설치되어서 오류가 떴었습니다.

git에서 설치해보겠습니다.

~$ git clone https://github.com/ninja-build/ninja
~$ cd ninja/
~/ninja$ sudo python3 configure.py --bootstrap
~$ git clone https://github.com/mesonbuild/meson
~$ cd meson/
~/meson$ sudo python3 setup.py install
Traceback (most recent call last):
  File "setup.py", line 24, in <module>
    from setuptools import setup
ModuleNotFoundError: No module named 'setuptools'

위와 같은 오류가 떴습니다.

 

~/meson$ sudo apt-get install python3-pip

pip을 설치하고 다시 진행하였습니다.

이제 libnice를 설치해줍니다.

~$ git clone https://gitlab.freedesktop.org/libnice/libnice
~$ cd libnice/
~/libnice$ meson --prefix=/usr build && ninja -C build && sudo ninja -C build install
Build targets in project: 53
libnice 0.1.18.1
  Subprojects
    gstreamer: NO Neither a subproject directory nor a gstreamer.wrap file was found.
ERROR: Could not detect Ninja v1.8.2 or newer
A full log can be found at /home/gmlwo308/libnice/build/meson-logs/meson-log.txt

위와 같은 에러가 뜨네요.

~/ninja$ sudo cp ninja /usr/bin/
~/libnice$ meson --prefix=/usr build && ninja -C build && sudo ninja -C build install

실행파일을 복사하고 다시 진행합니다.

이제 libsrtp를 설치합니다.

~$ wget https://github.com/cisco/libsrtp/archive/v2.2.0.tar.gz
~$ tar xfv v2.2.0.tar.gz
~$ cd libsrtp-2.2.0
~/libsrtp-2.2.0$ ./configure --prefix=/usr --enable-openssl
~/libsrtp-2.2.0$ make shared_library && sudo make install

 

 

다음으로 openssl 대신 boringssl 이용하려면 이걸 설치하라는데 생략했습니다.

~$ git clone https://github.com/sctplab/usrsctp
~$ cd usrsctp
~/usrsctp$ ./bootstrap
~/usrsctp$ ./configure --prefix=/usr --disable-programs --disable-inet --disable-inet6
~/usrsctp$ make && sudo make install

이번엔 usrsctp를 설치합니다. sctp는 스트림 제어 전송 프로토콜이라고 하네요.

 

~$ git clone https://libwebsockets.org/repo/libwebsockets
~$ cd libwebsockets
~/libwebsockets$ mkdir build
~/libwebsockets$ cd build
~/libwebsockets/build$ cmake -DLWS_MAX_SMP=1 -DLWS_WITHOUT_EXTENSIONS=0 -DCMAKE_INSTALL_PREFIX:PATH=/
usr -DCMAKE_C_FLAGS="-fpic" ..

Command 'cmake' not found, but can be installed with:
snap install cmake  # version 3.19.4, or
apt  install cmake
See 'snap info cmake' for additional versions.

livewebsockets을 설치합니다.

cmake가 없다고 합니다. 설치하고 다시 진행해줍니다.

~/libwebsockets/build$ sudo apt-get install cmake

~/libwebsockets/build$ cmake -DLWS_MAX_SMP=1 -DLWS_WITHOUT_EXTENSIONS=0 -DCMAKE_INSTALL_PREFIX:PATH=/
usr -DCMAKE_C_FLAGS="-fpic" ..
~/libwebsockets/build$ make && sudo make install

진행되었습니다.

이어서 Paho MQTT C client library를 설치해줍니다. pub/sub 메시징 프로토콜이라고 합니다.

웹소켓의 대안으로 사용할 수 있다는데 일단 적혀있는 건 다 설치해보겠습니다.

(사실 필요한 것만 설치하면 되는 듯 합니다. 그냥 일단 다 설치해봤습니다.)

 

 

~$ git clone https://github.com/eclipse/paho.mqtt.c.git
~$ cd paho.mqtt.c
~/paho.mqtt.c$ make && sudo make install

설치되었습니다.

 

~$ sudo apt-get install libnanomsg-dev

nanomsg에 관심이 있으면 설치하라는데, 일단 이것도 dependencies 목록에 있으니 설치해봅니다.

~$ git clone https://github.com/alanxz/rabbitmq-c
~$ cd rabbitmq-c
~/rabbitmq-c$ git submodule init
~/rabbitmq-c$ git submodule update
~/rabbitmq-c$ mkdir build && cd build
~/rabbitmq-c/build$ cmake -DCMAKE_INSTALL_PREFIX=/usr ..
~/rabbitmq-c/build$ make && sudo make install

마지막으로 rabbitmq-c를 설치해줍니다. 이것도 웹소켓의 대안으로 사용될 수 있다고 합니다.

 

모든 dependency들의 설치가 끝났습니다.

~$ sudo apt-get install doxygen graphviz

janus 문서를 작성하려면 필요하다는데.. 일단 설치해봅니다.

이제 드디어 janus-gateway를 설치할 차례입니다.

~$ git clone https://github.com/meetecho/janus-gateway.git
~$ cd janus-gateway
~/janus-gateway$ sh autogen.sh
~/janus-gateway$ ./configure --prefix=/opt/janus
~/janus-gateway$ make
~/janus-gateway$ make install
...
/bin/mkdir -p /opt/janus/share/janus/demos
/bin/mkdir: cannot create directory ‘/opt/janus’: Permission denied
Makefile:481: recipe for target 'install-data-local' failed
make[3]: *** [install-data-local] Error 1
make[3]: Leaving directory '/home/gmlwo308/janus-gateway/html'
Makefile:369: recipe for target 'install-am' failed
make[2]: *** [install-am] Error 2
make[2]: Leaving directory '/home/gmlwo308/janus-gateway/html'
Makefile:3293: recipe for target 'install-recursive' failed
make[1]: *** [install-recursive] Error 1
make[1]: Leaving directory '/home/gmlwo308/janus-gateway'
Makefile:3590: recipe for target 'install' failed
make: *** [install] Error 2

cofigure 파일을 생성하고 컴파일합니다.

루트 디렉토리에 파일을 생성하나봅니다. Permission denied가 뜨길래 그냥 sudo를 붙여줬습니다.

~/janus-gateway$ sudo make install

진행되었습니다.

 

~/janus-gateway$ sudo make configs

janus 작동을 위해 사용할 기본 configure 파일을 설치합니다.

 

 

./configure --disable-websockets --disable-data-channels --disable-rabbitmq --disable-mqtt

위에 설치했던 라이브러리를 이런 식으로 활성화, 비활성화 할 수 있나봅니다.

 

 

~$ /opt/janus/bin/janus --help
...
Usage: janus [OPTIONS]...
  -h, --help                    Print help and exit
  -V, --version                 Print version and exit
  -b, --daemon                  Launch Janus in background as a daemon
                                  (default=off)
  -p, --pid-file=path           Open the specified PID file when starting Janus
                                  (default=none)
...

어떤 명령어들이 있는지 커맨드 라인을 확인해봤습니다.

 

~$ sudo /opt/janus/bin/janus

서버를 시작합니다.

 

* 2021년 2월에 진행된 내용이라 버전에 따른 차이가 있을 수 있습니다.

반응형

'WebRTC' 카테고리의 다른 글

janus-gateway 실행 중 webrtc 연결 안되는 현상  (0) 2021.11.10

+ Recent posts