背景
最近在做流媒體相關的一些東西, 比較了一些開源的流媒體服務, 目前 srs
和 ZlmediaKit
專案是評價比較高的, 今天主要在 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