前提:一台已经安装好系统的Linux服务器,这里我使用的是Linux debian10 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) x86_64版本
1、官网下载最新nginx压缩包
http://nginx.org/en/download.html
2、Github下载nginx-http-flv-module
https://github.com/winshining/nginx-http-flv-module
直播依赖模块,基于nginx-rtmp-module开发,支持flv直播
3、 下载nginx_mod_h264_streaming模块
https://download.csdn.net/download/robinson_0612/9738948
点播核心模块,这里使用的是nginx_mod_h264_streaming-2.2.7.tar版本
4、 资料准备
在opt文件夹下新建一个文件夹tools ,将下载的nginx 、nginx_mod_h264_streaming-2.2.7.tar和nginx-http-flv-module-master.zip 拷贝到tools 文件夹下
5、在/user/local下创建nginx 文件夹
非常重要!用于安装nginx的目标位置,也是编译nginx的指定生成位置
6、安装依赖项
注意Debian/Ubuntu系统下使用apt-get安装,RedHat系的Linux系统使用yum命令获取,本文以Debian系统作示例,RedHat系的系统请自行查找对应模块的安装指令
a) apt-get install unzip//获取unzip工具用于解压zip压缩包
b) apt-get update//更新环境
c) apt-get install build-essential//获取gcc编译环境
e) apt-get install libpcre3libpcre3-dev//获取prce依赖库,用于正则验证
f) apt-get insatll zlib1g-dev//获取zlib依赖库,注意是1g不是lg
g) apt-get install openssllibssl-dev//获取openssl依赖库,用于加密访问
7、 将tools 下面的nginx-http-flv-module压缩包和nginx_mod_h264_streaming解压到/usr/local/nginx下面
目标文件夹为第5步创建的nginx文件夹
a) cd /opt/tools
b) unzip nginx-http-flv-module-1.2.6.zip
c) mv /opt/tools/nginx-http-flv-module /usr/local/nginx/
d) tar -zxvf nginx_mod_h264_streaming-2.2.7.tar
e) mv /opt/tools/nginx_mod_h264_streaming-2.2.7 /usr/local/nginx/
8、 将nginx-http-flv-module模板添加到nginx中,生成make文件 并安装nginx(核心步骤)
a) tar -zxvf nginx-1.14.2.tar.gz//解压下载好的nginx源码压缩包,实际文件名以下载的为准
b) cd nginx-1.14.2//进入解压好的nginx源码目录
c) ./configure--prefix=/usr/local/nginx --without-http_gzip_module --with-http_ssl_module--with-http_flv_module --with-http_mp4_module --add-module=/usr/local/nginx/nginx-http-flv-module-master --add-module=/usr/local/nginx/nginx_mod_h264_streaming-2.2.7//核心步骤
--prefix= 用于指定nginx编译生成的目标文件夹,必须为第5步创建的nginx文件夹
--without-指定不需要编译的模块
--with-指定要编译的模块
--add-module=指定要添加的第三方模块,其后跟该模块源码的目录,即本文第6点文件解压之后的安装目录
每条指令之间用空格 隔开
d) 打开/usr/local/nginx/nginx_mod_h264_streaming-2.2.7/src/ngx_http_streaming_module.c文件,将
if (r->zero_in_uri)
{
return NGX_DECLINED;
}这段代码注释(我这里是158-161行)
//防止报错
e) make CFLAGS='-Wno-implicit-fallthrough' //防止报错
f) make install//安装
9、 修改配置文件
打开/usr/local/nginx/conf/nginx.conf文件修改配置
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
rtmp_auto_push on;
rtmp_auto_push_reconnect 1s;
rtmp_socket_dir /tmp;
rtmp{
out_queue 4096;
out_cork 8;
max_streams 128;
timeout 15s;
drop_idle_publisher 15s;
log_interval 5s;
log_size 1m;
server{
listen 1935;//默认为1935,无需配置
server_name localhost;
application myapp{//直播应用名称,与播放地址中的app对应
live on;
gop_cache on;
}
application hls{
live on;
hls on;
hls_path /usr/local/nginx/html/hls;
}
application dash{
live on;
dash on;
dash_path /usr/local/nginx/html/dash;
}
}
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
server {
listen 8088;//http服务端口,通过http获取视频流时从此端口获取
server_name localhost;
location / {
root html;//web文件根目录
index index.html index.htm;//指定默认首页文件
}
location ~* \.flv$ {#flv 支持
root /opt/tools/media/flv;#目标flv格式video文件夹位置,需手动创建此文件夹,并将对应格式的视频文件放在此文件夹下
}
location ~ \.mp4$ {
root /opt/tools/media/mp4;#目标mp4格式video文件夹位置
}
location /live{
flv_live on;
chunked_transfer_encoding on;
add_header 'Access-Control-Allow-Origin' '*';//设置允许跨域播放
add_header 'Access-Control-Allow-Credentials' 'true';
}
location /hls{
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /usr/local/nginx/html/hls;
add_header 'Cache-Control' 'no-cache';
}
location /dash {
root /usr/local/nginx/html/dash;
add_header 'Cache-Control' 'no-cache';
}
location /stat {
#configuration of push & pull status
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /usr/local/nginx/nginx-http-flv-module;
}
location /control {
rtmp_control all; #configuration of control module of rtmp
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
10、 直播测试
推流地址:rtmp://172.16.1.97:1935/myapp/123
对应播放地址:http://172.16.1.97:8081/live?port=1935&app=myapp&stream=123
11、 点播测试
http:172.16.1.97:8088/test.flv
http:172.16.1.97:8088/1.mp4