使用nginx-rtmp-module模块+ffmpeg推送http+flv和hls直播流

本文详细介绍了如何在Linux环境下安装nginx和nginx-rtmp-module,以及如何使用ffmpeg进行hls和http+flv直播流的推送。包括检查和安装依赖、编译安装nginx、添加rtmp模块配置、安装ffmpeg以及推流命令的使用。

一、nginx在Linux下的安装

nginx官网地址:http://nginx.org/
nginx源码地址:https://nginx.org/en/download.html

nginx版本区别:
Nginx官网提供了三个类型的版本
1、Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版
2、Stable version:最新稳定版,生产环境上建议使用的版本
3、Legacy versions:遗留的老版本的稳定版

nginx-http-flv模块下载地址:
https://github.com/winshining/nginx-http-flv-module

nginx-rtmp-module模块下载地址:
https://github.com/arut/nginx-rtmp-module.git

1.nginx安装

1.1检查安装nginx的依赖性

因为Nginx官方提供的是C源码,要自己进行编译,所以需要自己拥有编译所依赖的环境和库才可正常编译。
nginx的模块需要第三方库的支持,检查是否安装下列库:zlib、zlib-devel、openssl、openssl-devel、prce、prce-devel。

[root@ myPackage] rpm -qa |grep zlib
[root@ myPackage] rpm -qa |grep openssl
[root@ myPackage] rpm -qa |grep pcre
[root@ myPackage] rpm -qa |grep gcc
[root@ myPackage] rpm -qa |grep autoconf
[root@ myPackage] rpm -qa |grep automake
1.1.1【一键式安装】【安装nginx依赖包】

直接使用yum命令安装

[root@ myPackage]yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel 

Nginx依赖于pcre、zlib、openssl,在编译前配置时如果有问题,可以使用yum方式安装三个包(pcre-devel、zlib-devel、openssl-devel)

1.1.2 逐个安装依赖

【1.1】安装gcc

[root@ myPackage]yum -y install gcc automake autoconf libtool make

【1.2】安装g++

[root@ myPackage]yum install gcc gcc-c++

【1.3】安装PCRE库
这是一个表达式库,Nginx中的http模块则使用到了该库来解析正则表达式,所以安装它,自己选择一个路径,我这里选择了/usr/local/src
执行命令:

[root@ myPackage]cd /usr/local/src
[root@ myPackage]wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz
[root@ myPackage]tar -zxvf pcre-8.37.tar.gz
[root@ myPackage]cd pcre-8.34
[root@ myPackage]./configure
[root@ myPackage]make
[root@ myPackage]make install

【1.4】安装zlib库
zlib库用于压缩和解压缩,方式众多,Nginx也使用到了zlib,所以继续安装它,路径同样/usr/local/src
执行命令:

[root@ myPackage]wget http://zlib.net/zlib-1.2.11.tar.gz
[root@ myPackage]tar -zxvf zlib-1.2.11.tar.gz
[root@ myPackage]cd zlib-1.2.11
[root@ myPackage]./configure
[root@ myPackage] make
[root@ myPackage] make install

【1.5】安装openssl

[root@ myPackage] yum -y install openssl-deve

2. nginx安装

进入linux常用目录下如(opt/myPackage)

在nginx官网下载安装包或从其他平台导入安装包
下载:

[root@ myPackage] wget http://nginx.org/download/nginx-1.12.0.tar.gz

解压:

[root@ myPackage] tar -zxvf nginx-1.12.0.tar.gz

编辑:

[root@ myPackage] cd nginx-1.12.0
[root@ nginx-1.12.0] ./configure --prefix=/usr/local/nginx
          #----------------安装配置信息-----------
          nginx path prefix: "/usr/local/nginx"   #安装路径
          nginx binary file: "/usr/local/nginx/sbin/nginx"
          nginx modules path: "/usr/local/nginx/modules "
          nginx configuration prefix: "/usr/local/nginx/conf"
          nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
          nginx pid file: "/usr/local/nginx/logs/nginx.pid"
          nginx error log file: "/usr/local/nginx/logs/error.log"
          nginx http access log file: "/usr/local/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"

编译及安装:

[root@ nginx-1.12.0] make && make install 

如果安装有问题,输入make clean命令,解决问题问题后再执行make && make install

【检验安装是否成功】

[root@ nginx-1.12.0] cd /usr/local/nginx/sbin  #进入nginx安装路径
[root@ sbin]# ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

二、nginx-rtmp-module模块的安装

1.nginx-rtmp-module模块的安装

进入nginx源码包所在目录:

[root@ sbin]cd /opt/myPackage

下载模块:

[root@ myPackage] wget  https://github.com/arut/nginx-rtmp-module/archive/master.zip

解压:

[root@ myPackage]unzip nginx-rtmp-moudle-master.zip

添加rtmp模块:

[root@ myPackage] cd nginx-1.12.0
[root@ nginx-1.12.0]./configure --add-module=/opt/myPackage/nginx-rtmp-module-master

编译安装:

[root@ nginx-1.12.0]make && make install

启动nginx:

[root@ nginx-1.12.0]./usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

2.修改nginx.conf配置文件

2.1增加rtmp块

[root@ nginx-1.12.0] vi /usr/local/nginx/cinf/nginx.cof
------------------------
rtmp {     #保存所有 RTMP 配置的块       
    server {   #声明一个 RTMP 实例
        listen 1935;  #服务端口--默认监听的端口,以接收rtmp连接
        chunk_size 4096;   #数据传输块的大小--默认
        #设置直播的application名称是 live
            application live{   #rtmp推流请求路径,创建一个 RTMP 应用
                    live on;  #切换直播模式,即一对多广播
                            }
        #设置推流的应用名称
             application hls{
                  live on;  #开启直播
                  hls on;  #在 application 切换 HLS
                  hls_path /usr/local/nginx/html/hls;#设置 HLS 播放列表和分段目录。这一目录必须在 NGINX 启动前就已存在
                  hls_fragment 3s;  #设置 HLS 分段长度。默认为 5 秒钟
                  hls_playlist_length 30;   #设置 HLS 播放列表长度。默认为 30 秒钟
     }
} 

2.2 server增加location模块

server {     #server块:配置虚拟主机的相关参数,一个http中可以有多个server。
         listen       8080;     #监听端口
        server_name  localhost;       #监听地址 
        location /live{   #location块:配置请求的路由,以及各种页面的处理情况
            flv_live on;
            chunked_transfer_encoding on;
            #以下配置跨域
                add_header 'Access-Control-Allow-Origin' 'https://www.aaa.com' always;
                add_header 'Access-Control-Allow-Credentials' 'true';
                # 为预检请求加的header
                add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE';
                #为预检请求加的header
                add_header 'Access-Control-Allow-Headers' '*';
        }

        location /hls{
            add_header 'Access-Control-Allow-Origin' 'https://www.bbb.com';   #配置跨域
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            alias html/hls; #推流存放的地址
            expires -1;  
        }
     #下面两个是加上去的,用来配置直播的http访问    #具体的意思可以在github的文档中查看     					
        location /stat {                
             rtmp_stat all;              
            rtmp_stat_stylesheet stat.xsl;       
        }
       
       location /stat.xsl {        #注意这里的路径不能错误,直接写绝对路径就可以        
           root  /usr/local/nginx/nginx-rtmp-module-master;        #stat.xsl所在目录位置,该文件可复制
        } 
}

检验查看流信息:
在浏览器输入url: http:// + 服务器ip +: + 端口号 + /stat
例如:http://192.168.220.128:8080/stat

三、ffmpeg安装及推流

官网:http://ffmpeg.org/

ffmpeg下载地址:https://ffmpeg.org/download.html

ffmpeg-windows下载:https://ffmpeg.zeranoe.com/builds/

ffmpeg-linux版本下载:https://johnvansickle.com/ffmpeg

1.ffmpeg安装

下载ffmpeg-release-amd64-static.tar.xz免安装包到/opt/myPackage目录,输入如下命令

[root@ myPackage] wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-release-amd64-static.tar.xz
[root@ myPackage] xz -d ffmpeg-release-amd64-static.tar.xz
[root@ myPackage] tar -xvf ffmpeg-release-amd64-static.tar

当然,如果想要ffmpeg命令全局可用,可以在bin目录加个链接。比如,分别执行如下命令,即可在:/usr/bin目录下创建ffmpeg和ffprobe软链接。

[root@ myPackage] cd /usr/bin
[root@ bin] ln -s /opt/myPackage/ffmpeg-4.2.2-amd64-static/ffmpeg ffmpeg
[root@ bin] ln -s /opt/myPackage/ffmpeg-4.2.2-amd64-static/ffprobe ffprobe

任意位置输入ffmpeg验证

2.ffmpeg推流

2.1 ffmpeg推送hls流

启动nginx,并输入推流命令:

[root@ sbin] ffmpeg -re -stream_loop -1 -i /usr/local/jianghu.mp4 -vcodec libx264 -acodec aac -b:v 500k -b:a 32k -f flv rtmp://172.21.0.10:8001/hls/test

-i :后跟推流视频地址
-stream_loop -1 :表示循环推流
-vcodec libx264 :视频H264编码格式
-acodec aac :音频HAAC编码格式
-b:v 500k :视频码率 -b:a 32k :音频码率
rtmp://172.21.0.10/hls/test:rtmp协议传输hls流;172.21.0.10:8001为rtmp模块监听IP(端口1935为默认端口省略);hls为application配置号,是rtmp推流请求路径;test可以随便取名,但作为收流的一个凭证

播放地址:http://172.21.0.10:8080/hls/test.m3u8

172.21.0.10:ngixnx服务器ip,
8080:监听监听端口
hls:location模块配置的文件路径 location /hls{…} t
est.m3u8:ffmpeg推流的最后命名及hls流索引文件类型

**注意:**视频编码格式和音频编码格式最好直接设置参数 -vcodec copy -acodec copy;否则会大大占用系统的CPU

2.2 ffmpeg推送http+flv流

2.2.1当rtmp模块监听端口是默认的1935时,输入推流命令

ffmpeg -re -stream_loop -1 -i /usr/local/jianghu.mp4 -vcodec copy -acodec copy -b:v 500k -b:a 32k -f flv rtmp://172.21.0.10/myapp/flv

播放地址配置
http://172.21.0.10:8080/live?app=myapp&stream=flv

live为application配置号
flv可以随便取名,但是最后stream字段值必须与其一直,否则无法播放

2.2.2当rtmp模块监听端口不是默认的1935时,输入推流命令需要带上端口号

ffmpeg -re -stream_loop -1 -i /usr/local/jianghu.mp4 -vcodec copy -acodec copy -b:v 500k -b:a 32k -f flv rtmp://172.21.0.10:8001/myapp/flv

播放地址配置:
http://172.21.0.10:8080/live?port=8001&app=myapp&stream=flv

最后VLC拉流
VLC -->“媒体”–>“打开网络串流”–> http://172.21.0.10:8089/hls/test.m3u8

当然hls流和http+flv是可以同时推送和拉取的。至此hls流和http+flv推流的简易方法就介绍完了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值