RTMP、FFmpeg安装测试
- 1.使用 Docker 部署 RTMP 服务
- 1.拉取带有 RTMP 模块的 NGINX 镜像:
- 2.运行容器
- 2. 防火墙放行
- 3.windows安装ffmpeg
- 1. [下载链接](https://ffmpeg.org//download.html)
- 2.解压
- 3.环境变量配置
- 4.常用的 FFmpeg 推流和拉流命令
- 1.推流命令
- 1. 推流到 RTMP 服务器
- 2. 推摄像头实时视频到 RTMP
- 3. 推摄像头+麦克风到 RTMP
- 2.拉流命令
- 1. 拉取 RTMP 流并播放
- 2. 拉取 RTMP 流并保存为文件
- 3.拉取 HTTP/HLS 流
- 1. 播放 HLS(HTTP Live Streaming)流
- 2. 保存 HLS 流到文件
- 3.其他常用推流命令
- 1. 推流到 YouTube
- 2. 推流到 Facebook Live
- 4.常用参数说明
- 5.测试推送
- 1.打开cmd
- 2.再打开一个cmd
- 结果
1.使用 Docker 部署 RTMP 服务
1.拉取带有 RTMP 模块的 NGINX 镜像:
docker pull tiangolo/nginx-rtmp
2.运行容器
docker run -d -p 1935:1935 -p 8080:80 tiangolo/nginx-rtmp
注:此方式安装不会影响非docker下的NGINX
2. 防火墙放行
# 允许访问 8080 端口
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT# 允许访问 1935 端口
sudo iptables -A INPUT -p tcp --dport 1935 -j ACCEPT
3.windows安装ffmpeg
1. 下载链接
2.解压
用winRAR解压就行
3.环境变量配置
path 里面加ffmpeg 下面bin的路径(可有可无,只不过是当前文件夹下运行,还是所有文件下运行cmd而已)
4.常用的 FFmpeg 推流和拉流命令
1.推流命令
推流一般是将本地媒体文件或设备采集的数据推送到流媒体服务器(如 RTMP、HLS 等)。
1. 推流到 RTMP 服务器
将本地视频文件推送到 RTMP 服务器:
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://<server-ip>/live/stream
-re: 按原视频的帧率实时读取文件(适用于推流)。
-i input.mp4: 指定输入文件。
-c copy: 不重新编码,直接复制视频流和音频流。
-f flv: 输出格式为 FLV(RTMP 常用格式)。
rtmp:///live/stream: RTMP 服务器的地址。
2. 推摄像头实时视频到 RTMP
将本地摄像头视频流实时推送到 RTMP 服务器:
ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 -preset veryfast -f flv rtmp://<server-ip>/live/stream
-f dshow: 指定视频采集设备(Windows 系统)。 video=“Integrated Camera”: 指定摄像头名称。
-vcodec libx264: 使用 H.264 视频编码。
-preset veryfast: 设置编码速度,veryfast 可以减少延迟。
3. 推摄像头+麦克风到 RTMP
同时推送摄像头和麦克风音视频到 RTMP 服务器:
ffmpeg -f dshow -i video="Integrated Camera":audio="Microphone" -vcodec libx264 -acodec aac -f flv rtmp://<server-ip>/live/stream
audio=“Microphone”: 指定音频设备(麦克风)。
2.拉流命令
拉流指从流媒体服务器获取数据并播放或存储。
1. 拉取 RTMP 流并播放
使用 FFplay 播放 RTMP 流:
ffplay rtmp://<server-ip>/live/stream
2. 拉取 RTMP 流并保存为文件
将 RTMP 流保存为本地视频文件:
ffmpeg -i rtmp://<server-ip>/live/stream -c copy output.mp4
-i: 指定输入流 URL。
-c copy: 直接复制视频和音频流,不重新编码。 output.mp4: 保存为 MP4 文件。
3.拉取 HTTP/HLS 流
1. 播放 HLS(HTTP Live Streaming)流
通过 FFplay 播放 HLS 流:
ffplay http://<server-ip>/hls/stream.m3u8
2. 保存 HLS 流到文件
将 HLS 流保存为本地文件:
ffmpeg -i http://<server-ip>/hls/stream.m3u8 -c copy output.ts
output.ts: 将 HLS 保存为 TS 文件。
3.其他常用推流命令
1. 推流到 YouTube
将视频流推送到 YouTube Live:
ffmpeg -re -i input.mp4 -c:v libx264 -b:v 3000k -c:a aac -strict -2 -f flv rtmp://a.rtmp.youtube.com/live2/<stream-key>
-b:v 3000k: 设置视频码率为 3000kbps。 : 替换为 YouTube 的推流密钥。
2. 推流到 Facebook Live
ffmpeg -re -i input.mp4 -c:v libx264 -preset fast -maxrate 1500k -bufsize 3000k -f flv rtmp://live-api-s.facebook.com:80/rtmp/<stream-key>
4.常用参数说明
-re: 实时推流,按视频帧率发送数据。
-f flv: 输出格式为 FLV(RTMP 协议常用)。
-c:v libx264: 使用 H.264 编码器。
-c:a aac: 使用 AAC 音频编码。
-b:v 3000k: 视频码率。
-preset veryfast: 视频编码速度,ultrafast 到 veryslow,编码越慢质量越好。 这些命令覆盖了推流、拉流以及不同协议的基本操作,适用于各种流媒体服务器和平台。
5.测试推送
1.打开cmd
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://192.168.1.11/live/stream
以下是对各个参数的解释:
-re: 这个参数用于实时(real-time)读取输入文件。它让 FFmpeg 以与原始素材相同的速率发送数据,而不是尽快处理和发送。通常用于推流场景,以确保推流的速度不会超过实际播放速度。 (没有这个参数,FFmpeg
会尽可能快地处理输入文件,可能导致视频播放过快。)-i input.mp4: 指定输入文件为 input.mp4。这个视频文件将作为推流源。
-c copy: 这个参数指示 FFmpeg 直接复制输入视频和音频的编解码数据,而不对其重新编码(即 “copy” 模式)。这样做可以节省时间和 CPU 资源,因为它不需要进行重新压缩和编码处理。
-f flv: 指定输出格式为 FLV(Flash Video),这是 RTMP 协议常用的封装格式。RTMP 协议最常用于流媒体传输,特别是在像 YouTube、Twitch 这样的直播平台上,FLV 格式是常用的推流格式。
rtmp://192.168.1.11/live/stream: 这是推流的目标 RTMP 服务器的 URL。
rtmp:// 是协议头,表示使用 RTMP 协议。
192.168.1.11 是服务器的 IP 地址。 /live/ 是流的应用名称,可以被服务器配置。 /stream 是具体流的名称,也就是推流的 ID。
2.再打开一个cmd
ffplay rtmp://192.168.1.11/live/stream
命令解释:
ffplay: FFplay 是 FFmpeg 中的播放器工具,用来播放视频和音频流。
rtmp://192.168.1.11/live/stream: 这是 RTMP 流的 URL,表示视频流源位于 RTMP 服务器的地址 192.168.1.11,在路径 /live/stream 下。