NGINX-RTMP直播服务器搭建-OBS录制推流-VLC视频流播放

本文介绍如何使用 Nginx 搭建 RTMP 视频直播服务器,包括配置 Nginx 作为 RTMP 服务器、设置直播与回放功能、使用 OBS 进行视频推流以及通过 VLC 实现视频播放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上关于视频直播的资料还是挺多的,看了一些文章,自己也动手实践了下。主要有三个步骤:(1)NginxRTMP服务器搭建(2)视频录制推流器 (3)拉流器(播放器),有了这些就可以开始简单视频相关的直播了。对于延时什么的,还需要深入去研究 ,以及如何进行视频开发等后续再深入研究。

Nginx-RTMP服务器搭建

参考:利用nginx搭建RTMP视频点播、直播、HLS服务器

GitHub nginx-rtmp-module 参考地址

Nginx点播设置:

 

worker_processes  1;

events {
    worker_connections  1024;
}

##################RTMP服务#################
rtmp {

    server {

        listen 1935;  #//服务端口 

	chunk_size 4096;   #//数据传输块的大小

	application video {
	    play /usr/local/data/video; #//视频文件存放位置,访问方式rtmp://localhost:1935/video

	    #如视频路径存有视频welcome.mp4访问路径即为rtmp://localhost:1935/video/welcome.mp4
	}
    }
}

http {
    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {

        listen       80;

        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {
            root   html;
        }
    }
}

 

 

 

Nginx直播配置:

 

worker_processes  1;

events {
    worker_connections  1024;
}

##################RTMP服务#################
rtmp {

    server { 

        listen 1935;

        chunk_size 4096;

        application video {
           play /usr/local/data/video;
        }

	application live{ #第一处添加的直播字段
	   live on;
	}
    }

}
####启动浏览器查看http://localhost:80/stat
http {
    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {

        listen       80;

        server_name  localhost;

    location /stat {     
            #第二处添加的location字段。
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
    }

    location /stat.xsl { 
        #第二处添加的location字段。
        root /usr/local/nginx/nginx-rtmp-module/;
    }

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

 

 

 

Nginx直播回放配置:

 

worker_processes  1;

events {
    worker_connections  1024;
}

##################RTMP服务#################
rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application video {
            play /usr/local/data/video;
        }

        application live {

		live on;#直播模式

		hls on; #这个参数把直播服务器改造成实时回放服务器。

		wait_key on; #对视频切片进行保护,这样就不会产生马赛克了。

		hls_path /usr/local/data/hls; #切片视频文件存放位置。

		hls_fragment 10s;     #每个视频切片的时长。

		hls_playlist_length 60s;  #总共可以回看的事件,这里设置的是1分钟。

		hls_continuous on; #连续模式。

		hls_cleanup on;    #对多余的切片进行删除。

		hls_nested on;     #嵌套模式。
        }
    }
}

http {
    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
            listen       80;

            server_name  localhost;

	    location /stat {
		    rtmp_stat all;
		rtmp_stat_stylesheet stat.xsl;
	    }

	    location /stat.xsl {
		root /usr/local/nginx/nginx-rtmp-module/;
	    }

	    location /live {  #这里也是需要添加的字段。

		types {  

		    application/vnd.apple.mpegurl m3u8;  

		    video/mp2t ts;  
		}
		alias /opt/video/hls;   
		expires -1;
		add_header Cache-Control no-cache;  
	    }  

	   location / {
		root   html;
		index  index.html index.htm;
	   }

	   error_page   500 502 503 504  /50x.html;

	   location = /50x.html {
		root   html;
	   }
    }
}

 

 

 

 

 

 

 

 

 

OBS下载及录制推流

下载地址1:http://www.pc6.com/down.asp?id=410276

下载地址2:http://www.obsapp.net/

下载地址3:https://obsproject.com/

这里以下载地址一的OBS版本与Nginx直播模式配置为例I端口相应的做了调整(http Server listen 1990):

设置步骤:

1、添加场景

2、添加来源:显示器获取 、音频获取等等

3、设置RTMP的服务器路径,并设置流名称

4、开始录制、开始推流

5、验证是否直播成功,打开浏览器http://172.16.20.10:1990/stat,看到如下界面表示直播正常。

VLC视频流播放

参考:RTMP、RTSP、HTTP视频协议详解VLC下载网上一搜就有了。

只需要设置播放流地址就可以验证前面配置的直播地址了:

直播中:

<think>好的,用户现在想配置Nginx支持RTMP协议。我需要先理解RTMP是什么。RTMP是实时消息协议,常用于视频流传输,比如直播。要让Nginx支持RTMP,通常需要添加第三方模块,比如nginx-rtmp-module。 首先,用户可能已经安装了Nginx,但默认情况下Nginx并不包含RTMP模块。所以用户需要重新编译Nginx,添加这个模块,或者通过包管理器安装带有RTMP模块的版本。比如,有些Linux发行版可能有现成的包,但用户可能需要自己编译。 接下来,我得考虑用户的环境。用户之前执行过一些命令,显示他们使用的是基于Linux的系统,可能CentOS或类似,因为路径里有/www/server/nginx,这可能是宝塔面板的目录结构。如果是宝塔面板安装的Nginx,可能需要通过面板添加模块,或者重新编译。 用户可能需要指导如何检查现有Nginx是否已经编译了RTMP模块。可以通过nginx -V查看已安装的模块,看是否有--with-http_ssl_module和--add-module=../nginx-rtmp-module之类的参数。 如果用户需要重新编译,步骤大概是:下载Nginx源码和nginx-rtmp-module源码,配置编译参数,添加模块,然后make和make install。但需要注意,如果之前通过包管理器安装的,可能需要卸载或者处理依赖问题。 另外,用户可能不知道如何配置nginx.conf来启用RTMP服务。RTMP配置通常放在顶层,设置监听端口1935,application,以及相关的和拉设置。还要考虑HLS切片,存储路径,访问权限等。 还要提醒用户防火墙设置,开放1935端口,检查SELinux是否阻止访问。可能需要配置防火墙规则,比如firewall-cmd --add-port=1935/tcp --permanent,然后重载防火墙。 测试阶段,用户可能需要使用工具如OBS,设置rtmp://服务器IP:1935/live/密钥,然后通过VLC播放器拉测试。需要确保配置正确,路径存在且有正确权限。 可能遇到的问题包括编译错误,模块路径不正确,配置语法错误,端口被占用或防火墙阻止,以及权限问题。需要指导用户查看Nginx的错误日志,帮助排查问题。 用户可能需要详细的步骤,包括安装依赖、下载源码、配置、编译、安装、修改配置文件、重启服务、测试等。同时,还要考虑是否使用TLS加密,是否开启HLS或其他功能,根据需求调整配置。 最后,总结配置步骤,强调关键点,比如模块编译、配置文件和测试方法,确保用户能一步步完成并验证。</think>--- ### **配置 Nginx 支持 RTMP 的完整程** RTMP(Real-Time Messaging Protocol)是 Adobe 开发的实时音视频流传输协议,常用于直播场景。Nginx 通过第三方模块 `nginx-rtmp-module` 支持 RTMP,以下是详细配置步骤: --- #### **1. 安装依赖环境** 确保系统中已安装编译工具和依赖库(以 CentOS 为例): ```bash yum install -y gcc pcre-devel openssl-devel zlib-devel wget git ``` --- #### **2. 下载 Nginx 源码与 RTMP 模块** - **下载 Nginx 源码**: ```bash wget http://nginx.org/download/nginx-1.25.3.tar.gz tar -zxvf nginx-1.25.3.tar.gz cd nginx-1.25.3 ``` - **下载 RTMP 模块源码**: ```bash git clone https://github.com/arut/nginx-rtmp-module.git ``` --- #### **3. 编译并安装 Nginx** 配置编译参数时添加 RTMP 模块: ```bash ./configure \ --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_flv_module \ --with-http_mp4_module \ --add-module=../nginx-rtmp-module make && make install ``` --- #### **4. 配置 RTMP 服务** 编辑 Nginx 配置文件 `/usr/local/nginx/conf/nginx.conf`,在 **全局层** 添加 RTMP 块: ```nginx # 在 http 块外部添加以下内容 rtmp { server { listen 1935; # RTMP 默认端口 chunk_size 4096; # 传输分片大小 application live { live on; # 启用直播模式 record off; # 关闭录制 allow publish all; # 允许所有 allow play all; # 允许所有播放 # 可选:启用 HLS 切片(用于 HTTP ) hls on; hls_path /tmp/hls; # HLS 切片存储路径 hls_fragment 3s; # 切片时长 } } } ``` --- #### **5. 配置 HTTP 访问(可选)** 若需通过 HTTP 访问 HLS ,在 `http` 块中添加: ```nginx server { listen 80; server_name localhost; location /hls { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } root /tmp; # 对应 hls_path 的上级目录 add_header Cache-Control no-cache; } } ``` --- #### **6. 启动 Nginx 并验证** - **启动服务**: ```bash /usr/local/nginx/sbin/nginx ``` - **检查端口监听**: ```bash netstat -tulnp | grep 1935 ``` 预期输出: ```bash tcp 0 0 0.0.0.0:1935 0.0.0.0:* LISTEN PID/nginx ``` --- #### **7. 与拉测试** - **(使用 OBS 或 FFmpeg)**: 地址:`rtmp://服务器IP:1935/live/自定义密钥` 示例(FFmpeg): ```bash ffmpeg -re -i input.mp4 -c:v copy -c:a aac -f flv rtmp://192.168.1.100:1935/live/stream1 ``` - **拉RTMP 或 HLS)**: - RTMP 播放地址:`rtmp://服务器IP:1935/live/stream1` - HLS 播放地址:`http://服务器IP/hls/stream1.m3u8`(需启用 HLS 配置) --- #### **8. 常见问题排查** 1. **端口冲突**: 确保 1935 端口未被其他进程占用。 2. **防火墙拦截**: ```bash # 放行端口(以 firewalld 为例) firewall-cmd --permanent --add-port=1935/tcp firewall-cmd --reload ``` 3. **SELinux 限制(仅限 CentOS/RHEL)**: ```bash # 临时关闭 SELinux setenforce 0 # 或添加规则允许端口 semanage port -a -t rtmp_port_t -p tcp 1935 ``` 4. **查看 Nginx 日志**: ```bash tail -f /usr/local/nginx/logs/error.log ``` --- ### **最终配置示例** 完整 `nginx.conf` 参考: ```nginx user nginx; worker_processes auto; events { worker_connections 1024; } rtmp { server { listen 1935; application live { live on; hls on; hls_path /tmp/hls; hls_fragment 5s; } } } http { server { listen 80; location /hls { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } root /tmp; add_header Cache-Control no-cache; } } } ``` --- ### **总结** - **核心步骤**:编译 Nginx 时集成 `nginx-rtmp-module`,配置 `rtmp` 块定义服务。 - **关键功能**:支持 RTMP /拉、HLS 切片、访问控制。 - **扩展建议**: - 配置 SSL 加密(`rtmp { server { listen 1935 ssl; ... } }`)。 - 使用鉴权模块(如 `nginx-rtmp-module` 的 `on_publish` 回调)。 - 结合 FFmpeg 转码实现多码率适配。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值