Cài đặt MonaServer làm video streaming server lên Debian Linux

MonaServer là một media server rất nhẹ, hỗ trợ nhiều giao thức streaming và media container chỉ trong một ứng dụng và có thể tùy chỉnh bằng LUA script.

Cài đặt MonaServer làm video streaming server lên Debian Linux
Cài đặt MonaServer làm Video Streaming server

Tôi thường dùng MonaServer để phân phối luồng video từ nguồn như OBS Studio, FFmpeg hoặc stream từ Camera điện thoại ( bằng Larix Broadcaster ) đến nhiều thiết bị khác trong mạng thông qua giao thức RTMP.

MonaServer hỗ trợ các giao thức:

  • HTTP(TLS) cần kết hợp với một rendez-vous extension (tham số RDV) như SDP exchange for WebRTC để liên kết các đối tác (peer) với nhau.
  • WebSocket(TLS)
  • STUN
  • RTMP(E)
  • RTMFP
  • SRT (cần cài đặt thư viện SRT protocol)
  • RTP, RTSP

MonaServer hỗ trợ các tính năng nâng cao cho các media container sau:

  • MP4
  • FLV, F4V
  • TS
  • HLS
  • ADTS, AAC, MP3
  • SubRip, VTT
  • Mona

MonaServer sau khi build có 2 phiên bản là MonaServerMonaTiny, trong đó MonaTiny không hỗ trợ tùy chỉnh bằng LUA vì vậy cũng nhẹ nhàng hơn. Tôi hầu như chỉ dùng MonaTiny vì cũng không có nhu cầu tùy biến đặc biệt.

Chuẩn bị build MonaServer2

Sau đây tôi hướng dẫn các bạn cài đặt MonaServer2. Do phần mềm khá ‘portable’, tôi sẽ thử cài đặt vào một thư mục bất kỳ (ví dụ ~/.local chẳng hạn).

Trước hết tôi lưu thông tin về thư mục cài đặt vào một biến môi trường, ví dụ tên là MONA_PREFIX.

export MONA_PREFIX=~./local

Cài đặt các dependencies để build MonaServer như sau:

sudo apt install build-essentials cmake libssl-dev

Trước khi build MonaServer, ta sẽ build các extension chưa có sẵn trong HĐH là LuaJITSRT protocol.

Shellscript tổng hợp quá trình build MonaServer2

Dưới đây là shell script tổng hợp để build toàn bộ MonaServer2

#!/bin/bash
MONA_PREFIX=~/.local

SRC_DIR=${MONA_PREFIX}/src/
BIN_DIR=${MONA_PREFIX}/bin/

mkdir -p ${SRC_DIR} ${BIN_DIR}

# Checkout the source code from GitHub
getsrc() {
    local src=$(basename ${1} .git)
    cd ${SRC_DIR}
    if [ -d ${src}/.git ]; then
        cd ${src}
        # Clean the repository
        git reset; git clean -fdx 
        git fetch; git checkout .
    else
        git clone ${1}
        cd ${src}
    fi
}

# Build optimization
export CONCURRENCY_LEVEL=$(/bin/grep -c processor /proc/cpuinfo)
export MAKEFLAGS="-j${CONCURRENCY_LEVEL}"

# Build and install LuaJIT
getsrc https://github.com/LuaJIT/LuaJIT.git
make PREFIX=${MONA_PREFIX}
make install PREFIX=${MONA_PREFIX}

# Build and install SRT protocol support
getsrc https://github.com/Haivision/srt
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX:PATH=${MONA_PREFIX} ..
cmake --build .
make install

# Build and install MonaServer2 (MonaServer & MonaTiny)
getsrc https://github.com/MonaSolutions/MonaServer2.git
make ENABLE_SRT=1 INCLUDES=-I${MONA_PREFIX}/include/ LIBDIRS=-L${MONA_PREFIX}/lib/
cp MonaServer/{cert.pem,key.pem,MonaServer,MonaServer.ini} MonaTiny/MonaTiny ${BIN_DIR}
cp ${BIN_DIR}MonaServer.ini ${BIN_DIR}MonaTiny.ini

Sử dụng MonaServer

Trước hết ta nên thay đổi các cổng trong MonaServer.ini, tránh trường hợp xung đột cổng với các dịch vụ khác như Web Server chẳng hạn, cũng như nếu muốn chạy bằng non-root user, bạn cần để cổng lớn hơn 1024.

Như tôi đã chỉnh sửa các cổng sau:

HTTP - 8080
HTTPS - 8443
WS - 8080
WSS - 8443
RTMPS - 1936

Khởi chạy MonaServer từ dòng lệnh như sau:

$ MonaServer

Application.cpp[134] MonaServer v2.750
Application.cpp[136] Load configuration file MonaServer.ini
Protocols.h[82] RTMFP server started on 0.0.0.0:1935
Protocols.h[82] RTMP server started on 0.0.0.0:1935
Protocols.h[82] RTMPS server started on 0.0.0.0:1936
Protocols.h[82] HTTP server started on 0.0.0.0:8080
Protocols.h[82] WS server started on 0.0.0.0:8080
Protocols.h[82] HTTPS server started on 0.0.0.0:8443
Protocols.h[82] WSS server started on 0.0.0.0:8443
Protocols.h[82] SRT server started on 0.0.0.0:9710

Phản hồi về bài viết

Cùng thảo luận chút nhỉ!

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.