본문 바로가기
기술/기타

CentOS 7에 Janus-gateway(WebRTC media server) 설치하기

by 포도빛 2020. 11. 15.

오늘 포스팅할 내용을 제목처럼 CentOS 7에 Janus-gateway(이하 Janus)를 설치하고 실행해볼 것이다.

* 설치 명령어와 아주 작은 설명만 다룬다.

* Janus의 transport는 RestAPI 방식으로 설치할 것이다. (다른 블로그에서는 WebSocket 방식의 가이드가 많다.)

 

 

실제 환경은 윈도우 10 WSL 기반의 CentOS 7(v7.0.1907.3)이다.

순수 CentOS 7 머신에서도, Docker와 Virtual Machine(VMWare, VirtualBox)에서도 설치가 가능한 것을 확인하였다.

 

 

Janus 공식 홈페이지는 아래와 같다.

 

Janus WebRTC Server: About Janus

Janus is a WebRTC Server developed by Meetecho conceived to be a general purpose one. As such, it doesn't provide any functionality per se other than implementing the means to set up a WebRTC media communication with a browser, exchanging JSON messages wit

janus.conf.meetecho.com

 

Janus는 WebRTC 미디어 서버이면서 자체적으로 제공하는 플러그인이 몇 가지 있고 이를 쉽게 사용할 수 있는 Wrapper 라이브러리를 제공해준다고 한다.

만약에 제공되는 플러그인보다 더 많은 기능을 사용하려면 플러그인을 직접 개발하고 붙여야한다.

 

 

이제 바로 설치에 돌입해보자!

 

 

< yum 업데이트 설치 >

Docker나 WSL환경에서는 업데이트 설치가 없다고 나오는데 정상이다.

$ yum install update

 

< epel-release 저장소 설치 >

$ yum install epel-release

 

< 유틸리티 설치 >

$ yum install \
  unzip \
  wget \
  curl
  
# Docker에서 which 명령어가 없으므로 설치
$ yum install which

 

< 개발툴 설치 >

$ yum install \
  git \
  gcc \
  gcc-c++ \
  libtool \
  autoconf \
  automake \
  make \
  cmake \
  python3 \
  python3-pip \
  gettext \
  gettext-autopoint \
  texinfo

 

< Janus의 의존성(디펜던시) 설치 >

doxygen과 graphviz는 Janus의 document(이하 doc)를 함께 빌드할때 사용된다. doc은 공식 홈페이지에서도 확인할 수 있으니 생략해도 된다.

그리고 doc을 빌드해도 doc이 빌드되지 않았다는 메시지가 나오는데 이 부분에 대해선 무슨 문제가 있는지 잘 모르겠다.

$ yum install \
  jansson-devel \
  libconfig-devel \
  openssl-devel \
  sofia-sip-devel \
  opus-devel \
  libogg-devel \
  libcurl-devel \
  glib2-devel \
  zlib-devel \
  pkgconfig \
  gengetopt
  
# document를 활성화 할 경우 아래 패키지도 설치해야한다.
$ yum install \
  doxygen \
  graphviz

 

< libnice 설치 >

libnice 설치에 필요한 meson과 ninja를 설치해야한다.

정석대로 하려면 export 명령어를 통해 실행파일을 shell에 등록해줘야겠지만 간편하게하기 위해 /usr/bin에 단순 복사하는 것으로 했다.

# meson 설치
$ pip3 install meson
$ ln -s /usr/local/bin/meson /usr/bin/
# ninja 설치

# 경로를 home(root)로 이동하여 작업하기 위해 `cd ~`를 수행한다. 필요한 경우 위치를 바꿔도 좋다.
$ cd ~

$ wget https://github.com/ninja-build/ninja/releases/download/v1.10.1/ninja-linux.zip
$ unzip ninja-linux.zip
$ cp ninja /usr/bin/
# libnice 빌드 및 설치

# 이 부분도 ninja와 마찬가지로 필요한 경우 원하는 작업 디렉토리로 이동해도 된다.
$ cd ~

$ git clone https://gitlab.freedesktop.org/libnice/libnice.git
$ cd libnice
$ meson --prefix=/usr build
$ ninja -C build
$ ninja -C build install

 

< libsrtp2 설치 >

Janus를 사용하기 위해 libsrtp가 필수인데 패키지 매니저(yum 등)으로 libsrtp를 설치하면 Janus의 요구사항(libsrtp 1.5.x)에 미치지 못하는 버전이 설치된다. 만약에 패키지 매니저로 설치했다면 삭제하자

# 원하는 작업 디렉토리
$ cd ~

$ git clone https://github.com/cisco/libsrtp.git
$ cd libsrtp
$ git checkout v2.3.0
$ ./configure --prefix=/usr --libdir=/usr/lib64 --enable-openssl
$ make shared_library
$ make install

 

< usrsrtp 설치 >

Data channel에 사용된다.

# 원하는 작업 디렉토리
$ cd ~

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

 

< libmicrohttpd 설치 >

libmicrohttpd는 Janus의 RestAPI 서버를 동작하게 하기 위함이다.

아래 게시글을 참고하여 설치하도록 하자.

 

CentOS 7에 libmicrohttpd 설치하기

기존에 소스코드를 빌드하여 설치한 경우 반드시 제거해야한다. 제거 방법은 아래 명령어를 사용하도록 한다. 만약 소스코드 디렉토리를 삭제한 경우에는 다시 다운로드 받아 저장한 다음, 설

phodobit.kr

 

 

< Janus 설치 >

# 원하는 작업 디렉토리
cd ~

$ git clone https://github.com/meetecho/janus-gateway.git
$ cd janus-gateway

# git checkout을 통해 원하는 커밋으로 버전 변경. (필요한 경우에만 입력)
$ git checkout v0.10.7

$ sh autogen.sh

# doc을 설치할 경우 마지막줄에 --enable-docs를 추가. (이전에 doxygen과 graphviz 설치 우선 필요)
# 두번째 줄의 prefix는 janus가 설치될 위치를 지정. /opt는 리눅스에서 기타 응용프로그램이 설치되는 위치로 적합
$ ./configure \
  --prefix=/opt/janus \
  --disable-websockets \
  --disable-rabbitmq \
  --disable-mqtt \
  --enable-data-channels \
  --enable-rest
  
$ make
$ make install
$ make configs

 

여기까지 했다면 Janus가 정상적으로 설치되었을 것이다.

 

이제 간단하게 Janus 환경 설정을 하고 서버를 시작해보자.

 

 

< Janus 환경 설정 >

Janus 환경 설정 파일은 [Janus설치경로/etc/janus]에 위치한다. 이 위치에 존재하는 파일 중 필요한 것들을 수정해준다.

필자는 아래 내용만 수정하였다.

# Janus 환경 설정 파일이 존재하는 디렉토리로 이동
$ cd /opt/janus/etc/janus

# Janus 기본 설정 파일 편집
$ vi janus.jcfg

admin_secret : 관리자용 API 패스워드
stun_server : stun server host 변경 (stun.l.google.com)
stun_port : stun server port 변경 (19302)

# Janus RestAPI 설정 파일 편집
$ vi janus.transport.http.jcfg

admin_http : 관리 API 사용여부 변경 (true)

 

< Janus 서버 시작 >

$ /opt/janus/bin/janus

아래는 서버 시작 이후 출력되는 메시지.
============================================================
Janus commit: 04229be3eeceb28dbc57a70a57928aab223895a5
Compiled on:  Sun Nov 15 14:16:13 KST 2020

Logger plugins folder: /opt/janus/lib/janus/loggers
[WARN]  Couldn't access logger plugins folder...
---------------------------------------------------
  Starting Meetecho Janus (WebRTC Server) v0.10.7
---------------------------------------------------

Checking command line arguments...
Debug/log level is 4
Debug/log timestamps are disabled
Debug/log colors are enabled
Adding 'vmnet' to the ICE ignore list...
Using 192.168.0.102 as local IP...
[WARN] Token based authentication disabled
Initializing recorder code
Initializing ICE stuff (Full mode, ICE-TCP candidates disabled, half-trickle, IPv6 support disabled)
STUN server to use: stun.l.google.com:19302
  >> 172.217.211.127:19302 (IPv4)
Testing STUN server: message is of 20 bytes
  >> Our public address is [[자신의 공인 IP]]
TURN REST API backend: (disabled)
Crypto: OpenSSL pre-1.1.0
[WARN] The libsrtp installation does not support AES-GCM profiles
[WARN] No cert/key specified, autogenerating some...
Fingerprint of our certificate: F1:D6:~:8C:14
[WARN] Event handlers support disabled
Plugins folder: /opt/janus/lib/janus/plugins
Joining Janus requests handler thread
Sessions watchdog started
Loading plugin 'libjanus_audiobridge.so'...
JANUS AudioBridge plugin initialized!
Loading plugin 'libjanus_echotest.so'...
JANUS EchoTest plugin initialized!
Loading plugin 'libjanus_nosip.so'...
JANUS NoSIP plugin initialized!
Loading plugin 'libjanus_recordplay.so'...
JANUS Record&Play plugin initialized!
Loading plugin 'libjanus_streaming.so'...
JANUS Streaming plugin initialized!
Loading plugin 'libjanus_textroom.so'...
JANUS TextRoom plugin initialized!
Loading plugin 'libjanus_videocall.so'...
JANUS VideoCall plugin initialized!
Loading plugin 'libjanus_videoroom.so'...
JANUS VideoRoom plugin initialized!
Loading plugin 'libjanus_voicemail.so'...
JANUS VoiceMail plugin initialized!
Transport plugins folder: /opt/janus/lib/janus/transports
Loading transport plugin 'libjanus_http.so'...
HTTP transport timer started
HTTP webserver started (port 8088, /janus path listener)...
[WARN] HTTPS webserver disabled
Admin/monitor HTTP webserver started (port 7088, /admin path listener)...
[WARN] Admin/monitor HTTPS webserver disabled
JANUS REST (HTTP/HTTPS) transport plugin initialized!
Loading transport plugin 'libjanus_pfunix.so'...
[WARN] Unix Sockets server disabled (Janus API)
[WARN] Unix Sockets server disabled (Admin API)
[WARN] No Unix Sockets server started, giving up...
[WARN] The 'janus.transport.pfunix' plugin could not be initialized
============================================================

 

이렇게 Janus 서버가 실행되었음을 알 수 있다.

 

중간중간 나타나는 기록에서 본인이 설정한 내용이 올바르게 구성되었는지 확인해보아야 한다.

필자는 STUN 서버, REST(admin)을 활성화하였는데 잘 활성화된 것을 확인 할 수 있었다.

 

 

< 테스트 >

테스트 방법은 웹 기반의 Demo(데모)를 띄워보야아한다.

 

[Janus설치경로/share/janus/demos]에 데모 웹 파일이 존재한다.

 

(1) 웹서버를 설치하고 데모웹파일을 복사하여 웹서버로 접근하거나,

(2) GUI 환경에서 데모웹파일을 수정하여 웹브라우저로 바로 띄우는 것이다.

 

두 번째 방법이 간편하니 두 번째 방법으로 테스트를 해보려고 한다.

 

혹시 모르니 데모 웹 파일을 아래에 첨부하였다.

demos.zip
0.80MB

 

오디오나 비디오 테스트는 여건히 충분하지 않아(=웹캠이 없으므로) Text Room(채팅방)으로만 테스트를 해볼 것이다.

 

데모 파일중 [textroomtest.js] 파일을 열고 아래와 같이 수정한다.

/////////// 원본 textroomtest.js:45번줄
var server = null;
if(window.location.protocol === 'http:')
	server = "http://" + window.location.hostname + ":8088/janus";
else
	server = "https://" + window.location.hostname + ":8089/janus";

var janus = null;
var textroom = null;
var opaqueId = "textroomtest-"+Janus.randomString(12);

/////////// 수정후
var server = "http://janus서버ip:8088/janus";
// 예시 : "http://192.168.0.10:8088/janus"

var janus = null;
var textroom = null;
var opaqueId = "textroomtest-"+Janus.randomString(12);

 

 

 

저장한 다음, [textroomtest.html] 파일을 웹브라우저로 연다.

* header와 footer가 나타나지 않는 것은 local 파일을 직접 열었기 때문에 CORS 정책이 위반되어 그런 것으로 정상이다. 웹브라우저의 개발자 도구로 확인이 가능하다.

 

그 후 나타나는 화면에서 [Start] 버튼을 누르면 Janus 서버로 즉시 연결이 되고 Display name(닉네임) 설정 화면이 나타나면 서버 연결이 정상이라는 의미이다.

* 이때 Janus 서버의 콘솔 메시지를 보면 세션이 연결되었다는 메시지가 나타난다.

 

닉네임을 설정한 이후에 테스트 메시지를 보내고, 데모를 하나 더 열어 접속하여 서로 대화가 주고받아지는지 확인해보자.

 

만약에 자신이 웹캠이 있거나, OBS+VirtualCam 소프트웨어의 사용이 가능하다면 다른 데모도 테스트를 해보자.

 

Echo Test : 자신의 미디어를 자신에게 전송하고 수신.

Video Room : 화상대화방

 

 

 

- 끝 -

댓글