直播----Mac+Nginx+nginx-rtmp-module-1.2.1服务器搭建

kotlin vs java

下载nginx和nginx-rtmp-module

wget http://nginx.org/download/nginx-1.19.4.tar.gz
git clone https://github.91chifun.workers.dev//https://github.com/arut/nginx-rtmp-module.git (快速通道下载)

生成makefile编译文件

tar -zxvf nginx-1.19.4.tar.gz (解压)
cd nginx-1.19.4
./configure --prefix=/data/server/nginx --with-http_ssl_module --add-module=../nginx-rtmp-module

到这一步的时候碰到如下错误:(注意如果确实pcre,zlib的话,使用homebrew安装就可以了,安装后的目录系统会自动搜索到)

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没有安装到系统会自动搜索的那几个目录。我的mac上就不是。按照提示加上路径即可(注意/usr/local/Cellar/openssl@1.1/1.1.1h是你自己mac电脑上openssl的路径,如果没有安装OpenSSL,则先安装OpenSSL:):

 brew install openssl
./configure --prefix=/Users/wangqi/ndk/nginx/nginx-1.19.4/bin --add-module=../nginx-rtmp-module-1.2.1/ --with-openssl=/usr/local/Cellar/openssl@1.1/1.1.1h

如果添加路径后编译成功:

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

  nginx path prefix: "/Users/wangqi/ndk/nginx"
  nginx binary file: "/Users/wangqi/ndk/nginx/sbin/nginx"
  nginx modules path: "/Users/wangqi/ndk/nginx/modules"
  nginx configuration prefix: "/Users/wangqi/ndk/nginx/conf"
  nginx configuration file: "/Users/wangqi/ndk/nginx/conf/nginx.conf"
  nginx pid file: "/Users/wangqi/ndk/nginx/logs/nginx.pid"
  nginx error log file: "/Users/wangqi/ndk/nginx/logs/error.log"
  nginx http access log file: "/Users/wangqi/ndk/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 install

可能出现如下错误:

 /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

则需要修改当前目录下auto/lib/openssl/conf文件,执行vim auto/lib/openssl/conf打开文件,替换以下代码:

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

替换成(其实就是去掉了一层路径):

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

注意:修改完之后需要重新执行一遍 configure,否则修改不生效,如下:

./configure --prefix=/Users/wangqi/ndk/nginx/nginx-1.19.4/bin --add-module=../nginx-rtmp-module-1.2.1/ --with-openssl=/usr/local/Cellar/openssl@1.1/1.1.1h
make && make install

上面重新执行代码也可以直接执行:nginx -s reload

执行完成后就会在当前目录下生成一个bin文件夹,里面包含了我们编译成功生成的文件,如下四个文件夹:

conf  logs  html  sbin
配置nginx.conf文件:
#进入目录
cd bin/conf/
#打开文件
vim nginx.conf
  
  #user  nobody;
  worker_processes  1;
  
  #error_log  logs/error.log;
  #error_log  logs/error.log  notice;
  #error_log  logs/error.log  info;
  
  #pid        logs/nginx.pid;
 
 
 events {
     #最多支持高并发的数量,最多1024个人观看,可以调整
     worker_connections  1024;
 }
   #rtmp协议
 rtmp {
     server {
          #默认端口
         listen 1935;
          #直播应用名称(自定义)
         application myapp{
             live on;  #代表打开直播
             drop_idle_publisher 5s;#丢弃空闲的发布者,如果连接服务器超过5s则丢弃掉。(因为并发数量很宝贵)
         }
     }
 }
 #代表支持http协议
 http {
     server {
         listen      8081;#服务监听端口
           #以下是分发路径,比如你本地访问http://localhost:8081/stat,则指向下面路径
         location /stat { 
             rtmp_stat all;
             rtmp_stat_stylesheet stat.xsl;
         }
            #http://localhost:8081/stat.xsl
         location /stat.xsl {
             root /Users/wangqi/ndk/nginx/nginx-rtmp-module-1.2.1/;
         }
            #http://localhost:8081/control
         location /control {
             rtmp_control all;
         }
           #http://localhost:8081/rtmp-publisher
         location /rtmp-publisher {
             root /Users/wangqi/ndk/nginx/nginx-rtmp-module-1.2.1/test;
         }
           #http://localhost:8081/
         location / {
             root /Users/wangqi/ndk/nginx/nginx-rtmp-module-1.2.1/test/www;
         }
     }
 }

保存文件,回到nginx-1.19.4目录下,执行.bin/sbin/nginx,其实就是执行我们bin->sbin目录下的nginx文件。
可能报错提示端口被占用(1935和8081端口)

#运行以下,查看占用这两个的进程
sudo lsof -i:1935
sudo lsof -i:8081

#查看占用进程
kylin0628-Mac:~ wangqi$ sudo lsof -i:1935
Password:
COMMAND   PID   USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
nginx   35299 wangqi    6u  IPv4 0x2d203dd3a5956239      0t0  TCP *:macromedia-fcs (LISTEN)
nginx   35300 wangqi    6u  IPv4 0x2d203dd3a5956239      0t0  TCP *:macromedia-fcs (LISTEN)
kylin0628-Mac:~ wangqi$ sudo lsof -i:8081
COMMAND   PID   USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
nginx   35299 wangqi    7u  IPv4 0x2d203dd3afdfc759      0t0  TCP *:sunproxyadmin (LISTEN)
nginx   35300 wangqi    7u  IPv4 0x2d203dd3afdfc759      0t0  TCP *:sunproxyadmin (LISTEN)

#杀掉占用进程,重新执行nginx(如果执行没有任何返回则执行成功)
kill -9 35299
kill -9 35300
.bin/sbin/nginx
成功截图

1. 使用第三方软件拉流测试。VLC

1.1: 下载成功安装


安装成功配置拉流地址展示
添加成功,右键点击播放

推流测试:

ffmpeg -re -i 你的视频文件的绝对路径(如/Users/wangqi/ndk/nginx/video.mp4) -vcodec copy -f flv rtmp://localhost:1935/myapp/room(1935是我们上面rtmp的默认进程号,myapp就是我们上面自定义的application名字,room代表房间可随便写,注意这是本地一个rtmp协议)
// 如:ffmpeg -re -i /Users/wangqi/ndk/nginx/video.mp4 -vcodec copy -f flv rtmp://localhost:1935/myapp/room

推流过程

最终效果图,可以看到上面有我们拉流的地址
拉流准备播放完成,在推流过程中就会弹出推流的视频。顺序是先准备拉流,再推。以上是把本地的视频文件推流到服务器然后利用VLC进行播放;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342