user nginx nginx;
worker_processes 12;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
worker_rlimit_nofile 204800;
events {
worker_connections 65535;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main escape=json '{ "@timestamp": "$time_iso8601", '
'"remote_addr": "$remote_addr",'
'"request_time": "$request_time",'
'"upstream_response_time": "$upstream_response_time",'
'"status": $status,'
'"x_forwarded": "$http_x_forwarded_for",'
'"http_referer": "$http_referer",'
'"request": "$request",'
'"upstream_addr": "$upstream_addr",'
'"body_bytes_sent":$body_bytes_sent,'
'"request_body":$request_body,'
'"http_user_agent": "$http_user_agent" }';
access_log logs/access.log main;
client_max_body_size 100m;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream iotappsrv {
server 127.0.0.1:10001;
keepalive 1000;
}
upstream ses-platform {
server 127.0.0.1:10001;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
location /ses-platform/ {
proxy_pass http://ses-platform/;
proxy_set_header Host $host:$server_port;
}
# 配置 websocket
location /server/browser {
proxy_pass http://iotappsrv;
proxy_set_header Host $host:$server_port;
proxy_http_version 1.1;
proxy_connect_timeout 4s;
proxy_read_timeout 6000s;
proxy_send_timeout 12000s;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
# 配置地图
location /map {
add_header Access-Control-Allow-Methods *;
add_header Access-Control-Max-Age 3600;
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Origin $http_origin;
add_header Access-Control-Allow-Headers $http_access_control_request_headers;
alias map;
}
location /files/ {
alias /data/iot/uploadFiles/;
}
location /centos7dvd {
alias /mnt/centos7dvd;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}
server {
listen 81;
server_name localhost;
location /live {
flv_live on;
chunked_transfer_encoding on;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
}
# 统计
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root html;
}
# 映射录制视频的开始/停止
location /control {
rtmp_control all;
}
# 映射录制视频的播放地址
location /vod {
alias /data/video_rec/;
add_header 'Access-Control-Allow-Origin' $http_origin;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
}
}
}
rtmp_auto_push on;
rtmp_auto_push_reconnect 1s;
rtmp_socket_dir /tmp;
rtmp {
out_queue 4096;
out_cork 8;
max_streams 64;
server {
listen 1935;
application iot {
live on;
gop_cache off;
# 录制视频配置
# record :all 表示推流的时候就开始录制
# 添加上manual 组合标识,下发录制指令start后才开始录制 stop-停止录制
# 例如:开始录制指令: http://服务器地址:81/control/record/start?app=iot&name=cwj001&rec=all
# 停止指令: http://服务器地址:81/control/record/stop?app=iot&name=cwj001&rec=all
recorder all {
record all manual;
record_suffix -%Y-%m-%d-%H-%M-%S.flv;
record_max_size 1000M;
#on_record_done http://127.0.0.1:10001/;
record_path /data/video_rec;
}
}
# 拉取流
# 播放地址 http://服务器IP:81/live?port=1935&app=diaogui_hw
#application diaogui_hw {
# live on;
# pull rtmp://192.168.13.108:1935/live/456645b2-5325-47b8-baba-8bae145ce2c8@e_camera_thermal@e_stream_main;
#}
}
}
Nginx-rtmp模块实现流媒体play、push、pull功能
于 2021-03-05 16:17:51 首次发布