OBS+Nginx+VLC推拉流
概述
推拉流分为推流和拉流。推流就是将client端的视频画面推送到流媒体服务器;拉流就是另外一个client端从流媒体服务器获取视频画面。
本文中,使用OBS软件作为推流客户端,使用Nginx作为流媒体服务器,使用VLC作为拉流客户端。
整个推拉流过程:
- 流媒体服务设置推拉流url,推流和拉流使用同一个url
- OBS获取摄像头画面,并推送到推拉流url
- VLC串流推拉流url
- OBS这边获取到什么画面,VLC就可以看到什么画面,大概有2-4s延迟
环境准备
本文用到了两个设备:
- CentOS:安装Nginx,作为流媒体服务器
- Windows11:安装有OBS和VLC,既作为推流客户端,也作为拉流客户端
安装Nginx
nginx本身不可以作为流媒体服务器使用,需要借助rtmp模块。此模块属于非默认安装的功能,需要编译安装。
可参考:https://www.cnblogs.com/Naylor/p/18070047
安装OBS
安装VLC
操作步骤
Nginx添加rtmp配置
前提需要先安装了 nginx-rtmp-module 模块
rtmp配置和http配置并列,本文放到了 /usr/local/nginx/conf/nginx.conf 最后
rtmp {
server {
listen 1935; #监听的端口
chunk_size 4000;
application hls { #rtmp推流请求路径
live on;
}
}
}
这里的hls是作为整个流媒体服务器的端点,并不是某一个推拉流的端点。我们可以同时开启多个推拉流,比如 :
- rtmp://192.168.1.xxx:1935/hls/room1
- rtmp://192.168.1.xxx:1935/hls/default
- rtmp://192.168.1.xxx:1935/hls/test
使用OBS推流
OBS推流流程分为两个部分:
- 设置推流来源
- 设置推流地址、音视频参数等等
设置推流来源
本文设置的来源有两个:笔记本摄像头和播放笔记本硬盘中一个文件夹里面的图片
画面由图片和摄像头画面合成而来,图片每2s会切换,就像幻灯片一样。
设置推流地址
本文简单起见,仅设置了推流地址,没有对音视频及其它配置做修改,全部使用默认
- 服务:自定义
- 服务器:流媒体服务端点,rtmp://192.168.1.xxx:1935/hls
- 推流码:home。推流端点,这个值用来唯一区分某一个直播间,可以任意定义,拉流的时候将这个值拼接到rtmp://192.168.1.xxx:1935/hls后面就可以。推拉流端点需要保持一致
开始直播
如果设置都正确,此时可以点击开始直播按钮进行推流了。
推流完整地址:rtmp://192.168.1.xxx:1935/hls/home
使用VLC拉流
VLC--媒体--打开网络串流,然后输入拉流地址
rtmp://192.168.1.xxx:1935/hls/home
拉流地址就是推流地址,它们一一对应,如果一切正常将可以看到合成后的画面了。
附图
https://img2024.cnblogs.com/blog/718864/202403/718864-20240313105213077-577164247.png
https://img2024.cnblogs.com/blog/718864/202403/718864-20240313105212960-709759029.png
https://img2024.cnblogs.com/blog/718864/202403/718864-20240313105213953-1808463517.png