这里写自定义目录标题
- 1 Nginx-RTMP服务器搭建
- 1.1 下载Nginx
- 1.2 下载Nginx的RTMP扩展包
- 1.3 配置Nginx
- 1.4 启动Nginx
- 1.5 查看Nginx状态
- 2 FFmpeg推流
- 2.1 下载FFmpeg
- 2.2 配置FFmpeg环境变量
- 2.3 验证FFmpeg配置
- 3 视频推流
- 3.1 OBS推流
- 3.2 FFmpeg推流
- 4 VLC拉流
- 4.1 VLC
- 4.2 打开网络串流配置,获取视频流
- 4.3 视频流URL
1 Nginx-RTMP服务器搭建
1.1 下载Nginx
Nginx下载链接
该版本是带RTMP模块且编译过的Nginx版本,解压完成,可以直接使用。
1.2 下载Nginx的RTMP扩展包
Nginx的RTMP扩展包下载链接
下载完成后解压,将解压后的文件夹放入Nginx的解压目录下。
1.3 配置Nginx
在Nginx解压目录中的conf目录下,新建一个文件nginx.conf
,内容如下:
worker_processes 1;
events {
worker_connections 1024;
}
#RTMP服务
rtmp {
server {
listen 1935; #监听端口
chunk_size 4096; #数据传输块大小
application live{ #创建名为"live"的应用
live on;
}
application hls { # 创建rtmp应用hls
live on; # 当路径匹配时,开始播放
#HLS协议进行m3u8实时直播.如果是http-flv不需要配置下面的
wait_key on;#保护TS切片
hls on; #实时回访
hls_nested on;#每个流都自动创建一个文件夹
hls_path C:/tmp/hls; #媒体块ts的位置
hls_fragment 5s; #每个ts文件为5s的样子
hls_playlist_length 30s; #保存m3u8列表长度时间,默认是30秒,可考虑三小时10800秒
hls_cleanup on; #是否删除列表中已经没有的媒体块TS文件,默认是开启
hls_continuous on; #连续模式
}
}
}
#HTTP服务,可以通过浏览器访问 http://localhost:9091/stat 查看服务器状态(9091为你配置的端口号,可以自由设置)
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 9091;
server_name localhost;
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root ./nginx-rtmp-module-1.2.2/; #rtmp拓展包目录
}
location / {
root html;
index index.html index.htm;
add_header Access-Control-Allow-Origin *; # 配置跨域
add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
}
location /control {
rtmp_control all;
}
location /rtmp-publisher {
root nginx-rtmp-module/test;
}
#加入hls支持
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
#或 application/x-mpegURL
video/mp2t ts;
}
alias C:/tmp/hls; #视频流文件目录(自己创建)
expires -1;
add_header Cache-Control no-cache; #跨域支持
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
注意
- 端口号可以自行配置,有可能你电脑9091已经被使用了,所以需要换一个。
alias
属性也需要自行设置,创建一个暂存视频流文件目录
1.4 启动Nginx
使用管理员身份打开命令行界面,进入Nginx目录下,输入nginx.exe -c conf\nginx.conf
启动后,可以在任务管理器中看到Nginx进程
Nginx常用命令:
nginx.exe -s stop //快速终止服务器,可能不保存相关信息
nginx.exe -s quit //完整有序停止服务器,保存相关信息
nginx.exe -s reload //重新载入Nginx,当配置信息修改,需要重新载入这些配置时使用此命令
1.5 查看Nginx状态
在浏览器地址栏输入http://localhost:9091/stat
(如果改变了端口,记得改变访问链接端口号),可以看到服务器状态信息
2 FFmpeg推流
2.1 下载FFmpeg
下载FFmpeg
选择一个版本下载
下载解压后在bin
目录中找到这三个exe文件,复制路径即可。
2.2 配置FFmpeg环境变量
找到我的电脑→右击→属性→选择【高级系统设置】–>弹出框中选择【环境变量-】→找到【path】双击→弹出框中选择 【新建】→将复制的bin文件夹的路径粘贴进来点击保存
2.3 验证FFmpeg配置
打开命令行界面输入ffmpeg –version
,如果出现FFmpeg版本说明配置成功。
3 视频推流
3.1 OBS推流
OBS下载地址
分为四步:
-
添加场景
软件默认有一个场景,我们可以不用再去添加,直接去步骤2添加来源即可 -
添加来源
可以添加显示器捕获、视频捕获、音频捕获、媒体源等,此处根据需要进行选择。
将本地视频作为媒体源进行推流
-
推流设置
- 服务:自定义
- 服务器: rtmp://127.0.0.1:1935/live
- 串流秘钥: 123456
-
开始推流
点击开始推流按钮
-
查看Nginx服务器状态
打开浏览器输入http://localhost:9091/stat
可以看到推流信息
推流的视频会暂存在Nginx配置的暂存地址中,123456
是OBS中配置的串流密码。
3.2 FFmpeg推流
ffmpeg -re -stream_loop -1 -i ./flow1.mp4 -vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -q 10 rtmp://127.0.0.1:1935/hls/flow1
-re
: 使 ffmpeg 在读取输入文件时模拟实时流。这意味着它将以恒定的速度发送数据包,就像它在实时接收数据一样。-stream_loop -1
: 这个选项让 ffmpeg 无限循环播放输入文件。如果没有这个选项,ffmpeg 只会播放一次源文件然后停止。-i ./flow1.mp4
: 指定输入文件的位置和名称,在这里就是当前目录下的 flow1.mp4 文件。-vcodec libx264
: 设置输出视频编解码器为 H.264,使用的是 x264 库来编码视频。-vprofile baseline
: 设置视频的配置文件为 Baseline Profile,这通常用于兼容性要求较高的场景,如移动设备或一些老的硬件。-acodec aac
: 设置音频编解码器为 AAC(Advanced Audio Coding)。-ar 44100
: 设置音频采样率为 44.1 kHz,这是 CD 音质的标准采样率。-strict -2
: 允许使用所有 AAC 规范允许的工具,即使某些工具可能不完全符合 MPEG-4 标准。-ac 1
: 设置输出音频的声道数为单声道(1 通道)。-f flv
: 设置输出格式为 FLV(Flash Video),这是一种常用的流媒体格式。-q 10
: 设置视频质量等级为 10,数值范围通常是 1 到 31,数值越小质量越高。rtmp://127.0.0.1:1935/hls/flow1
: 这是 RTMP 推流的目标地址,表示将流媒体数据发送到本地主机的 1935 端口上的 /hls/flow1 路径。(这就是文件暂存在Nginx配置的目录的flow1文件夹中)
输入FFmpeg命令:
查看Nginx服务器情况:
推流视频暂存文件位置:
4 VLC拉流
4.1 VLC
VLC下载
下载按照后就可以直接使用了!
4.2 打开网络串流配置,获取视频流
配置VLC的网络URL:rtmp://127.0.0.1:1935/hls/flow1
rtmp://
: 这是一个协议前缀,表明接下来的部分是一个 RTMP 地址。127.0.0.1
: 这是 IP 地址,指代本地主机(即运行应用程序的同一台计算机)。你可以用实际服务器的 IP 地址或域名替换这个地址。1935
: 这是端口号,RTMP 流服务通常运行在这个端口上。不过,根据实际服务器的配置,这个端口号也可以是其他数字。/hls/
: 这是应用程序名,用来标识 RTMP 服务器上运行的应用程序或服务。(就是Nginx配置的hls)flow1
: 这是流名称或流键,用来唯一标识从客户端发送到服务器的流或从服务器接收的流。
点击播放,即可获取推流视频。
4.3 视频流URL
通过Http链接访问视频流
- http://127.0.0.1:9091/hls/flow1/index.m3u8