MAC 上編譯安裝nginx-rtmp-module 流媒體伺服器

HarlanC發表於2020-09-05

MAC 上編譯安裝nginx-rtmp-module 流媒體伺服器

記錄踩坑過程

下載nginx和nginx-rtmp-module

wget http://nginx.org/download/nginx-1.15.3.tar.gz
git clone https://github.com/arut/nginx-rtmp-module

生成makefile

tar -zxvf nginx-1.15.3.tar.gz
cd nginx-1.15.3
./configure --prefix=/data/server/nginx --with-http_ssl_module --add-module=../nginx-rtmp-module

到這一步的時候碰到如下錯誤:

checking for OpenSSL library ... not found
checking for OpenSSL library in /usr/local/ ... not found 
checking for OpenSSL library in /usr/pkg/ ... not found
checking for OpenSSL library in /opt/local/ ... not found

./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.

執行一下openssl,看是否openssl已經安裝。

openssl

如果沒有安裝,執行下面的命令進行安裝:

 brew install openssl

有可能最後openssl沒有安裝到系統會自動搜尋的那幾個目錄。我的mac上就不是。按照提示加上路徑即可:

./configure --prefix=/Users/username/nginx --with-http_ssl_module --add-module=../nginx-rtmp-module --with-openssl=/usr/local/opt/openssl@1.1

成功後出現如下提示:

Configuration summary
  + using system PCRE library
  + using OpenSSL library: /usr/local/opt/openssl@1.1
  + using system zlib library

  nginx path prefix: "/Users/chenhailiang/nginx"
  nginx binary file: "/Users/chenhailiang/nginx/sbin/nginx"
  nginx modules path: "/Users/chenhailiang/nginx/modules"
  nginx configuration prefix: "/Users/chenhailiang/nginx/conf"
  nginx configuration file: "/Users/chenhailiang/nginx/conf/nginx.conf"
  nginx pid file: "/Users/chenhailiang/nginx/logs/nginx.pid"
  nginx error log file: "/Users/chenhailiang/nginx/logs/error.log"
  nginx http access log file: "/Users/chenhailiang/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp

make

執行make生成二進位制檔案:

 make

報如下錯誤:

 /Library/Developer/CommandLineTools/usr/bin/make -f objs/Makefile
cd /usr/local/opt/openssl@1.1 \
&& if [ -f Makefile ]; then /Library/Developer/CommandLineTools/usr/bin/make clean; fi \
&& ./config --prefix=/usr/local/opt/openssl@1.1/.openssl no-shared no-threads  \
&& /Library/Developer/CommandLineTools/usr/bin/make \
&& /Library/Developer/CommandLineTools/usr/bin/make install_sw LIBDIR=lib
/bin/sh: ./config: No such file or directory
make[1]: *** [/usr/local/opt/openssl@1.1/.openssl/include/openssl/ssl.h] Error 127
make: *** [build] Error 2

執行如下的命令,修改一個檔案

vim auto/lib/openssl/conf

把下面的幾行中的.openssl去掉,然後儲存

39             CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"
40             CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
41             CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
42             CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"

改成

39             CORE_INCS="$CORE_INCS $OPENSSL/include"
40             CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"
41             CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libssl.a"
42             CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libcrypto.a"

注意:修改完之後需要重新執行一遍 configure,否則修改不生效。

再次make成功

make install

執行make install 安裝nginx和nginx-rtmp-module到指定目錄:

make install

修改配置檔案

修改安裝目錄下面的conf/nginx.conf檔案,新增rtmp配置:

rtmp {
    server {
        listen 1935;

        application mytv {
            live on;
        }
    }
}

啟動服務

./sbin/nginx -c ./conf/nginx.conf

使用ffmpeg推流

ffmpeg -re -i /Users/username/test_sps_1.mp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost:1935/mytv/home

ffplay 播放

ffplay -i. rtmp://localhost:1935/mytv/home

參考

https://blog.51cto.com/983836259/1835809

http://www.appblog.cn/2018/08/28/nginx-rtmp流媒體伺服器搭建/

相關文章