"method DESCRIBE failed: 401 Unauthorized" 在 Ffmpeg 中,但 VLC 接受完全相同的 RTSP URL

"method DESCRIBE failed: 401 Unauthorized" in Ffmpeg, yet VLC accepts the exact same RTSP URL

我有一个包含用户名和密码(即 rtsp://username:password@server:554/path 形式)的 RTSP URL,这在 VLC 中有效,但将其用作 Ffmpeg 的输入,我回来了上述 DESCRIBE 错误并中止。

我想知道它是否是我得到的 Ffmpeg 版本,但我通过 Docker (alfg/ffmpeg:latest) 使用了一个新版本,结果是一样的。

有什么我必须做的吗,也许我必须向 Ffmpeg 提供一些额外的 information/hint,让它接受凭据并通过 DESCRIBE?或者如果问题出在 DESCRIBE 位上,我能否让它跳过它(可能通过手动提供所有源流详细信息)以便它不会失败?

我希望 this 可能是同一个问题,但事实并非如此 - 我的 URL 被引用并且不包含 ?*.

(如果它有任何影响,我正在尝试获取需要凭据的 RTSP 流,使用 Ffmpeg 动态调整它的大小,并将新的 RTSP“管道”到 RTSP 简单服务器。大部分我可以做到:这只是让我绊倒的凭据。)

更新 1: 我之前没有提到的一件事(因为它似乎不相关)是 RTSP 流来自 Milestone 的 Open Network Bridge 服务器。似乎 ONB 现在不允许 URLs 包含凭据,尽管这并不能解释为什么相同的 URL 在 VLC 中有效。也许 VLC 提取凭据并以另一种方式提供它们?我有一个关于此的支持案例,试图深入了解它。如果我发现任何有用的东西,我会在这里更新...

更新 2: 我想我现在可能有所作为。从 Milestone support article 来看,Ffmpeg 似乎无法应对 WWW-Authenticate 的多个选项,而我的 Wireshark 调查显示客户端在尝试初始时收到的 headers描述调用包括:

WWW-Authenticate: Digest realm="RtspServerLibrary", nonce="3JY4rKzboHUqFVrC9yZuSAeUpGiun3BT", algorithm="MD5"
WWW-Authenticate: Digest realm="RtspServerLibrary", nonce="3JY4rKzboHUqFVrC9yZuSAeUpGiun3BT", algorithm="SHA-256"

所以这是两个 WWW-Authenticate 选项,Ffmpeg 无法验证。我已经实施了建议的修复,目前正在努力让它发挥作用。

对我来说,使用 Milestone Open Network Bridge Server,解决方案是按照 this support article 中的说明进行操作,添加一个注册表项以告诉 ONB 不要为 WWW-Authenticate 提供多个选项。

这似乎是潜在的问题:ffmpeg 无法处理 DESCRIBE 请求的 401 响应中的多个 WWW-Authenticate header。我用Wireshark检查了ffmpeg和ONB Server之间的通信,发现header包括:

WWW-Authenticate: Digest realm="RtspServerLibrary", nonce="3JY4rKzboHUqFVrC9yZuSAeUpGiun3BT", algorithm="MD5"
WWW-Authenticate: Digest realm="RtspServerLibrary", nonce="3JY4rKzboHUqFVrC9yZuSAeUpGiun3BT, algorithm="SHA-256"

这就是 ffmpeg 失败的原因:因为有两个 WWW-Authenticate header。


更新: 实际上可能是第二个 header 覆盖了第一个,而 Ffmpeg 不能做 SHA256。请参阅错误报告中的 this comment