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

Apache2开发自定义RTMP协议模块请求被拒绝如何解决

错误原因

你当前的实现仅注册了HTTP体系下的内容处理器、Scheme和默认端口,但RTMP是完全独立于HTTP的二进制TCP协议,Apache核心默认会对所有进入的连接执行HTTP请求行解析逻辑,RTMP握手的首字节是0x03(也就是访问日志里的\x03),完全不符合HTTP请求行的格式规范,所以直接被Apache核心返回400错误,请求根本没有走到你编写的mod_rtmp_handler里。

解决方案

代码修改

  • 移除现有HTTP内容处理器的注册逻辑,改用连接级钩子接管全链路处理:注册ap_hook_process_connection钩子,在TCP连接建立后、Apache启动HTTP解析前就抢占整个连接的IO控制权,返回OK即可跳过Apache默认的HTTP解析流程。
  • 自行实现完整的RTMP协议逻辑:包括C0/C1/C2握手、帧拆分解析、命令处理、流推拉逻辑,不能使用ap_rputs这类面向HTTP响应的输出函数,直接操作apr_socket接口进行二进制数据读写。
  • 你当前注册的ap_hook_http_scheme、ap_hook_default_port仅适用于HTTP体系下的衍生协议,对RTMP无实际作用,可直接移除。

配置修改

  • 首先确认Apache的ports.conf配置中添加了Listen 1935,确保Apache监听RTMP默认端口。
  • 现有虚拟主机配置中的Protocols、SetHandler配置均为HTTP体系下的指令,对RTMP无效可以直接删除,仅保留端口监听绑定即可。

调试注意

curl对RTMP的支持依赖编译时的libcurl RTMP拓展,且你需要先完成RTMP握手逻辑开发后再进行请求测试,否则即使跳过HTTP解析也会收到握手失败的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:06:05