Nginx-rtmp模块实现流媒体play、push、pull功能


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;
        #}

    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值