zoukankan      html  css  js  c++  java
  • Windows 搭建 nginx rtmp服务器

    1.环境
    开发环境:windows
    开发工具:ffmpeg、nginx、nginx-rmtp-module、vlc media player播放器

    2.准备文件
    官方ffmpeg下载地址:http://www.ffmpeg.org
    官方nginx下载地址:http://nginx.org
    官方nginx-rtmp-module下载地址:https://github.com/arut/nginx-rtmp-module
    官方vlc media player下载地址:https://www.videolan.org/vlc

    3.安装nginx和ffmpeg
    在c盘根目录下创建两个目录,ffmpeg和nginx目录

    把下载好的ffmpeg文件复制到c:ffmpeg目录下
    把下载好的nginx文件复制到c: ginx目录下
    把下载好的nginx文件复制到c: ginx ginx-rtmp-module目录下

    4.配置FFmpeg
    环境配置:右键我的电脑 》属性 》高级系统设置 》高级 》环境变量 》双击Path ,将 c:ffmpeg添加到Path路径下

    5.配置nginx文件

    文件目录C: ginxconf ginx.conf

    #user  nobody;
    # multiple workers works !
    worker_processes  2;
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    events {
        worker_connections  8192;
        # max value 32768, nginx recycling connections+registry optimization = 
        #   this.value * 20 = max concurrent connections currently tested with one worker
        #   C1000K should be possible depending there is enough ram/cpu power
        # multi_accept on;
    }
    
    rtmp {
        server {
            listen 1935;
            chunk_size 4000;
            application live {
                 live on;
            }
        }
    }
    
    http {
        #include      /nginx/conf/naxsi_core.rules;
        include       mime.types;
        default_type  application/octet-stream;
    
        #log_format  main  '$remote_addr:$remote_port - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';
    
        #access_log  logs/access.log  main;
    
    #     # loadbalancing PHP
    #     upstream myLoadBalancer {
    #         server 127.0.0.1:9001 weight=1 fail_timeout=5;
    #         server 127.0.0.1:9002 weight=1 fail_timeout=5;
    #         server 127.0.0.1:9003 weight=1 fail_timeout=5;
    #         server 127.0.0.1:9004 weight=1 fail_timeout=5;
    #         server 127.0.0.1:9005 weight=1 fail_timeout=5;
    #         server 127.0.0.1:9006 weight=1 fail_timeout=5;
    #         server 127.0.0.1:9007 weight=1 fail_timeout=5;
    #         server 127.0.0.1:9008 weight=1 fail_timeout=5;
    #         server 127.0.0.1:9009 weight=1 fail_timeout=5;
    #         server 127.0.0.1:9010 weight=1 fail_timeout=5;
    #         least_conn;
    #     }
    
        sendfile        off;
        #tcp_nopush     on;
    
        server_names_hash_bucket_size 128;
    
    ## Start: Timeouts ##
        client_body_timeout   10;
        client_header_timeout 10;
        keepalive_timeout     30;
        send_timeout          10;
        keepalive_requests    10;
    ## End: Timeouts ##
    
        #gzip  on;
    
        server {
            listen       8800;
            server_name  localhost;
    
    
            location /stat {
                rtmp_stat all;
                rtmp_stat_stylesheet stat.xsl;
            }
            location /stat.xsl {
                root nginx-rtmp-module/;
            }
            location /control {
                rtmp_control all;
            }
    
            #charset koi8-r;
            #access_log  logs/host.access.log  main;
    
            ## Caching Static Files, put before first location
            #location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
            #    expires 14d;
            #    add_header Vary Accept-Encoding;
            #}
    
    # For Naxsi remove the single # line for learn mode, or the ## lines for full WAF mode
            location / {
                #include    /nginx/conf/mysite.rules; # see also http block naxsi include line
                ##SecRulesEnabled;
             ##DeniedUrl "/RequestDenied";
             ##CheckRule "$SQL >= 8" BLOCK;
             ##CheckRule "$RFI >= 8" BLOCK;
             ##CheckRule "$TRAVERSAL >= 4" BLOCK;
             ##CheckRule "$XSS >= 8" BLOCK;
                root   html;
                index  index.html index.htm;
            }
    
    # For Naxsi remove the ## lines for full WAF mode, redirect location block used by naxsi
            ##location /RequestDenied {
            ##    return 412;
            ##}
    
    ## Lua examples !
    #         location /robots.txt {
    #           rewrite_by_lua '
    #             if ngx.var.http_host ~= "localhost" then
    #               return ngx.exec("/robots_disallow.txt");
    #             end
    #           ';
    #         }
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ .php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
    
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            #location ~ .php$ {
            #    root           html;
            #    fastcgi_pass   127.0.0.1:9000; # single backend process
            #    fastcgi_pass   myLoadBalancer; # or multiple, see example above
            #    fastcgi_index  index.php;
            #    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            #    include        fastcgi_params;
            #}
    
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /.ht {
            #    deny  all;
            #}
        }
    
        # another virtual host using mix of IP-, name-, and port-based configuration
        #
        #server {
        #    listen       8000;
        #    listen       somename:8080;
        #    server_name  somename  alias  another.alias;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
        # HTTPS server
        #
        #server {
        #    listen       443 ssl spdy;
        #    server_name  localhost;
    
        #    ssl                  on;
        #    ssl_certificate      cert.pem;
        #    ssl_certificate_key  cert.key;
        #    ssl_session_timeout  5m;
        #    ssl_prefer_server_ciphers On;
        #    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        #    ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:ECDH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!eNULL:!MD5:!DSS:!EXP:!ADH:!LOW:!MEDIUM;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    }
    

    6.启动nginx  

    按住windows键+R,输入cmd,进入cmd命令窗口

    进入nginx目录
    cd c: ginx

    启动nginx
    nginx.exe -c conf ginx-win.conf

    http 访问地址:http://127.0.0.1:8800

    7.ffmpeg本地视频推流测试

    ffmpeg 推流地址:rtmp://127.0.0.1:1935/live/home

    ffmpeg推流测试:ffmpeg.exe -re -i c:ffmpeginputfile.mp4 -vcodec libx264 -acodec aac -f flv rtmp://127.0.0.1:1935/live/home 

    ffmpeg 拉流测试:ffplay.exe rtmp://localhost:1935/live/home

     

      

     使用vlc media player播放器测试输入网络URL:rtmp://127.0.0.1:1935/live/home

     摄像头推流测试

    摄像头推流
    ffmpeg -f dshow -i video="USB2.0 PC CAMERA" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/live/home
    麦克风推流
    ffmpeg -f dshow -i audio="麦克风 (2- USB2.0 MIC)" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/live/123
    摄像头&麦克风推流
    ffmpeg -f dshow -i video="USB2.0 PC CAMERA" -f dshow -i audio="麦克风 (2- USB2.0 MIC)" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/live/123
    或者
    ffmpeg -f dshow -i video="USB2.0 PC CAMERA":audio="麦克风 (2- USB2.0 MIC)" -vcodec libx264 -r 25 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/live/123

    屏幕推流

    首先需要安装一个软件,screen capture recorder
    编译好的下载地址是:http://sourceforge.net

    屏幕推流

    ffmpeg -f gdigrab -i desktop -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/live/home
    屏幕&麦克风推流
    ffmpeg -f gdigrab -i "1:0" -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://127.0.0.1:1935/rtmplive/home
    屏幕&麦克风&摄像头
    ffmpeg -f avfoundation -framerate 30 -i "1:0" -f avfoundation -framerate 30 -video_size 640x480 -i "0" -c:v libx264 -preset ultrafast -filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/rtmplive/home

    看直播

  • 相关阅读:
    考试
    aws代理
    ansible debug
    apollo docker 安装 使用镜像 idoop/docker-apollo
    java jvm 内存监控工具visualvm 的使用
    kong dashboard UI 的使用 (使用kong 对服务反向代理,以及解决跨域问题)
    git账号
    kong Gateway && PostgreSQL 的安装(docker)
    apollo 配置中心的安装与使用
    springboot 开发模式 dev
  • 原文地址:https://www.cnblogs.com/sntetwt/p/11435564.html
Copyright © 2011-2022 走看看