当前位置: 首页 > article >正文

RTMP、FFmpeg安装测试

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

结果

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3629de0aa69c4a809c2fea5c8dd78b7e.png


http://www.kler.cn/news/359955.html

相关文章:

  • Java中巧用 parseInt 实现高效数值变换,进制转换
  • 13. Request请求与Response响应
  • 后端绘制二维码图片(支持带Logo)
  • Android中的内存泄漏及其检测方式
  • 配置Typescript环境
  • git禁用 SSL 证书验证
  • 嵌软面试一百问(持续更新中)
  • 二叉树遍历(前序、中序、后续)
  • OpenCV高级图形用户界面(14)交互式地选择一个或多个感兴趣区域函数selectROIs()的使用
  • 【大模型实战篇】大模型分词算法Unigram及代码示例
  • 【进阶OpenCV】 (11)--DNN板块--实现风格迁移
  • 电动汽车嵌入式软件开发过程中的难题有哪些?
  • JavaGuide(10)
  • commonjs和esmodule的导入导出细节
  • opencv实战项目(三十二):opencv汽车360全景影像制作
  • 【嵌入式软件-STM32】STM32外设
  • 常用数据库获取表,视图,列,索引信息
  • AndroidStudio移动开发:使用Service播放音乐【步骤】
  • 【分布式微服务云原生】《Redis RedLock 算法全解析:应对时钟漂移与网络分区挑战》
  • Python异常检测-3Sigma