Ubuntu18.04編譯ZLMediakit支援webrtc

alps2006發表於2023-02-18

背景

最近在做流媒體相關的一些東西, 比較了一些開源的流媒體服務, 目前 srsZlmediaKit 專案是評價比較高的, 今天主要在 Ubuntu18.04 上編譯 ZlmediaKit, 並支援 webrtc 協議.

準備

原始碼準備

下載 zlmediakit 原始碼及其依賴元件原始碼.


git clone --depth 1 https://github.com/ZLMediaKit/ZLMediaKit.git

# 下載依賴元件原始碼
git submodule update --init

安裝或編譯依賴

查詢是否已經安裝 openssl 1.1.1 及以上版本, 一般 ubuntu18.04 應該已經有了.

# 檢視 openssl 的版本
openssl version -a

下載 libsrtp 原始碼, 用於編譯 webrtc 時所依賴.

wget 'https://codeload.github.com/cisco/libsrtp/tar.gz/refs/tags/v2.3.0'
tar -xvzf libsrtp-2.3.0.tar.gz
cd libsrtp-2.3.0
./configure --enable-openssl
make -j8
sudo make install

使用 apt-get 安裝其它相關依賴.

sudo apt-get install libssl-dev
sudo apt-get install libsdl-dev
sudo apt-get install libavcodec-dev
sudo apt-get install libavutil-dev
sudo apt-get install ffmpeg

編譯


cd ./ZLMediaKit
mkdir build
cd build
cmake .. -DENABLE_WEBRTC=true
cmake --build . --target MediaServer

編譯路徑在專案 release 目錄.

[master][~/Downloads/zlmediakit-checkout/ZLMediaKit/release/linux/Debug]$ pwd

# output
/Users/guoxiangxun/Downloads/zlmediakit-checkout/ZLMediaKit/release/linux/Debug

執行

進入到編譯結果目錄, 直接使用 sh./ 執行. 如果需要後臺執行, 可以加上 -d 引數.

./MediaServer -d &

但按以上命令執行, 還會時不時在終端上列印日誌, 我最終最佳化了下, 寫了兩個指令碼用於啟動和停止.

啟動指令碼 start_mediakit.sh


#!/usr/bin/env bash

# 把輸出丟棄
./MediaServer -d > /dev/null 2>&1 &


停止指令碼 kill_mediakit.sh


#!/usr/bin/env bash

# kill 掉所有程式 (可能有 fork 程式)
ps -eaf | grep MediaServer | tr -s " " | cut -d " " -f2 | xargs kill

執行成功後, 使用 chrome 瀏覽器訪問: http://192.168.1.113:8080/webrtc/ 進行測試.

FAQ

  • 啟動 MediaServer 時提示埠建立失敗, 沒有許可權.

    需要使用 root 使用者或者 sudo 執行.

  • 如果透過 nginx 反向代理訪問 mediakit, 開啟 hook 無效.

    有可能需要在 config.ini 配置forwarded_ip_header 引數為伺服器 ip.

    #可以把http代理前真實客戶端ip放在http頭中:https://github.com/ZLMediaKit/ZLMediaKit/issues/1388
    #切勿暴露此key,否則可能導致偽造客戶端ip
    forwarded_ip_header=xxx.xxx.xxx.xxx
    
    

相關文章