# srs_hook **Repository Path**: rolaypp/srs_hook ## Basic Information - **Project Name**: srs_hook - **Description**: 基于SRS的HTTP回调,接入了connect、ondvr、close、publish、unpublish、play、stop事件,内部实现了一部分简单的处理,可以在这个基础上扩展自己的业务代码。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-09-13 - **Last Updated**: 2026-02-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # srs_hook 基于 SRS (Simple Realtime Server) 的 HTTP 回调处理服务 ## 介绍 srs_hook 是一个基于 Spring Boot 框架开发的 SRS HTTP 回调处理服务。该项目实现了 SRS 服务器的多种回调事件接入,包括客户端连接、推流、播放、断开连接等核心事件。通过该服务,可以在这些事件触发时执行自定义业务逻辑,实现如权限验证、录制控制、流量统计等功能。 ## 软件架构 - **后端框架**: Spring Boot - **编程语言**: Java - **主要依赖**: SRS (Simple Realtime Server) 回调接口 ### 核心模块 | 模块 | 说明 | |------|------| | `CallBackDataOnConnect` | 客户端连接回调数据实体 | | `CallBackDataOnDvr` | DVR 录制回调数据实体 | | `CallBackDataOnPlay` | 客户端播放回调数据实体 | | `CallBackDataOnPublish` | 客户端推流回调数据实体 | | `SRSCallBackController` | SRS 回调控制器,处理各类回调请求 | | `TokenUtils` | JWT Token 工具类,用于用户认证 | | `StreamService` | 直播流服务接口 | ## 支持的回调事件 | 事件 | 路径 | 说明 | |------|------|------| | connect | `/connect` | 客户端连接 SRS 服务器时回调 | | on_dvr | `/ondvr` | DVR 录制完成时回调 | | close | `/close` | 客户端断开连接时回调 | | publish | `/publish` | 用户推流(直播)时回调 | | unpublish | `/unpublish` | 客户端停止推流时回调 | | play | `/play` | 客户端拉流(播放)时回调 | | stop | `/stop` | 客户端停止播放时回调 | ## 使用说明 ### 环境要求 - JDK 1.8 或更高版本 - Maven 3.x - SRS 服务器(需配置 HTTP 回调) ### SSL 证书配置 由于 SRS 的 hook 回调需要使用 HTTPS 协议,项目中提供了本地虚拟化的 SSL 证书 (`testserver.keystore`)。如需生成自定义证书,可在 JDK 所在目录下执行以下命令: ```bash keytool -genkey -alias tomcat -keyalg RSA -keystore testserver.keystore ``` ### 配置说明 在 `src/main/resources/application.properties` 文件中配置相关参数,包括: - 服务器端口 - SSL 证书路径和密码 - SRS 回调密钥 ### 启动服务 ```bash mvn spring-boot:run ``` 服务启动后,将监听配置的端口,等待 SRS 服务器的回调请求。 ## 示例代码 ### 回调处理示例 ```java // 客户端连接回调 @ResponseBody @RequestMapping("/connect") public int on_connect(@RequestBody CallBackDataOnConnect data) { // 返回 0 表示校验成功,非 0 为失败 return 0; } // 推流回调 @ResponseBody @RequestMapping("/publish") public int on_publish(@RequestBody CallBackDataOnPublish data) { // 返回 0 允许推流,返回非 0 拒绝推流 return 0; } // 播放回调 @ResponseBody @RequestMapping("/play") public int on_play(@RequestBody CallBackDataOnPlay data) { // 0 表示允许拉流,非 0 表示拒绝拉流 return 0; } ``` ### Token 生成示例 ```java // 生成 Token String token = TokenUtils.sign(username); // 验证 Token boolean isValid = TokenUtils.verify(token, username); ``` ## 扩展业务 在该项目基础上,可以扩展以下业务功能: - **用户认证**: 结合 TokenUtils 实现推流/播放的权限验证 - **录制管理**: 根据 on_dvr 回调实现自动录制控制 - **流量统计**: 统计在线用户数、流量使用情况 - **安全防护**: 非法用户拦截、异常行为检测 - **直播监控**: 监控推流状态、实时告警 ## 贡献指南 欢迎提交 Pull Request 或 Issue,共同完善该项目。