ubuntu 安装 SRS (Simple RTMP Server) 是一个开源的流媒体服务器
在 Ubuntu 系统上安装 SRS(Simple RTMP Server)可以按照以下步骤操作,适用于 Ubuntu 16.04 及以上版本:
一、推流协议
-
RTMP通过
rtmp { listen 19350; }配置,支持客户端使用 RTMP 协议推流,推流地址格式为:rtmp://你的服务器IP:19350/live/流名称(例如rtmp://175.27.158.198:19350/live/test)。 -
WebRTC通过
rtc_server和rtc { enabled on; rtmp_to_rtc on; rtc_to_rtmp on; }配置,支持 WebRTC 推流。推流地址需结合 WebRTC 客户端实现,通常格式为:webrtc://你的服务器IP:8000/live/流名称(例如webrtc://175.27.158.198:8000/live/test)。
二、拉流协议
-
RTMP支持通过 RTMP 协议拉流,地址格式与推流一致:
rtmp://你的服务器IP:19350/live/流名称。 -
HTTP-FLV通过
http_server { enabled on; listen 8081; }和http_remux { enabled on; }配置,支持 HTTP-FLV 拉流,地址格式为:http://你的服务器IP:8081/live/流名称.flv(例如http://175.27.158.198:8081/live/test.flv)。 -
HLS通过
hls { enabled on; }配置,支持 HLS 拉流,地址格式为:http://你的服务器IP:8081/live/流名称.m3u8(例如http://175.27.158.198:8081/live/test.m3u8)。 -
WebRTC支持通过 WebRTC 协议拉流,地址格式与推流一致:
webrtc://你的服务器IP:8000/live/流名称。
- 推流支持:RTMP、WebRTC。
- 拉流支持:RTMP、HTTP-FLV、HLS、WebRTC。
版本是
ubuntu@VM-16-17-ubuntu:/home/zhibo/srs/trunk$ sudo ./objs/srs -v
7.0.117
步骤 1:安装依赖
首先安装编译所需的依赖工具:
bash
sudo apt-get update
sudo apt-get install -y git gcc g++ make automake autoconf libtool pkg-config
步骤 2:克隆 SRS 源码
从 GitHub 克隆最新的 SRS 源码(也可指定版本,如 v5.0.182):
bash
git clone https://github.com/ossrs/srs.git
cd srs/trunk # 进入源码主目录
如果仓库较大(SRS 是流媒体服务器,历史提交较多),可能因缓存不足导致下载源代码失败,增大缓存限制就可以正常下载了,命令如下:
git config --global http.postBuffer 524288000 # 设置为 500MB
步骤 3:编译 SRS
使用默认配置编译(支持 RTMP、HLS 等主流协议):
bash
./configure # 生成编译配置
make # 编译源码(耗时约 1-5 分钟,取决于硬件)
如果需要自定义配置(如开启 HTTPS、WebRTC 等),可在 configure 时添加参数,例如:
bash
./configure --with-ssl --with-webrtc # 开启 SSL 和 WebRTC 支持
make
步骤 4:启动 SRS 服务
编译完成后,启动 SRS 服务:注意要进入到:/home/zhibo/srs/trun目录中执行命令
bash
./objs/srs -c conf/srs.conf # 使用默认配置文件启动
默认配置文件 conf/srs.conf 已支持 RTMP 推流(端口 1935)和 HLS 分发(端口 8080),可直接使用。
# 先杀死残留进程
sudo pkill -f srs
打开服务
sudo ./etc/init.d/srs start
- 停止服务:
bash
./etc/init.d/srs stop - 重启服务:
bash
sudo ./etc/init.d/srs restart - 查看服务状态(验证是否运行):
bash
sudo ./etc/init.d/srs status
步骤 5:验证服务是否运行
-
检查 SRS 进程:
bash
ps aux | grep srs若输出包含
./objs/srs -c conf/srs.conf,则表示服务已启动。 -
测试推流和拉流(需本地安装
ffmpeg工具):访问ggfhttps://www.gyan.dev/ffmpeg/builds/下载win10系统版本,解压到目录,进入bin目录,复制目录位置路径,F:\ffmpeg-2025-11-02-git-f5eb11a71d-essentials_build\bin

设置环境变量,把文件路径放在path中

通过windows+R组合键,打开窗口,输入cmd,调用命令行窗口,输入“ffmpeg –version
-
出现这个完成配制可以使用了
- 推流测试(使用本地视频文件):
bash
ffmpeg -re -i your_video.mp4 -c copy -f flv rtmp://localhost/live/test - 拉流测试(RTMP 协议):使用支持 RTMP 的播放器(如 VLC)打开地址:
rtmp://你的服务器IP/live/test - 拉流测试(HLS 协议):访问地址:
http://你的服务器IP:8080/live/test.m3u8
- 推流测试(使用本地视频文件):
步骤 6:设置开机自启动(可选)
若需 SRS 随系统启动,可创建系统服务:
- 创建服务文件:
bash
sudo nano /etc/systemd/system/srs.service - 写入以下内容(注意修改
srs源码路径):ini
[Unit] Description=Simple RTMP Server (SRS) After=network.target[Service] Type=simple WorkingDirectory=/path/to/srs/trunk # 替换为你的 SRS 源码目录 ExecStart=/path/to/srs/trunk/objs/srs -c conf/srs.conf Restart=always[Install] WantedBy=multi-user.target - 启用并启动服务:
bash
sudo systemctl daemon-reload sudo systemctl enable srs sudo systemctl start srs
配置说明
SRS 的核心配置文件为 conf/srs.conf,可根据需求修改:
- RTMP 端口:默认
1935 - HLS 端口:默认
8080,配置在http_server模块 - 推流路径格式:
rtmp://ip:port/app/stream(如rtmp://localhost/live/test中,live是app,test是stream)
停止 SRS
- 临时停止:
bash
./objs/srs -s stop - 若通过系统服务启动,使用:
bash
sudo systemctl stop srs
通过以上步骤,即可在 Ubuntu 上成功安装并运行 SRS 流媒体服务器。如需更复杂的配置(如集群、HTTPS 等),可参考 SRS 官方文档
tail -n 100 /home/zhibo/srs/trunk/objs/srs.log 查看可以查询错误信息,必须进入/home/zhibo/srs/trunk目录中执行
使用教程
关于 SRS 的推流、拉流操作、地址配置及域名设置,这里详细说明如下:
一、推流和拉流的详细操作
推流和拉流需要依赖工具(如 ffmpeg 推流)和播放器(如 VLC、PotPlayer 拉流),具体步骤如下:
1. 准备工具
- 推流工具:安装
ffmpeg(用于推流本地视频或摄像头):bash
sudo apt-get install -y ffmpeg - 拉流工具:本地电脑安装播放器(如 VLC 媒体播放器,跨平台且支持 RTMP、HLS 等协议)。
2. 推流操作(以 RTMP 为例)
SRS 默认配置支持 RTMP 推流,推流地址格式为:rtmp://[服务器IP或域名]:1935/[app]/[stream]
[服务器IP或域名]:你的 Ubuntu 服务器公网 IP 或已解析的域名(如1.2.3.4或live.example.com)。1935:RTMP 默认端口(配置文件中可修改)。[app]:应用名(默认配置中为live,可自定义)。[stream]:流名称(自定义,如test、camera1等)。
示例推流命令:
-
推流本地视频文件:
bash
ffmpeg -re -i /path/to/your/video.mp4 -c:v libx264 -c:a aac -f flv "rtmp://1.2.3.4:1935/live/test"-re:按视频实际帧率推流(避免瞬间推完)。-i:指定输入文件路径。-c:v/-c:a:指定视频 / 音频编码(确保兼容性)。
-
推流摄像头(需服务器有摄像头或通过设备映射):
bash
ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -c:a aac -f flv "rtmp://1.2.3.4:1935/live/camera"
3. 拉流操作(支持多协议)
SRS 支持 RTMP、HLS(HTTP-FLV)等拉流协议,地址格式根据协议不同而变化:
| 协议 | 拉流地址格式 | 说明 |
|---|---|---|
| RTMP | rtmp://[IP/域名]:1935/[app]/[stream] | 与推流地址相同,直接用于播放器拉流 |
| HLS | http://[IP/域名]:8080/[app]/[stream].m3u8 | 基于 HTTP 的流媒体,适合网页 / 移动端 |
| HTTP-FLV | http://[IP/域名]:8080/[app]/[stream].flv | 基于 HTTP 的 FLV 流,延迟比 HLS 低 |
示例拉流操作:
- 使用 VLC 拉流:打开 VLC → 媒体 → 打开网络串流 → 输入地址(如
rtmp://1.2.3.4:1935/live/test)→ 播放。 - 网页拉流(HLS):用支持 HLS 的播放器(如
video.js),在网页中嵌入地址http://1.2.3.4:8080/live/test.m3u8。
二、推流 / 拉流地址的配置位置
SRS 的核心配置文件是 conf/srs.conf(位于 SRS 源码目录的 trunk/conf 下),推流 / 拉流的端口、应用名等均在此配置:
-
打开配置文件:
bash
cd /path/to/srs/trunk # 进入 SRS 源码目录(替换为你的实际路径) nano conf/srs.conf -
关键配置项说明:
- RTMP 配置(默认支持):
conf
listen 1935; # RTMP 端口 max_connections 1000; vhost __defaultVhost__ {# 应用名配置(如 live,推流地址中的 [app] 需与此一致)app live {enabled on;# HLS 配置(生成 .m3u8 文件)hls {enabled on;hls_path ./objs/nginx/html; # HLS 文件存储路径hls_fragment 10; # 切片时长(秒)}# HTTP-FLV 配置http_flv {enabled on;}} } - HTTP 服务器配置(HLS/HTTP-FLV 依赖):
conf
http_server {enabled on;listen 8080; # HTTP 端口(HLS/HTTP-FLV 用)dir ./objs/nginx/html; # 静态文件根目录(存放 .m3u8/.flv) }
- RTMP 配置(默认支持):
-
修改后生效:若 SRS 已启动,需重启服务使配置生效:
bash
# 若通过系统服务启动 sudo systemctl restart srs# 若通过命令直接启动 ./objs/srs -s stop # 停止 ./objs/srs -c conf/srs.conf # 重新启动
三、是否需要配置域名?如何配置?
-
是否需要域名?
- 测试或内网使用:无需域名,直接用服务器 IP 即可(如
192.168.1.100或公网 IP1.2.3.4)。 - 生产环境 / 公网使用:建议配置域名(如
live.example.com),方便记忆和 SSL 证书部署(如需 HTTPS)。
- 测试或内网使用:无需域名,直接用服务器 IP 即可(如
-
域名配置步骤:
- 步骤 1:购买域名并解析在域名服务商(如阿里云、腾讯云)购买域名后,添加 A 记录,将域名解析到你的服务器公网 IP(例如:
live.example.com→1.2.3.4)。 - 步骤 2:在 SRS 中使用域名无需在 SRS 配置中单独设置域名,只需在推流 / 拉流地址中用域名替代 IP 即可(如
rtmp://live.example.com:1935/live/test)。 - 步骤 3:(可选)配置 HTTPS若需通过 HTTPS 拉流(如
https://live.example.com:8080/live/test.m3u8),需在srs.conf中开启 HTTPS 并配置证书:conf
证书可通过 Let's Encrypt 免费申请。http_server {enabled on;listen 8080; # HTTP 端口https {enabled on;listen 8088; # HTTPS 端口key /path/to/ssl/private.key; # 私钥路径cert /path/to/ssl/certificate.crt; # 证书路径} }
- 步骤 1:购买域名并解析在域名服务商(如阿里云、腾讯云)购买域名后,添加 A 记录,将域名解析到你的服务器公网 IP(例如:
最后测试推流启动,win10电脑命令执行一个视频推流如下:
打开cmd 执行命令开始推流视频
ffmpeg -re -i F:/video/8dd514f9feb9fb414949495a1e39b601.mp4 -c:v libx264 -c:a aac -f flv "rtmp://175.27.158.198:19350/live/test"

观看端拉流如下,
拉流地址是: rtmp://[175.27.158.198]:19350/live/test


添加有限制才可以进行推流和拉流,方法如下
SRS 支持通过配置实现推流 / 拉流的身份验证(如用户名密码校验),防止未授权访问。以下是具体实现方式,主要通过 URL 参数验证 或 HTTP 回调验证 两种方式,适用于不同场景:
方式一:简单验证(URL 参数校验,推荐入门使用)
通过在推流 / 拉流地址中附加密钥参数(如 ?token=xxx),SRS 配置中校验该参数是否匹配,不匹配则拒绝连接。
步骤 1:修改 SRS 配置文件 conf/srs.conf
在 vhost __defaultVhost__ 或具体 app 配置中添加验证规则:
conf
vhost __defaultVhost__ {app live {enabled on;# 推流验证(publish)publish {# 允许推流的条件:URL 中必须包含 token=your_secret_keyenabled on;# 校验规则:检查 query 中的 token 是否等于预设密钥(如 srs@2024)auth {enabled on;# 密钥可自定义,建议复杂一些token "srs@2024";# 验证失败时的提示reject_msg "Invalid publish token";}}# 拉流验证(play)play {enabled on;auth {enabled on;token "srs@2024"; # 可与推流密钥相同或不同reject_msg "Invalid play token";}}# 其他配置(HLS、HTTP-FLV 等保持不变)hls { ... }http_flv { ... }}
}
步骤 2:重启 SRS 使配置生效
bash
sudo systemctl restart srs # 若通过系统服务启动
# 或
./objs/srs -s stop && ./objs/srs -c conf/srs.conf
步骤 3:带验证参数推流 / 拉流
- 推流地址(必须包含
?token=srs@2024):bash
ffmpeg -re -i your_video.mp4 -c copy -f flv "rtmp://服务器IP:1935/live/test?token=srs@2024" - 拉流地址(以 RTMP 和 HLS 为例):
- RTMP:
rtmp://服务器IP:1935/live/test?token=srs@2024 - HLS:
http://服务器IP:8080/live/test.m3u8?token=srs@2024
- RTMP:
如果参数不匹配(如 token 错误或缺失),SRS 会拒绝连接并返回错误信息。
方式二:动态验证(HTTP 回调,适合生产环境)
通过 HTTP 回调机制,SRS 在推流 / 拉流前向你的业务服务器发送请求,由业务服务器判断是否允许访问(如校验数据库中的用户权限),更灵活且支持动态生成密钥。
步骤 1:准备一个验证服务(示例)
假设你有一个简单的 HTTP 服务(如用 Python/Node.js 实现),接收 SRS 的回调请求并返回是否允许:
- 回调请求格式(SRS 会发送):
GET http://你的验证服务器地址/auth?srs_action=publish&srs_stream=test&token=xxx - 验证服务返回:
- 允许:
HTTP 200 OK+ 响应体allow - 拒绝:
HTTP 403 Forbidden或响应体deny
- 允许:
示例 Python 验证服务(简单演示):
python
运行
from flask import Flask, requestapp = Flask(__name__)# 模拟数据库中的有效 token
VALID_TOKENS = {"user1_token", "user2_token"}@app.route('/auth')
def auth():action = request.args.get('srs_action') # "publish" 或 "play"token = request.args.get('token')if token in VALID_TOKENS:return "allow" # 允许访问return "deny", 403 # 拒绝访问if __name__ == '__main__':app.run(host='0.0.0.0', port=8000) # 启动在 8000 端口
步骤 2:修改 SRS 配置,启用 HTTP 回调
在 conf/srs.conf 中添加回调配置:
conf
vhost __defaultVhost__ {app live {enabled on;# 推流前回调验证publish {enabled on;# 回调到你的验证服务(替换为实际地址)auth {enabled on;# 回调 URL,SRS 会自动附加参数(如 srs_action、srs_stream、token 等)url "http://你的验证服务器IP:8000/auth";# 超时时间(毫秒)timeout 3000;# 验证失败提示reject_msg "Auth failed";}}# 拉流前回调验证(与推流配置类似)play {enabled on;auth {enabled on;url "http://你的验证服务器IP:8000/auth";timeout 3000;}}# 其他配置保持不变hls { ... }http_flv { ... }}
}
步骤 3:重启 SRS 并测试
- 启动验证服务(如上面的 Python 程序)。
- 推流时必须携带
token参数(如?token=user1_token),否则验证服务会拒绝。 - 只有
token在VALID_TOKENS中的请求才会被允许。
补充说明
-
安全性增强:
- 方式一中的静态密钥建议定期更换,避免泄露。
- 方式二中的验证服务建议启用 HTTPS(
url "https://..."),防止回调参数被篡改。
-
其他验证方式:
- SRS 还支持 RTMP 私有协议验证(通过
on_publish/on_play回调自定义握手逻辑),适合更复杂的场景,可参考 官方文档。
- SRS 还支持 RTMP 私有协议验证(通过
-
防火墙配合:除了应用层验证,还可通过服务器防火墙(如
ufw)限制端口访问(如只允许特定 IP 访问 1935/8080 端口),双重保障:bash
sudo ufw allow from 允许的IP to any port 1935 # 限制 RTMP 端口 sudo ufw allow from 允许的IP to any port 8080 # 限制 HTTP 端口
通过以上方式,即可有效防止未授权用户随意推流或拉流,确保服务器安全。
使用php开发,tp6框架写的后台方案如下
在 ThinkPHP 6(TP6)中实现 SRS 的动态验证(HTTP 回调),核心是创建一个接口接收 SRS 的回调请求,校验参数后返回 “允许” 或 “拒绝” 的响应。以下是具体实现步骤:
前提准备
- 确保 TP6 项目已正常运行(可通过域名或 IP 访问,如
http://your-domain.com)。 - 了解 SRS 回调的参数:SRS 在推流 / 拉流前会向你的接口发送 GET 请求,携带以下关键参数(可根据需求扩展):
srs_action:操作类型(publish表示推流,play表示拉流)。srs_stream:流名称(如推流地址中的test)。token:推流 / 拉流地址中携带的验证参数(需客户端在地址中附加,如?token=xxx)。
步骤 1:创建验证控制器
在 TP6 项目中创建一个用于处理 SRS 回调的控制器,例如 app/controller/SrsAuth.php:
php
<?php
namespace app\controller;use think\facade\Request;
use think\response\Json;class SrsAuth
{/*** SRS 推流/拉流验证接口* 接收 SRS 回调请求,校验 token 合法性*/public function check(): Json{// 1. 获取 SRS 回调参数$action = Request::get('srs_action', ''); // 操作类型:publish/play$stream = Request::get('srs_stream', ''); // 流名称$token = Request::get('token', ''); // 客户端传递的验证 token// 2. 日志记录(可选,用于调试)$logData = ['time' => date('Y-m-d H:i:s'),'action' => $action,'stream' => $stream,'token' => $token,'ip' => Request::ip()];file_put_contents('./runtime/logs/srs_auth.log', json_encode($logData) . PHP_EOL, FILE_APPEND);// 3. 验证参数合法性(基础校验)if (empty($action) || empty($stream) || empty($token)) {return json('deny', 403); // 参数缺失,拒绝}// 4. 核心验证逻辑(根据业务场景实现)// 示例:从数据库/缓存中校验 token 是否有效$isValid = $this->validateToken($token, $action, $stream);// 5. 返回结果(SRS 只识别响应体为 "allow" 或 "deny")if ($isValid) {return json('allow', 200); // 允许访问} else {return json('deny', 403); // 拒绝访问}}/*** 验证 token 合法性(业务逻辑)* @param string $token 客户端传递的 token* @param string $action 操作类型(publish/play)* @param string $stream 流名称* @return bool 是否有效*/private function validateToken(string $token, string $action, string $stream): bool{// 示例 1:固定 token 测试(实际项目中需替换为数据库查询)// $validTokens = ['user1_token', 'user2_token'];// return in_array($token, $validTokens);// 示例 2:从数据库查询(假设有一个 srs_tokens 表)$tokenModel = new \app\model\SrsToken(); // 需创建对应模型和表$tokenInfo = $tokenModel->where(['token' => $token,'action' => $action, // 允许的操作类型(publish/play 或 all)'stream' => $stream, // 允许的流名称(或 * 表示所有流)'status' => 1, // 有效状态'expire_time' => ['>', time()] // 未过期])->find();return !empty($tokenInfo);}
}
步骤 2:创建数据模型(可选,用于数据库验证)
如果需要从数据库校验 token,创建对应的模型和数据表:
-
创建迁移文件(生成数据表):执行命令
php think make:migration create_srs_tokens_table,编辑迁移文件:php
public function up() {$this->table('srs_tokens', function ($table) {$table->id();$table->string('token', 100)->comment('验证令牌');$table->enum('action', ['publish', 'play', 'all'])->default('all')->comment('允许的操作类型');$table->string('stream', 50)->default('*')->comment('允许的流名称(* 表示所有)');$table->tinyInteger('status')->default(1)->comment('状态:1=有效,0=无效');$table->integer('expire_time')->comment('过期时间(时间戳)');$table->timestamps();})->comment('SRS 推流拉流验证令牌表')->create(); }执行迁移:
php think migrate:run生成表。 -
创建模型:
app/model/SrsToken.phpphp
<?php namespace app\model;use think\Model;class SrsToken extends Model {protected $table = 'srs_tokens'; }
步骤 3:配置路由
在 route/app.php 中添加路由,让 SRS 能访问到验证接口:
php
<?php
use think\facade\Route;// SRS 验证回调接口
Route::get('srs/auth', 'SrsAuth/check');
此时接口地址为:http://你的TP6域名/srs/auth(如 http://1.2.3.4/srs/auth)。
步骤 4:修改 SRS 配置,指向 TP6 验证接口
编辑 SRS 配置文件 conf/srs.conf,在 vhost 或 app 中配置 HTTP 回调:
conf
vhost __defaultVhost__ {app live {enabled on;# 推流验证(publish)publish {enabled on;auth {enabled on;# 指向 TP6 的验证接口(替换为你的实际地址)url "http://你的TP6域名/srs/auth";timeout 3000; # 超时时间(毫秒)reject_msg "Publish auth failed"; # 验证失败提示}}# 拉流验证(play)play {enabled on;auth {enabled on;url "http://你的TP6域名/srs/auth"; # 与推流共用一个接口timeout 3000;reject_msg "Play auth failed";}}# 其他配置(HLS/HTTP-FLV 等)hls {enabled on;}http_flv {enabled on;}}
}
步骤 5:重启服务并测试
- 重启 SRS 使配置生效:
bash
sudo systemctl restart srs - 测试推流(需携带
token参数):bash
# 假设数据库中存在有效的 token=valid_token_123 ffmpeg -re -i test.mp4 -c copy -f flv "rtmp://你的SRS服务器IP:1935/live/test?token=valid_token_123" - 测试拉流(同样需要携带
token):- RTMP:
rtmp://你的SRS服务器IP:1935/live/test?token=valid_token_123 - HLS:
http://你的SRS服务器IP:8080/live/test.m3u8?token=valid_token_123
- RTMP:
关键说明
- 响应格式:SRS 只根据响应体判断是否允许(
allow允许,deny拒绝),HTTP 状态码建议配合使用(200 对应 allow,403 对应 deny)。 - 安全性:
- 生产环境建议将 TP6 接口改为 HTTPS(
url "https://你的域名/srs/auth"),避免 token 被明文传输。 - 可在 TP6 中添加 IP 白名单,只允许 SRS 服务器的 IP 访问验证接口(防止恶意请求)。
- 生产环境建议将 TP6 接口改为 HTTPS(
- 动态 token:实际业务中,
token可通过业务系统生成(如关联用户、时效限制等),并存储到数据库,验证时查询匹配。
通过以上步骤,即可在 TP6 中实现 SRS 的动态验证,灵活控制推流和拉流权限。
/home/zhibo/srs/trunk/conf/srs.conf文件配制内容是,无授权版本
# main config for srs.
# @see full.conf for detail config.max_connections 600;
#srs_log_tank file;
#srs_log_file ./objs/srs.log;
daemon on;
rtmp {listen 19350;
}
http_api {enabled on;listen 1985;
}
http_server {enabled on;listen 8081;dir ./objs/nginx/html;
}
rtc_server {enabled on;listen 8000; # UDP port# @see https://ossrs.io/lts/en-us/docs/v7/doc/webrtc#config-candidatecandidate $CANDIDATE;# 替换为服务器的实际 IP(公网或内网)candidate 175.27.158.198; # 例如你的服务器公网 IP
}
vhost __defaultVhost__ {hls {enabled on;hls_fragment 10; # 切片时长(秒)hls_window 60; # 保留的切片窗口(秒)}http_remux {enabled on;mount [vhost]/[app]/[stream].flv;}rtc {enabled on;# @see https://ossrs.io/lts/en-us/docs/v7/doc/webrtc#rtmp-to-rtcrtmp_to_rtc on;# @see https://ossrs.io/lts/en-us/docs/v7/doc/webrtc#rtc-to-rtmprtc_to_rtmp on;}play{gop_cache_max_frames 2500;}
}
基于SRS配置文件的验证需求,可以通过HTTP回调机制实现客户端连接的鉴权认证。以下是在您的配置中添加验证功能的完整方案:
验证配置实现
在vhost __defaultVhost__配置块中添加http_hooks回调配置,用于处理客户端连接、发布和播放等操作的认证1:
# main config for srs.
# @see full.conf for detail config.max_connections 600;
#srs_log_tank file;
#srs_log_file ./objs/srs.log;
daemon on;
rtmp {listen 19350;
}
http_api {enabled on;listen 1985;
}
http_server {enabled on;listen 8081;dir ./objs/nginx/html;
}
rtc_server {enabled on;listen 8000; # UDP port# @see https://ossrs.io/lts/en-us/docs/v7/doc/webrtc#config-candidatecandidate $CANDIDATE;# 替换为服务器的实际 IP(公网或内网)candidate 175.27.158.198; # 例如你的服务器公网 IP
}
vhost __defaultVhost__ {# HTTP回调验证配置http_hooks {enabled on;on_connect http://你的服务器IP:端口/api/verify; # 连接验证on_close http://你的服务器IP:端口/api/verify; # 断开连接记录on_publish http://你的服务器IP:端口/api/verify; # 推流验证on_unpublish http://你的服务器IP:端口/api/verify; # 停止推流记录on_play http://你的服务器IP:端口/api/verify; # 播放验证on_stop http://你的服务器IP:端口/api/verify; # 停止播放记录}hls {enabled on;hls_fragment 10; # 切片时长(秒)hls_window 60; # 保留的切片窗口(秒)}http_remux {enabled on;mount [vhost]/[app]/[stream].flv;}rtc {enabled on;# @see https://ossrs.io/lts/en-us/docs/v7/doc/webrtc#rtmp-to-rtcrtmp_to_rtc on;# @see https://ossrs.io/lts/en-us/docs/v7/doc/webrtc#rtc-to-rtmprtc_to_rtmp on;}play{gop_cache_max_frames 2500;}
}
验证机制说明
工作原理:
- SRS在客户端执行关键操作时触发HTTP回调
- 验证服务器接收POST请求并解析JSON数据
- 根据操作类型和参数进行权限验证
- 返回"0"表示成功,"1"表示失败
支持的验证事件1:
on_connect:客户端连接验证on_publish:推流权限验证on_play:播放权限验证- 其他事件用于状态记录和监控
安全特性:
- 基于URL参数的身份验证
- 推流和播放权限分离控制
- 详细的错误日志记录
- 防止未授权访问和数据泄露
该验证方案可以有效保护您的SRS服务器,确保只有授权用户才能进行推流和播放操作
tp6写的代码地址是:https://blog.csdn.net/u013519290/article/details/154462107?sharetype=blogdetail&sharerId=154462107&sharerefer=PC&sharesource=u013519290&spm=1011.2480.3001.8118
四、总结
- 推流 / 拉流地址:由服务器 IP / 域名 + 端口 + 应用名 + 流名称组成,核心配置在
conf/srs.conf。 - 配置修改:编辑
conf/srs.conf后重启 SRS 生效。 - 域名:非必需,生产环境建议配置,只需解析域名到服务器 IP 即可直接使用。
