RTMP、FFmpeg安装测试

RTMP、FFmpeg安装测试

    • [1.使用 Docker 部署 RTMP 服务](#1.使用 Docker 部署 RTMP 服务)
      • [1.拉取带有 RTMP 模块的 NGINX 镜像:](#1.拉取带有 RTMP 模块的 NGINX 镜像:)
      • 2.运行容器
    • [2. 防火墙放行](#2. 防火墙放行)
    • 3.windows安装ffmpeg
    • [4.常用的 FFmpeg 推流和拉流命令](#4.常用的 FFmpeg 推流和拉流命令)
      • 1.推流命令
        • [1. 推流到 RTMP 服务器](#1. 推流到 RTMP 服务器)
        • [2. 推摄像头实时视频到 RTMP](#2. 推摄像头实时视频到 RTMP)
        • [3. 推摄像头+麦克风到 RTMP](#3. 推摄像头+麦克风到 RTMP)
      • 2.拉流命令
        • [1. 拉取 RTMP 流并播放](#1. 拉取 RTMP 流并播放)
        • [2. 拉取 RTMP 流并保存为文件](#2. 拉取 RTMP 流并保存为文件)
        • [3.拉取 HTTP/HLS 流](#3.拉取 HTTP/HLS 流)
          • [1. 播放 HLS(HTTP Live Streaming)流](#1. 播放 HLS(HTTP Live Streaming)流)
          • [2. 保存 HLS 流到文件](#2. 保存 HLS 流到文件)
      • 3.其他常用推流命令
        • [1. 推流到 YouTube](#1. 推流到 YouTube)
        • [2. 推流到 Facebook Live](#2. 推流到 Facebook Live)
      • 4.常用参数说明
    • 5.测试推送
    • 结果

1.使用 Docker 部署 RTMP 服务

1.拉取带有 RTMP 模块的 NGINX 镜像:

bash 复制代码
docker pull tiangolo/nginx-rtmp

2.运行容器

bash 复制代码
docker run -d -p 1935:1935 -p 8080:80 tiangolo/nginx-rtmp

注:此方式安装不会影响非docker下的NGINX

2. 防火墙放行

bash 复制代码
# 允许访问 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 服务器:

bash 复制代码
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 服务器:

bash 复制代码
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 服务器:

bash 复制代码
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 流:

bash 复制代码
ffplay rtmp://<server-ip>/live/stream
2. 拉取 RTMP 流并保存为文件

将 RTMP 流保存为本地视频文件:

bash 复制代码
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 流:

bash 复制代码
ffplay http://<server-ip>/hls/stream.m3u8
2. 保存 HLS 流到文件

将 HLS 流保存为本地文件:

bash 复制代码
ffmpeg -i http://<server-ip>/hls/stream.m3u8 -c copy output.ts

output.ts: 将 HLS 保存为 TS 文件。

3.其他常用推流命令

1. 推流到 YouTube

将视频流推送到 YouTube Live:

bash 复制代码
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
bash 复制代码
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

bash 复制代码
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

bash 复制代码
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 下。

结果

相关推荐
GeniuswongAir7 小时前
苹果电脑上启动一个 RTSP 推流,用来做测试
ffmpeg
Benny的老巢10 小时前
n8n工作流通过Execute Command用FFmpeg处理音频,报错 stderr maxBuffer length exceeded的解决方案
ffmpeg·音频合成·n8n·n8n工作流·execute command
七夜zippoe2 天前
Spring Data JPA原理与实战 Repository接口的魔法揭秘
java·ffmpeg·事务·jpa·repository
Benny的老巢2 天前
n8n工作流中FFmpeg 视频截取失败排查:文件路径和参数顺序错误解决方案
chrome·ffmpeg·音视频
RockWang.3 天前
【配置】FFmpeg配置环境ubuntu踩坑记录。
ffmpeg
王者鳜錸3 天前
Java使用FFmpeg获取音频文件时长:完整实现与原理详解
java·开发语言·ffmpeg·音频时长
桃杬3 天前
用现代 C++ 封装 FFmpeg:从摄像头采集到 H.264 编码的完整实践
c++·ffmpeg·h.264
cvcode_study4 天前
FFmpeg 工具基础
ffmpeg
1nv1s1ble4 天前
记录一个`ffmpeg`的`swscale`库crash的例子
ffmpeg
CodeOfCC4 天前
C++ 实现ffmpeg解析hls fmp4 EXT-X-DISCONTINUITY并支持定位
开发语言·c++·ffmpeg·音视频