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 下。

结果

相关推荐
runing_an_min6 小时前
ffmpeg视频滤镜:网格-drawgrid
ffmpeg·音视频·网格·drawgrid
间彧11 小时前
FFmpeg推流器
ffmpeg
生命几十年3万天13 小时前
ffmpeg常用命令
ffmpeg
qs113798184314 小时前
怎么提取视频里的音频?关于提取视频里音频的几种方法
linux·网络·ffmpeg
cuijiecheng201814 小时前
音视频入门基础:AAC专题(12)——FFmpeg源码中,解码AudioSpecificConfig的实现
ffmpeg·音视频·aac
fensnote1 天前
ffmpeg拉流分段存储到文件-笔记
笔记·ffmpeg
cpp_learners1 天前
Windows环境 ffmpeg 命令使用介绍
windows·ffmpeg·ffmpeg命令
HockerF2 天前
ffmpeg环境
ffmpeg
学前端的小朱3 天前
【视频混剪Demo】FFmpeg的使用【Windows】
windows·ffmpeg·音视频·1024程序员节·更改参数·视频混剪
从后端到QT3 天前
HLS协议之nginx-hls-多码率测试环境搭建
运维·nginx·ffmpeg·音视频·rtmp