nginx安装配置视频频服务器-windows

编译安装nginx

1、安装perl

安装地址: https://strawberryperl.com,选择msi安装程序即可

2、安装sed for windows

下载地址:https://sourceforge.net/projects/gnuwin32/files/sed/,执行安装程序结束后,将安装包bin目录配置到环境变量下

3、安装visual studio 2022 community版

4、从https://github.com/nginx/nginx下载1.26.1版源码,在源码中新建目录objs\lib

下载nginx-http-flv-module:https://github.com/winshining/nginx-http-flv-module (1.2.10版)

下载pcre: https://github.com/PCRE2Project/pcre2/tags (10.2.39版)

下载zlib: https://github.com/madler/zlib (1.3.1版)

下载openssl:https://www.openssl.org/source/index.html (3.0.13版)

将nginx-http-flv-module、openssl、pcre、zlib拷贝到该目录中并解压

5、查看nginx编译参数

下载nginx-1.26.1已经编译完成的版本,执行 nginx.exe -V,得到如下结果:

复制代码
configure arguments: --with-cc=cl --builddir=objs.msvc8 --with-debug --prefix= --conf-path=conf/nginx.conf --pid-path=logs/nginx.pid --http-log-path=logs/access.log --error-log-path=logs/error.log --sbin-path=nginx.exe --http-client-body-temp-path=temp/client_body_temp --http-proxy-temp-path=temp/proxy_temp --http-fastcgi-temp-path=temp/fastcgi_temp --http-scgi-temp-path=temp/scgi_temp --http-uwsgi-temp-path=temp/uwsgi_temp --with-cc-opt=-DFD_SETSIZE=1024 --with-pcre=objs.msvc8/lib/pcre2-10.39 --with-zlib=objs.msvc8/lib/zlib-1.3.1 --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_stub_status_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_slice_module --with-mail --with-stream --with-stream_realip_module --with-stream_ssl_preread_module --with-openssl=objs.msvc8/lib/openssl-3.0.13 --with-openssl-opt='no-asm no-tests -D_WIN32_WINNT=0x0501' --with-http_ssl_module --with-mail_ssl_module --with-stream_ssl_module

修改部分参数:

复制代码
--with-pcre=objs/lib/pcre2-10.39 --with-zlib=objs/lib/zlib-1.3.1 --with-openssl=objs/lib/openssl-3.0.13 --add-module=objs/lib/nginx-http-flv-module-1.2.10

7、configure

运行MSYS2或者MINGW64,进入nginx源码nginx-release-1.26.1中,执行命令:

复制代码
auto/configure --with-cc=cl --builddir=objs.msvc8 --with-debug --prefix= --conf-path=conf/nginx.conf --pid-path=logs/nginx.pid --http-log-path=logs/access.log --error-log-path=logs/error.log --sbin-path=nginx.exe --http-client-body-temp-path=temp/client_body_temp --http-proxy-temp-path=temp/proxy_temp --http-fastcgi-temp-path=temp/fastcgi_temp --http-scgi-temp-path=temp/scgi_temp --http-uwsgi-temp-path=temp/uwsgi_temp --with-cc-opt=-DFD_SETSIZE=1024 --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_stub_status_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_slice_module --with-mail --with-stream --with-stream_realip_module --with-stream_ssl_preread_module --with-openssl-opt='no-asm no-tests -D_WIN32_WINNT=0x0501' --with-http_ssl_module --with-mail_ssl_module --with-stream_ssl_module --with-pcre=objs/lib/pcre2-10.39 --with-zlib=objs/lib/zlib-1.3.1 --with-openssl=objs/lib/openssl-3.0.13 --add-module=objs/lib/nginx-http-flv-module-1.2.10

修改objs.msvc8/Makefile,修改第三行:

复制代码
CFLAGS =  -O2  -W4 -WX -nologo -MT -Zi -Fdobjs.msvc8/nginx.pdb -DFD_SETSIZE=1024 -DNO_SYS_TYPES_H

去掉-WX,加上-MP

复制代码
CFLAGS =  -O2  -W4 -MP -nologo -MT -Zi -Fdobjs.msvc8/nginx.pdb -DFD_SETSIZE=1024 -DNO_SYS_TYPES_H

8、编译

打开Developer Command Prompt for VS 2022,进入nginx源码目录,输入命令:nmake,回车

编译时间需要10-30分钟,结束后,在objs.msvc8下的nginx.exe复制到nginx源码目录下。

新建目录logs、temp、html。

9、安装ffmpeg

下载安装,并将ffmpeg的bin目录设置为环境变量

配置nginx

修改conf/nginx.conf

复制代码
worker_processes 1;
 
events {
    worker_connections 1024;
}
 
http {
    include mime.types;
    default_type application/octet-stream;
 
    sendfile on;
    keepalive_timeout 65;
    
    server {
        listen 8553;
        server_name localhost;
        
        location / {
            root html;
            index index.html index.htm;
        }
 
        location /live {
            flv_live on;
            chunked_transfer_encoding on;
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Allow-Methods' '*';
        }
 
        location /hls {
            add_header 'Access-Control-Allow-Origin' '*';
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            alias /test;
            expires -1;
        }
 
        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }
 
        location /stat.xsl {
            root /usr/local/nginx/nginx-http-flv-module;
        }
    }
}
 
rtmp {
    server {
        listen 1938; #nginx监听的rtmp推流/拉流端口
        application myapp {
            live on; #当推流时,rtmp路径中的app(rtmp中的一个概念)匹配myapp时,开始直播
            meta off;
            gop_cache on;
            allow play all;
            record off;
            hls on;
            hls_path /test;
            hls_fragment 1s;
        }
    }
}

ffmpeg推流(海康摄像头)

复制代码
ffmpeg -i rtsp://用户名:密码@ip:554/H.264/ch1/main/av_stream -c:v libx264 -an -f
flv rtmp://127.0.0.1:1938/myapp/main

测试

flv.html

复制代码
<html>
<head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
    <title>flv.js demo</title>
    <style>
        .mainContainer {
            display: block;
            width: 1024px;
            margin-left: auto;
            margin-right: auto;
        }
 
        .urlInput {
            display: block;
            width: 100%;
            margin-left: auto;
            margin-right: auto;
            margin-top: 8px;
            margin-bottom: 8px;
        }
 
        .centeredVideo {
            display: block;
            width: 100%;
            height: 576px;
            margin-left: auto;
            margin-right: auto;
            margin-bottom: auto;
        }
 
        .controls {
            display: block;
            width: 100%;
            text-align: center;
            margin-left: auto;
            margin-right: auto;
        }
    </style>
</head>
 
<body>
 
<p class="mainContainer">
    <video name="videoElement" id="videoElement" class="centeredVideo" controls muted autoplay width="1024"
           height="576">
        Your browser is too old which doesn't support HTML5 video.
    </video>
</p>
 
<script src="flv.min.js"></script>
 
<script>
 
    function start() {
        if (flvjs.isSupported()) {
            var videoElement = document.getElementById('videoElement');
            var flvPlayer = flvjs.createPlayer({
                type: 'flv',
				url: 'http://ip:8553/live?port=1938&app=myapp&stream=main'
            });
            flvPlayer.attachMediaElement(videoElement);
            flvPlayer.load();
            flvPlayer.play();
        }
    }
 
    document.addEventListener('DOMContentLoaded', function () {
        start();
    });
</script>
</body>
 
</html>

flv.min.js 下载地址: http://flv.jnyzh.cn/flv.min.js

效果如下:

相关推荐
cpsvps_net7 小时前
美国服务器环境下Windows容器工作负载智能弹性伸缩
windows
甄超锋7 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
cpsvps10 小时前
美国服务器环境下Windows容器工作负载基于指标的自动扩缩
windows
伊成12 小时前
Docker 部署 Nginx 完整指南
nginx·docker·容器
网硕互联的小客服13 小时前
Apache 如何支持SHTML(SSI)的配置方法
运维·服务器·网络·windows·php
etcix13 小时前
implement copy file content to clipboard on Windows
windows·stm32·单片机
许泽宇的技术分享13 小时前
Windows MCP.Net:基于.NET的Windows桌面自动化MCP服务器深度解析
windows·自动化·.net
非凡ghost14 小时前
AMS PhotoMaster:全方位提升你的照片编辑体验
windows·学习·信息可视化·软件需求
mortimer16 小时前
一次与“顽固”外部程序的艰难交锋:subprocess 调用exe踩坑实录
windows·python·ai编程
gameatp18 小时前
从 Windows 到 Linux 服务器的全自动部署教程(免密登录 + 压缩 + 上传 + 启动)
linux·服务器·windows