1. 遇到ANNOUNCE 401错误时我的第一反应
那天下午我正在调试一个直播推流系统,用ffmpeg往ZLMediakit(简称ZLM)推送RTMP流时,突然在日志里看到了"ANNOUNCE 401 Unauthorized"的错误提示。这个错误很有意思,表面上看起来推流是成功的,视频流也能正常播放,但就是无法将流信息写入WVP-Pro的数据库。我当时的第一反应是检查认证配置,因为401状态码通常意味着认证失败。
在实际操作中,我发现这个问题有几个典型特征:
- 使用ffmpeg或OBS推流时,RTMP连接能够正常建立
- 视频流数据可以正常传输和播放
- 但在ZLM的日志中会看到ANNOUNCE阶段的401错误
- WVP-Pro的管理界面看不到新推的流信息
这种情况特别容易让人困惑,因为表面上看起来推流是成功的,但实际上系统并没有完整记录这个流的信息。我后来发现,这是因为ZLM在处理ANNOUNCE请求时,与WVP-Pro的交互出现了认证问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 深入理解ANNOUNCE 401错误的本质
要彻底解决这个问题,我们需要先理解ZLM的工作机制。当ffmpeg或OBS推流到ZLM时,整个过程大致分为几个阶段:
- 连接阶段:建立RTMP连接
- 推流阶段:传输音视频数据
- ANNOUNCE阶段:通知媒体服务器有新流加入
401错误就发生在第三个阶段。ZLM在收到推流后,会向WVP-Pro发送ANNOUNCE请求,而这个请求需要携带正确的认证信息。如果配置不当,就会导致这个请求被拒绝。
我通过抓包分析发现,问题的核心在于ZLM的配置文件中有个关键参数:
ini复制[api]
secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc
这个secret需要与WVP-Pro的配置完全一致,否则就会导致ANNOUNCE请求被拒绝。但有时候即使secret配置正确,仍然会出现401错误,这就引出了更深层次的问题。
3. 三步走解决方案实测有效
经过多次测试,我总结出了一个可靠的解决方案,分为三个步骤:
3.1 第一步:修改config.ini关键配置
找到ZLM的配置文件config.ini,通常位于/etc/zlmediakit/目录下。我们需要修改以下两个关
