贝博恩创新科技网

rtmpdumphelper怎么用?新手入门教程在此!

第一部分:基础概念与工具介绍

什么是 RTMP?

RTMP (Real-Time Messaging Protocol) 是由 Adobe 公司开发的一个用于音视频数据传输的协议,它因其低延迟的特性,被广泛用于直播和视频点播,虽然现在 HLS (HTTP Live Streaming) 更为主流,但很多直播源和内部系统仍在使用 RTMP。

rtmpdumphelper怎么用?新手入门教程在此!-图1
(图片来源网络,侵删)

rtmpdump 工具集

rtmpdump 不是一个单一程序,而是一个工具集,包含以下几个核心命令:

  • rtmpdump: 核心工具,用于从 RTMP 服务器下载视频流或上传视频流进行直播。
  • rtmpsrv: 一个简单的 RTMP 服务器,用于接收流,主要用于反向连接,即从客户端(如 OBS 推流软件)拉取流,并将其保存或转发。
  • rtmpgw: 一个更通用的网关,可以将 RTMP 流转换为其他格式(如 HLS)或转发到其他服务器。
  • rtmpsuck: 一个“蜜罐”服务器,用于捕获网络上未经授权的 RTMP 流(用于安全审计,不推荐用于抓取他人受版权保护的内容)。

本教程将重点介绍最常用的 rtmpdumprtmpsrv


第二部分:环境准备

在 Linux (如 Ubuntu/Debian) 系统上,安装非常简单。

# 对于 Debian/Ubuntu 系统
sudo apt-get update
sudo apt-get install rtmpdump
# 对于 CentOS/RHEL 系统
sudo yum install rtmpdump

安装完成后,你可以通过以下命令检查是否安装成功:

rtmpdumphelper怎么用?新手入门教程在此!-图2
(图片来源网络,侵删)
rtmpdump -V
# 或者
rtmpsrv -h

如果看到版本信息或帮助信息,说明安装成功。


第三部分:核心教程 - rtmpdump 下载流

rtmpdump 的基本用法是通过解析一个 URL 来获取流,这个 URL 通常包含播放地址、应用名、流名以及一些必要的参数(如 swfVfypageUrl 等)。

基本语法

rtmpdump -r <播放地址> -a <应用名> -y <流名> -o <输出文件>
  • -r-url: RTMP 服务器的 URL,rtmp://example.com/live
  • -a-app: 应用名称,live
  • -y-playpath: 流的名称或路径,stream_key
  • -o-out: 输出文件名,output.flv

实战案例:解析一个典型的直播流 URL

假设你有一个直播流 URL,它看起来像这样(这是一个常见的格式,但具体参数因网站而异):

rtmp://live.example.com/live/playlist.m3u8

rtmpdumphelper怎么用?新手入门教程在此!-图3
(图片来源网络,侵删)

这个 URL 通常需要被分解成 rtmpdump 能理解的参数,让我们一步步来。

步骤 1:分析 URL

  • 服务器地址: rtmp://live.example.com
  • 应用名: /live
  • 流名: playlist.m3u8 (有时候流名就是 .m3u8 文件本身)

步骤 2:尝试基本命令

# 尝试使用基本参数
rtmpdump -r "rtmp://live.example.com/live" -a "live" -y "playlist.m3u8" -o "output.flv"

如果这个命令成功,你会看到 rtmpdump 开始连接并下载流,如果失败,它通常会提示缺少某些参数(如 swfVfypageUrl)。

步骤 3:处理需要验证的流 (swfV 和 pageUrl)

很多网站为了防止盗链,会要求播放器(一个 SWF 文件)来自一个特定的页面,这时就需要提供 swfV (SWF URL) 和 pageUrl (播放器所在的页面 URL)。

  • -W-swfV: SWF 文件的 URL。
  • -p-pageUrl: 包含播放器的网页 URL。

如何找到这些 URL?

  • 使用浏览器开发者工具 (F12):
    1. 打开目标直播网页。
    2. 按 F12 打开开发者工具,切换到 "网络" (Network) 标签页。
    3. 勾选 "保留日志" (Preserve log)。
    4. 刷新页面,在筛选器中输入 .swfrtmp
    5. 你应该能找到一个 .swf 文件的请求,复制其 "完整网址" (Full URL)。
    6. 复制当前直播页面的 URL。

步骤 4:组合所有参数

假设你找到了:

  • SWF URL: http://example.com/player.swf
  • Page URL: http://example.com/live/stream.html

组合一个更完整的命令:

rtmpdump \
-r "rtmp://live.example.com/live" \
-a "live" \
-y "playlist.m3u8" \
-o "my_live_stream.flv" \
-W "http://example.com/player.swf" \
-p "http://example.com/live/stream.html"

步骤 5:处理需要 Token 的流

有些流需要动态的 Token 或安全密钥,这些 Token 通常是通过 JavaScript 在页面上动态生成的。rtmpdump 无法直接处理这种复杂逻辑,因此需要更高级的方法,

  • 使用 youtube-dlyt-dlp: 这些工具内置了大量的解析器,能自动处理很多网站的复杂认证。
  • 使用浏览器插件: 如 "Stream Recorder" 等可以帮你直接在浏览器中捕获和保存流。

第四部分:进阶教程 - rtmpsrv 反向连接抓取

这是 rtmpdump 最强大的功能之一,尤其适用于那些 URL 参数非常复杂、难以手动解析的直播流,它的原理是:让直播软件(如 OBS)主动推流,rtmpsrv 作为服务器接收这个流,并告诉你它收到的真实参数,然后你再用这些参数去下载流。

rtmpsrv 的工作流程

  1. 启动 rtmpsrv,它会监听一个端口。
  2. rtmpsrv 的监听地址(通常是 localhost:1935)填入 OBS 的“服务器”设置中。
  3. 在 OBS 中点击“开始推流”。
  4. OBS 会向 rtmpsrv 发送一个连接请求和流信息。
  5. rtmpsrv 终止连接,并在终端打印出所有用于下载该流的完整 rtmpdump 命令。
  6. 你复制这个命令,稍后就可以用来下载或录制这个流。

实战案例

步骤 1:启动 rtmpsrv

打开一个终端,运行:

rtmpsrv

你会看到类似下面的输出,表示服务器正在监听:

RTMP Server started on port 1935

步骤 2:配置 OBS (或其他推流软件)

  1. 打开 OBS。
  2. 进入 “设置” -> “推流”。
  3. 服务选择 “自定义”。
  4. 服务器填入:rtmp://localhost/live (这里的 live 是一个占位符应用名,可以随便填)。
  5. 推流密钥填入:any_key (同样,可以随便填,rtmpsrv 不会用它)。
  6. 点击 “开始推流”。

步骤 3:获取 rtmpdump 命令

回到运行 rtmpsrv 的终端,你会看到 OBS 连接上来后,rtmpsrv 会打印出类似这样的信息:

INFO: Connected ...
INFO: Handshaking ...
INFO: Got an invoke:
connect app=live flashVer=FMLE/3.0 (compatible; FMSc/1.0) tcUrl=rtmp://localhost/playpath=stream_key
INFO: Client connected.
INFO: Handshaking ...
INFO: Got an invoke:
createStream media=live
INFO: Client connected.
INFO: Handshaking ...
INFO: Got an invoke:
play stream=0
...

最重要的是,在终端的末尾,rtmpsrv 会为你生成一个可以直接使用的 rtmpdump 命令,它通常看起来像这样:

rtmpdump -r "rtmp://real.server.address/live" -a "live" -y "stream_key" -o "output.flv" -W "http://example.com/player.swf" -p "http://example.com/live/stream.html"

步骤 4:停止 OBS 并下载流

  1. 在 OBS 中点击 “停止推流”。
  2. 你有了正确的命令,复制它,并在一个新的终端中运行它来录制流:
# 将上面生成的命令粘贴到这里运行
rtmpdump -r "rtmp://real.server.address/live" -a "live" -y "stream_key" -o "my_recorded_stream.flv"

第五部分:常用参数速查表

参数 简写 描述
-url -r RTMP 服务器 URL
-app -a 应用名称
-playpath -y 流名称或路径
-out -o 输出文件名
-swfV -W SWF 播放器的 URL
-pageUrl -p 包含播放器的网页 URL
-v 显示详细输出
-q 安静模式,不显示进度条
-e 下载后退出,不等待流结束
-k 关键帧间隔,用于生成更好的索引
-A 将流作为音频下载
-V 显示版本信息

第六部分:常见问题与注意事项

  1. 版权和法律问题:请务必尊重内容创作者的版权,仅用于学习、研究或录制你有权访问的内容,不要用于非法传播或盗版。
  2. 流加密:如果流是加密的(如使用 DRM),rtmpdump 无法处理。
  3. HLS 流 (.m3u8)rtmpdump 主要处理 RTMP 协议,对于 HLS 流,应使用 ffmpeg 或专门的 HLS 下载工具(如 yt-dlp)。
  4. 网站更新:网站可能会随时更改其流媒体协议或参数,导致之前的方法失效,这是猫鼠游戏,需要持续关注和调整。
  5. 为什么我的命令失败了?
    • 检查 URL、应用名、流名是否正确。
    • 检查是否需要 swfVpageUrl
    • 检查网络连接是否正常。
    • 检查目标服务器是否可达。

希望这份详细的教程能帮助你掌握 rtmpdump 的使用!

分享:
扫描分享到社交APP
上一篇
下一篇