오늘 포스팅할 내용을 제목처럼 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 미디어 서버이면서 자체적으로 제공하는 플러그인이 몇 가지 있고 이를 쉽게 사용할 수 있는 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 서버를 동작하게 하기 위함이다.
아래 게시글을 참고하여 설치하도록 하자.
< 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 환경에서 데모웹파일을 수정하여 웹브라우저로 바로 띄우는 것이다.
두 번째 방법이 간편하니 두 번째 방법으로 테스트를 해보려고 한다.
혹시 모르니 데모 웹 파일을 아래에 첨부하였다.
오디오나 비디오 테스트는 여건히 충분하지 않아(=웹캠이 없으므로) 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 : 화상대화방
- 끝 -
'기술 > 기타' 카테고리의 다른 글
라즈베리파이 OS에서 무선랜 지역을 변경하는 방법 (Wi-Fi/무선 인터넷/와이파이)가 검색되지 않는 경우) (1258) | 2021.07.12 |
---|---|
라즈베리파이 OS에 한글 폰트 설치 (글자가 사각형/네모/ㅁ로 나올 때) (1256) | 2021.07.12 |
라즈베리파이에 OS(Raspberry Pi OS) 설치하기 (1142) | 2021.07.10 |
CentOS 7에 libmicrohttpd 설치하기 (1113) | 2021.01.17 |
깃허브 페이지(GitHub Pages) 만들기 (5429) | 2020.10.02 |
댓글