nginx RTMP服务器的搭建
发布日期:2021-07-22 21:24:35 浏览次数:2 分类:技术文章

本文共 3974 字,大约阅读时间需要 13 分钟。

一、下载

1、Nginx:

2、OpenSSL:

3、rtmp:

 

 tips: 找到release界面,右击最新版本,复制连接地址,然后在linux命令行中用wget下载:

#wget https://github.com/nginx/nginx/archive/release-1.19.0.tar.gz//#wget https://github.com/openssl/openssl/archive/openssl-3.0.0-alpha4.tar.gz#wget https://github.com/openssl/openssl/archive/OpenSSL_1_1_1g.tar.gz#wget https://github.com/arut/nginx-rtmp-module/archive/v1.2.1.tar.gz

当前openssl的最新版本是3.0.0.alpha4, 但实测发现后面配置时报错,因此改用了1.1.1g。

 

二、安装依赖工具(PCRE、ZLIB)

pcre用于重写rewrite,zlib用于gzip压缩。

1. pcre

(注意nginx不支持pcre2,所以当你找到pcre2版本时请忽略)

#wget https://netix.dl.sourceforge.net/project/pcre/pcre/8.40/pcre-8.40.tar.gz#tar zxvf pcre-8.40.tar.gz#cd pcre-8.40#./configure#make#make install

 安装成功的正确提示:

常见问题:

./configure时如果报错:

error: Invalid C++ compiler or C++ compiler flags

解决办法:

sudo apt-get install build-essential

2. zlib

  zlib适用于数据压缩的函数式库,是一个免费的、通用的、法律上不受阻碍(即没有被任何专利覆盖)的无损数据压缩库。几乎适用于任何计算器硬件和操作系统。

#wget http://www.zlib.net/zlib-1.2.11.tar.gz#tar zxvf zlib-1.2.11.tar.gz#cd zlib-1.2.11#./configure#make#make install

三、编译Nginx

1. 编译OpenSSL

./config --prefix=`pwd`/libsmakemake install

 

 常见问题:试过openssl-3.0.0,配置时会报错

2. 编译Nginx

先准备好rtmp和openssl的路径,方便后面拷贝:

 配置编译安装:

./auto/configure --add-module=
<路径1>
--with-openssl=
<路径2>
makemake install

 

Nginx生成目录:/usr/local/nginx

四、配置Nginx

1. 配置环境变量

在/etc/profile中加入

export PATH=$PATH:/usr/local/nginx/sbin

2.配置nginx-rtmp服务

用:nginx-rtmp-module-1.2.1/test/nginx.conf

替换

/usr/local/nginx/conf/nginx.conf

 看下nginx.conf里面配置什么:

worker_processes  1;error_log  logs/error.log debug;events {    worker_connections  1024;  #最大连接数}rtmp {    server {        listen 1935;  #监听端口        application myapp {            live on;            #record keyframes;            #record_path /tmp;            #record_max_size 128K;            #record_interval 30s;            #record_suffix .this.is.flv;            #on_publish http://localhost:8080/publish;            #on_play http://localhost:8080/play;            #on_record_done http://localhost:8080/record_done;        }    }}http {    server {        listen      8080;        location /stat {            rtmp_stat all;            rtmp_stat_stylesheet stat.xsl;        }        location /stat.xsl {            root /path/to/nginx-rtmp-module/;        }        location /control {            rtmp_control all;        }        #location /publish {        #    return 201;        #}        #location /play {        #    return 202;        #}        #location /record_done {        #    return 203;        #}        location /rtmp-publisher {            root /path/to/nginx-rtmp-module/test;        }        location / {        location / {            root /path/to/nginx-rtmp-module/test/www;        }    }}
  • 最大连接数:1024
  • rtmp服务端口:1935
  • http服务端口:8080
  • rtmp的应用名称:myapp

 

五、启动停止Nginx

1、启动:

#su#cd /usr/local/nginx/sbin#./nginx

2、停止:

#./nginx -s stop

六、测试推流

1. 用ifconfig查看rtmp服务器的ip地址

2. 准备一个视频

(这是h264编码的《小妇人》预告片)

3. 用ffmpeg推流:

ffmpeg -re -i xfr.mp4 -vcodec libx264 -acodec aac -f flv rtmp://192.168.4.222/myapp/mystream

4. 用VLC播放:

rtmp://192.168.4.222/myapp/mystream

终于看到我们推送的视频流了!

七、关于播放器及时延

1. 播放器的选择

   

实测发现,用VLC播放的时延非常大——数秒到数十秒!由于VLC开源,因此市面上的很多播放器都是基于VLC的。这种时延做点播还行,但直播是达不到要求的。

   后来我找到一个极好播放器:SmartPlayer,时延只有200多毫秒!有图有真相:

LVC并非一无是处,初期LVC功能很强大,是一个完整的播放器,面向普通用户。SmartPlayer更像一个半成品,面向开发者,SmartPlayer用于商业用途是需要授权的。

2. 延时的产生

  1. 推流延时(网络因素)
  2. 服务器的缓冲(Nginx服务器中的配置)
  3. 拉流延时(网络因素+播放器的缓冲)

3. 码率的计算

  我们常常说的720P/1080P实际对应的屏幕是1280x720和1920x1080, 即屏幕上水平方向有1280个像素垂直方向有720个像素(以720p为例)。而每个像素占4个字节:分别表示R(Red)、G(Green)、B(Blue)、A(Alpha),其中Alpha表示透明度。当然这里说占4个字节的前提是图像的格式是RGBA888。

  一帧图像的数据量是:1280*720*4=3686400(字节),如果视频流的fps(每秒的帧数)是30,那么一秒钟的数据量是:1280*720*4*30=110592000(字节),大约11MB。这个计算的前提是完全没有经过压缩的,11MB*8=88Mbps,直接观看这样的视频需要大约100兆的带宽!

  而实际的视频流都会压缩,主流格式是H264/H265。经过压缩后的数据量大大减少,而压缩后的数据量跟画面的变化有关系——画面变化越大数据量越大。以我手机1080P屏幕的实测为例:显示桌面并保持不动时,其上行数据只有3Kbps,当我快速翻页时大约500Kbps,峰值1.4Mbps。当然这只是一个直观而粗糙的认识,即使我快速翻页,其画面变化相对于机器来说还是很慢的。

通常来讲10Mbps的带宽串流720P的视频应该足够的,30M的带宽串流1080P的带宽是足够的。

码率还跟关键帧(不帧)的密度有关,我以上的测试是每3秒一个关键帧。

八、附录

ffmpeg下载:

VLC下载:

SmartPlayer下载:

我最近下载的SmpartPlayer版本连接:

 

转载地址:https://blog.csdn.net/menghaocheng/article/details/107098339 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:学习笔记(1):Android WebRTC 实现1V1实时音视频通信-node.js信令服务器开发
下一篇:【软件基础】UML活动图

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月12日 02时28分18秒