You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nginx RTMP中捕获推流停止事件并触发回调API?

解决方案

核心问题说明

你遇到的on_done频繁触发是正常行为——它是Nginx RTMP模块在每个媒体数据包处理完成后触发的回调,并非针对推流停止事件,因此完全不适合你的需求。

推荐方案:使用on_stream_end回调

这是Nginx RTMP模块专门为推流停止事件设计的回调,只会在推流端主动停止推流(如OBS点击“停止推流”)或连接异常断开时触发一次。

配置示例

在你的RTMP应用配置块中添加:

application live {
    live on;
    # 原有推流密钥验证回调
    on_publish http://your-api-domain/validate-stream-key;
    # 新增推流停止触发的API回调
    on_stream_end http://your-api-domain/handle-stream-stop?stream=$name&client_ip=$addr;
}
  • $name:会被自动替换为当前流的名称
  • $addr:会被自动替换为推流客户端的IP地址
    你可以根据业务需求添加更多Nginx RTMP内置变量作为参数传递给API。

兼容旧版本Nginx RTMP的方案

如果你的模块版本不支持on_stream_end,可以通过on_close回调配合业务逻辑实现:

  1. 在on_publish阶段标记活跃推流:
    当on_publish验证流密钥通过时,将流名称、客户端IP/ID等信息存入缓存(如Redis),标记为「活跃推流状态」。
  2. 在on_close阶段判断并处理:
    当on_close触发时,检查当前连接对应的流信息是否存在于活跃缓存中:
    • 若存在,说明是推流连接断开,执行你的业务逻辑(如更新流状态、通知关联服务等)
    • 处理完成后删除缓存中的对应记录

配置示例

application live {
    live on;
    on_publish http://your-api-domain/validate-and-mark-active;
    on_close http://your-api-domain/check-and-handle-stop;
}

注意事项

  • 建议升级到最新版本的nginx-rtmp-module(从官方GitHub仓库拉取源码编译),以获得完整的on_stream_end支持。
  • 回调API需要保证响应速度,避免阻塞Nginx的RTMP处理流程。

内容的提问来源于stack exchange,提问作者Hkm Sadek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 10:36:24