nginx 添加 rtmp 模块

下载资源

nginx

首先下载 nginx,http://nginx.org/en/download.html
nginx 添加 rtmp 模块_第1张图片使用 tar -zvxf .tar.gz -C <解压到哪个目录> 解压文件

nginx-rtmp-module

nginx 添加 rtmp 模块_第2张图片使用 unzip .zip -d <解压到哪个目录> 解压文件

编译nginx

配置

前面,将 nginx 和 nginx-rtmp-module 解压到同一个目录下,然后进入 nginx 目录,执行配置命令 ./configure --prefix=./bin --add-module=../nginx-rtmp-module-master./configure --prefix=./bin 的意思是把软件安装在相对当前目录的 bin 目录下面,也可以配成 /usr/local/bin 将它安装在全局目录下

执行成功后,就会生成 objs 目录
nginx 添加 rtmp 模块_第3张图片

编译

然后执行 make 命令进行编译,生成的文件在 objs 目录里

nginx 添加 rtmp 模块_第4张图片

错误1:不正确的代码

nginx 添加 rtmp 模块_第5张图片查看代码可知,其实并没有什么大的错误。将switch改成if,依然不能解决该异常。

nginx 添加 rtmp 模块_第6张图片
原因是,gcc在默认编译时比较严格,警告也会被当作异常抛出。将 make 命令改为 make CFLAGS='-Wno-implicit-fallthrough' ,就会避免 warn 类型的错误被当作异常抛出了。

错误2:未安装相应依赖

nginx 编译安装的话,需要依赖某些包,否则会安装失败

  • openssl sudo apt-get install openssl libssl-dev
  • pcre sudo apt-get install libpcre3 libpcre3-dev
  • zlib sudo apt-get install zlib1g-dev

首先使用dpkg命令查看自己需要的软件是否安装,例如查看zlib是否安装:dpkg -l | grep zlib

安装

执行 make install 后,nginx 的可执行文件就被放到 bin 目录下了。

但这时候我们还不能正常运行,得先修改bin目录下的配置文件。bin目录下的配置文件是从 nginx 目录下的 conf 文件夹拷贝过来的,可以在编译之前进行修改,也可以编译后再去改。配置文件修改如下(注意替换成自己的安装路径)

替换 nginx 的 conf/nginx.conf 配置文件,改成如下内容

user root;
worker_processes auto;
# 替换成自己的目录
error_log /home/chen/Documents/nginx-rtmp-module-master/test/error.log debug;
pid /run/nginx.pid;

events {
    worker_connections 1024;
}

# HTTP can be used for accessing RTMP stats
http {

    server {

        listen 8080;

        # This URL provides RTMP statistics in XML
        location /stat {
            rtmp_stat all;

            # Use this stylesheet to view XML as web page
            # in browser
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            # XML stylesheet to view RTMP stats.
            # Copy stat.xsl wherever you want
            # and put the full directory path here
            # 换成你自己的RTMP模块目录
            root /home/chen/Documents/nginx-rtmp-module-master/;
        }
	
	location /control {
            rtmp_control all;
        }
       
        location /rtmp-publisher { 
            # 换成你自己的RTMP模块目录
            root /home/chen/Documents/nginx-rtmp-module-master/test; 
        }
                        
        location /hls {
            # Serve HLS fragments
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /tmp;
	     # 访问权限开启,否则访问这个地址会报403
            autoindex on;
            expires -1;
            add_header Cache-Control no-cache;
            # 防止跨域问题
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; 
        }

        location /dash {
            # Serve DASH fragments
            root /tmp;
            add_header Cache-Control no-cache;
        }
        
        location / { 
            # 换成你自己的RTMP模块目录
            root /home/chen/Documents/nginx-rtmp-module-master/test/www;
        }
        
    }
}


rtmp {

    server {
        listen 1935;
        chunk_size 4000;
        
        # HLS
        # For HLS to work please create a directory in tmpfs (/tmp/hls here)
        # for the fragments. The directory contents is served via HTTP (see
        # http{} section in config)
        #
        # Incoming stream must be in H264/AAC. For iPhones use baseline H264
        # profile (see ffmpeg example).
        # This example creates RTMP stream from movie ready for HLS:
        #
        # ffmpeg -loglevel verbose -re -i movie.avi  -vcodec libx264
        #    -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1
        #    -f flv rtmp://localhost:1935/hls/movie
        #
        # If you need to transcode live stream use 'exec' feature.
        #
        application vod {
            # 点播媒体存放目录(换成你自己的RTMP模块目录)
            play /home/chen/Documents/nginx-rtmp-module-master/test/flvs/;
        }
        application live {
            live on;
            #丢弃闲置5s的连接
            #drop_idle_publisher 5s; 
            hls_path /home/chen/Documents/nginx-rtmp-module-master/test/live;
            hls on;
	    hls_continuous on;
	    hls_cleanup on;
        }
        application hls {
            live on;
            hls on;
            # 视频流存放地址(换成你自己的RTMP模块目录)
            hls_path /home/chen/Documents/nginx-rtmp-module-master/test/hls;
            hls_fragment 5s;
            hls_playlist_length 15s;
            hls_continuous on; #连续模式
            hls_cleanup on;    #对多余的切片进行删除
            hls_nested on;     #嵌套模式
        }
        # MPEG-DASH is similar to HLS

        application dash {
            live on;
            dash on;
            # 换成你自己的RTMP模块目录
            dash_path /home/chen/Documents/nginx-rtmp-module-master/test/dash;
        }
    }
}

nginx 命令

  • 查看Nginx的版本号:nginx -v
  • 启动Nginx:nginx
  • 快速停止或关闭Nginx:nginx -s stop
  • 正常停止或关闭Nginx:nginx -s quit
  • 配置文件修改重装载命令:nginx -s reload
  • 查看windows任务管理器下Nginx的进程命令:tasklist /fi "imagename eq nginx.exe"

注意:

  1. 执行 nginx 命令,只能在 nginx 目录下,不能进 bin 目录去执行
  2. 由于配置文件里是 root 用户,所以命令前面必须加 sudo

nginx 添加 rtmp 模块_第7张图片

推流

nginx 添加 rtmp 模块_第8张图片使用 ffmpeg 推送 rtmp 的命令为 ffmpeg -re -i /home/chen/Desktop/QQ视频20200524211316.mp4 -vcodec copy -codec copy -f flv rtmp://127.0.0.1/hls/test(ffmpeg 命令介绍可以参看之前写 rtsp 的博客 ),可以直接在命令行里键入,也可以将其保存为 shell文件(即 *.sh)然后在命令行中执行该 shell 即可

另外,网页不会实时更新,需要手动 F5 刷新,才能更新
nginx 添加 rtmp 模块_第9张图片
使用 -stream_loop -1 命令可以实现循环推流,例如
ffmpeg -re -stream_loop -1 -i /home/chen/Desktop/QQ视频20200524211316.mp4 -vcodec copy -codec copy -f flv -y rtmp://192.168.1.195/live/test

你可能感兴趣的:(流媒体)