Windows本地搭建rtmp推流服务

前言

开发时偶尔需要使用rtmp直播流做视频流测试,苦于网上开源的rtmp视频流都已经失效,无奈只好尝试在本地自己搭建一个rtmp的推流服务,方便测试使用。

一、工具准备

  1. Nginx:使用nginx-rtmp-win64
  2. 推流工具FFmpeg:官方下载地址
  3. 拉流工具VLC:下载地址

二、搭建说明

1. Nginx的安装使用

做rtmp推流服务的nginx需要包含有rtmp模块,官方的Nignx中没有包含rtmp模块,需要自行下载rtmp模块并安装编译。上面的Nginx版本已经包含了rtmp模块,无需自己重新编译。

  • 下载nginx-rtmp-win64的zip包,解压到本地文件夹中,或者通过git直接拉取到本地。
  • 修改配置文件。打开conf文件夹下的nginx.conf文件。在文件中添加rtmp配置块,可放在http配置块的上面。
rtmp {           
     server {                     
         listen 1935;         
         application live { // live是推流路径的名字              
             live on;         
         }    
     }  
} 
  • 保存配置文件,并启动Nginx。在命令行中输入
start nginx.exe
  • Windows下Nginx的启动、停止等命令汇总
// 1.启动  
start nginx.exe  
nginx.exe // 这种会让cmd窗口一直处于执行中,不能进行其他命令操作  
// 2.停止  
nginx.exe -s stop // 快速停止nginx,可能不保存相关信息;  
nginx.exe -s quit // quit是完整有序的停止nginx,并保存相关信息  
// 3.重新载入Nginx  
nginx.exe -s reload  
// 4.重新打开日志文件  
nginx.exe -s reopen  
// 5.查看Nginx版本  
nginx.exe -v
  • 打开浏览器输入“127.0.0.1”查看nginx是否启动成功。能看到下面的内容即nginx已经启动成功。

2. FFmpeg的安装使用

  • 从FFmped官网下载FFmpeg

  • 下载后在bin文件夹下找个三个exe文件

  • 接下来编写一个简单的批处理脚本,使用ffmpeg做推流。
    • 首先将要推流的视频资源放到ffmpeg.exe的同级目录下,然后创建一个bat文件。

  • 使用编辑器打开批处理文件,写入如下的批处理命令
ffmpeg -re -stream_loop -1 -i .\test.mp4 -vcodec libx264 -acodec aac -f flv  rtmp://127.0.0.1:1935/live/hls
    • -stream_loop:设置输入流的循环次数,-1表示一直循环,0表示不循环。因为我的测试视频较短,故设置一直循环。
    • -i:设置输入流
    • -vcodec:设置视频编解码器
    • -acodec:设置音频编解码器
    • "rtmp://127.0.0.1:1935/live/hls":
      • 127.0.0.1:1935:即nginx的服务器地址及端口,开始推流时要先运行nginx服务器。
      • live:是nginx中配置的推流的路径
      • hls:是自定义的推流地址,拉流时加上此地址即可。
  • 编写好后,在控制台中或者双击启动此批处理。

3. 使用VLC做拉流测试

  • 从官网下载安装VLC

  • 安装后启动,点击媒体->打开网络串流

  • 输入我们使用nginx创建的推流服务地址
rtmp://127.0.0.1:1935/live/hls

  • 验证推流成功

由于是本地推流,拉流地址中的127.0.0.1也可以使用localhost代替。可能偶尔会出现拉流在播放但是黑屏的情况,此时可以停掉批处理的推流服务,重新推流试试。重开后拉流播放器也需要重新拉流。

4. 使用手机推流测试

手机连接电脑分享的热点,把rtmp中的ip换成电脑的ip即可。

Spring Boot 本身并不提供直接进行 RTMP 推流的功能,但可以通过调用相关的第三方库来实现。下面是一个使用 JavaCV 库实现将本地 MP4 文件推流RTMP 服务器的示例代码: ```java import org.bytedeco.javacv.FFmpegFrameGrabber; import org.bytedeco.javacv.FFmpegFrameRecorder; public class RtmpPushService { // 推流地址 private String rtmpUrl; // 视频文件路径 private String videoFilePath; // 视频帧率 private int frameRate; // 视频码率 private int videoBitrate; // 音频码率 private int audioBitrate; public RtmpPushService(String rtmpUrl, String videoFilePath, int frameRate, int videoBitrate, int audioBitrate) { this.rtmpUrl = rtmpUrl; this.videoFilePath = videoFilePath; this.frameRate = frameRate; this.videoBitrate = videoBitrate; this.audioBitrate = audioBitrate; } public void push() throws Exception { FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(videoFilePath); grabber.start(); FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(rtmpUrl, grabber.getImageWidth(), grabber.getImageHeight()); recorder.setFrameRate(frameRate); recorder.setVideoBitrate(videoBitrate); recorder.setAudioBitrate(audioBitrate); recorder.start(); while (true) { recorder.record(grabber.grab()); } } } ``` 在上述示例代码中,我们使用了 JavaCV 库来读取本地 MP4 文件,并将读取到的视频帧推流至指定的 RTMP 服务器。可以通过调整 `frameRate`、`videoBitrate` 和 `audioBitrate` 参数来控制推流的视频质量和网络带宽占用情况。在实际使用时,还需要根据具体情况调整推流参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值