srs的webrtc信令分析
关于webrtc的流信令只有四个
/rtc/v1/publish/,这是推流接口,是推流客户端跟SRS交换SDP的接口
/rtc/v1/play/,这是拉流接口,是拉流客户端跟SRS交换SDP的接口
/rtc/v1/whip/,这也是推流接口,作用是也是交换SDP,只是采用的是WebRTC 的标准信令
/rtc/v1/whep/,这是拉流接口,作用是也是交换SDP,只是采用的是WebRTC 的标准信令
POST /rtc/v1/publish/
Body in JSON:
{"api": "https://d.ossrs.net/rtc/v1/publish/""streamurl": "webrtc://d.ossrs.net/live/3abd9f34","sdp": "v=0\r\n......\r\na=ssrc:2064016335 label:c8243ce9-ace5-4d17-9184-41a2543101b5\r\n"
}
返回如下
{"code": 0"sdp": "v=0\r\n......\r\na=candidate:1 1 udp 2130706431 172.18.0.4 8000 typ host generation 0\r\n""sessionid": "186tj710:hMub"
}
这个是srs自定义的信令,更多详细见上文给到的官网
关于whip和whep,webrtc官方没有指定标准信令,但这个几乎快成为公认的webrtc信令了,obs最新版也开始支持whip信令推流webrtc了。
什么是whip
全称: WebRTC-HTTP ingestion protocol (WHIP).
rfc地址: rfc-draft-murillo-whip-00
srs中推流url如下:
http://youip:1985/rtc/v1/whip/?app=live&stream=livestream
其中live和livestream是可以自定义的。
返回的http中body也只有answerSDP。详细见whip和whep
whip协议也就是推流和拉流中,无论是offer还是answer,他们的body只能有sdp,至于像上面的url,是服务器自定义的,与whip无关。点击推流按钮,点击左侧name项,查看http的playload。

除此之外srs还有很多其他特别好用的信令,可以用curl命令执行这些信令作测试。
1.查看当前有多少人在推流拉流
GET http://yourip:1985/api/v1/streams
“clients”:2共有2个客户端在推拉流,“send_bytes”,“recv_bytes”,srs总共收到了多少流和推出了多少流。publish,推流客户端的id等。
{"code":0,"server":"vid-k73qd86","service":"d131vgjy","pid":"14885",
"streams":[{"id":"vid-31x2o91",
"name":"livestreamShow","vhost":"vid-5735q8a",
"app":"live",
"tcUrl":"webrtc://118.190.201.242:1990/live",
"url":"/live/livestreamShow","live_ms":1700663886254,
"clients":2,"frames":0,
"send_bytes":86035991,"recv_bytes":70223513,
"kbps":{"recv_30s":279,"send_30s":335},
"publish":{"active":true,"cid":"980tr2m6"},
"video":null,"audio":null}]}
2.可以看到获得了这个2个客户端详细的信息,他们的ip,name,id等
GET http://yourip:1985/api/v1/clients
{"code":0,"server":"vid-k73qd86","service":"d131vgjy","pid":"14885","clients":[{"id":"980tr2m6","vhost":"vid-5735q8a","stream":"vid-31x2o91",
"ip":"111.32.97.245","pageUrl":"","swfUrl":"","tcUrl":"webrtc://118.190.201.242:1990/live",
"url":"/live/livestreamShow","name":"livestreamShow","type":"rtc-publish",
"publish":true,"alive":2355.50,"send_bytes":1607988,"recv_bytes":83824825,"kbps":{"recv_30s":263,"send_30s":5}},{"id":"flmxmk29","vhost":"vid-5735q8a","stream":"vid-31x2o91",
"ip":"111.32.97.245","pageUrl":"","swfUrl":"","tcUrl":"webrtc://118.190.201.242:1990/live",
"url":"/live/livestreamShow","name":"livestreamShow","type":"rtc-play",
"publish":false,"alive":2393.43,"send_bytes":102710561,"recv_bytes":2065048,"kbps":{"recv_30s":3,"send_30s":167}}]}
3.包括踢掉一些用户:
DELETE /api/v1/clients/{id}
srs的控制台踢人的按钮,就是使用的这个信令。
4.以下两条跟上面的功能相同,在/clients/id,查找特定id的信息
curl -v -X GET http://192.168.1.170:1985/api/v1/clients/426 && echo ""
curl -v -X DELETE http://192.168.1.170:1985/api/v1/clients/426 && echo ""
curl -v -X GET http://118.190.201.242:1985/api/v1/vhosts/ && echo “”
{"code":0,"server":"vid-k73qd86","service":"d131vgjy","pid":"14885",
"vhosts":[{"id":"vid-5735q8a","name":"__defaultVhost__","enabled":true,"clients":2,
"streams":1,"send_bytes":246360125,"recv_bytes":223127278,
"kbps":{"recv_30s":256,"send_30s":296},"hls":{"enabled":false}}]}
5.SRS提供系统的摘要信息接口,譬如当前的内存、CPU、网络、负载使用率。
GET http://118.190.201.242:1985/api/v1/summaries/ && echo ""
{"code":0,"server":"vid-k73qd86","service":"d131vgjy","pid":"14885","urls":{"versions":"the version of SRS","summaries":"the summary(pid, argv, pwd, cpu, mem) of SRS","rusages":"the rusage of SRS","self_proc_stats":"the self process stats","system_proc_stats":"the system process stats","meminfos":"the meminfo of system","authors":"the license, copyright, authors and contributors","features":"the supported features of SRS","requests":"the request itself, for http debug","vhosts":"manage all vhosts or specified vhost","streams":"manage all streams or specified stream","clients":"manage all clients or specified client, default query top 10 clients","raw":"raw api for srs, support CUID srs for instance the config","clusters":"origin cluster server API","perf":"System performance stat","tcmalloc":"tcmalloc api with params ?page=summary|api"},"tests":{"requests":"show the request info","errors":"always return an error 100","redirects":"always redirect to /api/v1/test/errors","[vhost]":"http vhost for http://error.srs.com:1985/api/v1/tests/errors"}}
srs全部的api如下:
地址是:http://192.168.1.170:1985/api/v1,主要包含的子api有:
API Example Description
server 4481 服务器标识
versions /api/v1/versions 获取服务器版本信息
summaries /api/v1/summaries 获取服务器的摘要信息
rusages /api/v1/rusages 获取服务器资源使用信息
self_proc_stats /api/v1/self_proc_stats 获取服务器进程信息
system_proc_stats /api/v1/system_proc_stats 获取服务器所有进程情况
meminfos /api/v1/meminfos 获取服务器内存使用情况
authors /api/v1/authors 获取作者、版权和License信息
features /api/v1/features 获取系统支持的功能列表
requests /api/v1/requests 获取请求的信息,即当前发起的请求的详细信息
vhosts /api/v1/vhosts 获取服务器上的vhosts信息
streams /api/v1/streams 获取服务器的streams信息
clients /api/v1/clients 获取服务器的clients信息,默认获取前10个
configs /api/v1/configs CUID配置,RAW API
publish /rtc/v1/publish/ WebRTC推流的API
play /rtc/v1/play/ WebRTC播放流的API
详细见官网:
http-api 信令https://ossrs.net/lts/zh-cn/docs/v4/doc/http-api
srs官网还有个在线的curl界面类型的工具
http://ossrs.net/srs.release/http-rest/


相关文章:
srs的webrtc信令分析
关于webrtc的流信令只有四个 /rtc/v1/publish/,这是推流接口,是推流客户端跟SRS交换SDP的接口 /rtc/v1/play/,这是拉流接口,是拉流客户端跟SRS交换SDP的接口 /rtc/v1/whip/,这也是推流接口,作用是也是交换…...
实现简单的操作服务器和客户端(上)
一、说明 描述:本教程介绍如何使用 simple_action_server 库创建斐波那契动作服务器。此示例操作服务器生成斐波那契序列,目标是序列的顺序,反馈是计算的序列,结果是最终序列。 内容 创建操作消息编写一个简单的服务器 代码...
基于Java SSM框架+Vue实现药品销售进销存网站项目【项目源码+论文说明】
基于java的SSM框架Vue实现药品销售进销存网站演示 摘要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于药品管理系统当然也不能排除在外,随着网络技术的不断成熟,带动了…...
【刷题笔记】加油站||符合思维方式
加油站 文章目录 加油站1 题目描述2 思路3 解题方法 1 题目描述 https://leetcode.cn/problems/gas-station/ 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消…...
【ArcGIS Pro微课1000例】0037:ArcGIS Pro中模型构建器的使用---以shp批量转kml/kmz为例
文章目录 一、ArcGIS Pro模型构建器介绍二、shp批量转kml/kmz1. 打开模型构建器2. 添加工作空间4. 添加【创建要素图层】工具5. 添加【图层转kml】工具6. 输出文件命名7. 运行模型三、模型另存为1.py文件2. 保存为工具一、ArcGIS Pro模型构建器介绍 模型构建器是一种可视化编程…...
前端 vue 面试题(二)
文章目录 如何让vue页面重新渲染组件间通信vue为什么要mutation、 action操作插槽、具名插槽、作用域插槽vue编译使用的是什么库?vue怎么实现treeshakingwebpack实现treeshaking为什么只有es module 能支持 tree shaking mixin 的作用mixin的底层原理nexTick原理vue…...
MySQL 高可用架构
MySQL 是实际生产中最常用的数据库,生产环境数据量极为庞大,对性能和安全要求很高,单机的 MySQL 是远远达不到的,所以必须搭建一个主从复制架构,同时可以基于一些工具实现高可用架构,在此基础上,…...
JVM虚拟机:G1垃圾回收器的日志分析
本文重点 本文我们将学习G1垃圾回收器的日志 使用 执行命令 java -Xms20M -Xmx20M -XX:PrintGCDetails -XX:UseG1GC 类名 分析 前面我们学习了G1垃圾回收器,它的回收有三种可能: YGC FGC MixedGC GC pause表示STW,Evacuation表示复制对象,…...
解决视口动画插件jquery.aniview.js使用animate.css时无效的问题(最新版本网页视口动画插件的使用及没作用、没反应)
当网站页面元素进入视口时自动应用过渡效果。CSS过渡效果可以为网页添加动画效果,并提供了一种平滑的转换方式,使元素的变化更加流畅和生动。而通过jQuery插件来获取页面滚动位置决定合适调用动画效果。 一、官网 animate.css官网 一款强大的预设css3动…...
【挑战业余一周拿证】一、亚马逊云科技简介 - 第 3 节 - 云计算
第 3 节 - 云计算 在深入了解亚马逊云科技的各个部分之前,让我们先缩小视野,对云进行一个合理的定义。云计算就是通过互联网按需提供 IT 资源并采用按需付费定价模式,下面,我们将进行详细说明。 按需提供表示的是亚马逊云科技会在…...
4. 无向图的各连通分支
题目 求解无向图的各连通分支 输入: 第一行为图的节点数n(节点编号0至n-1,0<n<10) 从第二行开始列出图的边,-1表示输入结束 输出: 输出每个连通分支的广度优先搜索序列(从连通分支的最…...
《golang设计模式》第三部分·行为型模式-08-状态模式(State)
文章目录 1. 概念1.1 作用1.1 角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概念 1.1 作用 状态(State)指状态对象,用于封装上下文对象的特定状态行为,使得上下文对象在内部状态改变时能够改变其自身的行为。 1.1 角色…...
tp8 使用rabbitMQ(3)发布/订阅
发布/订阅 当我们想把一个消息,发送给 多个消费者的时候,我们把这种模式叫做发布/订阅模式,比如我们做两个消费者,其中一个消费者把消息写入磁盘中,别一个消费者把消息结果输出到屏幕上,就要用到发布订阅模…...
【nlp】3.4 Transformer论文复现:2. 编码器部分(规范化层、子层连接结构、编码器层)
3.4 Transformer论文复现:2. 编码器部分(规范化层、子层连接结构、编码器层) 2.6 规范化层2.6.1 规范化层的作用2.6.2 规范化层的代码实现2.6.3 规范化层总结2.7 子层连接结构2.7.1 子层连接结构2.7.2 子层连接结构的代码实现2.7.3 子层连接结构总结2.8 编码器层2.8.1 编码器…...
面试:ShardingSphere问题
文章目录 什么是ShardingSphere,它的主要功能是什么?ShardingSphere的核心模块有哪些?他们是如何工作的?ShardingSphere 的读写分离是如何实现的?如何配置ShardingSphere的数据分片策略?ShardingSphere支持…...
NX二次开发UF_CURVE_ask_offset_direction_2 函数介绍
文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_offset_direction_2 Defined in: uf_curve.h int UF_CURVE_ask_offset_direction_2(UF_STRING_p_t input_curves, double offset_direction_vector [ 3 ] , double dra…...
【研究中】sql server权限用户设置23.11.26
--更新时间2023.11.26 21:30 负责人:jerrysuse DBAliCMSIF EXISTS (select * from sysobjects where namehkcms_user)--判断是否存在此表DROP TABLE hkcms_user CREATE TABLE hkcms_user (id int primary key identity(1, 1),username char(32) NOT N…...
java多线程一
1、什么是线程 线程(Thread)是一条程序内部的一条执行流程。 程序中如果只有一条执行流程,那这个程序就是单线程的程序。 2、什么是多线程 多线程(multithreading),是指从软件或者硬件上实现多个线程并发执…...
电脑技巧:电脑常见蓝屏、上不了网等故障及解决办法
目录 一、电脑蓝屏 常见原因1: 病毒木马 常见原因2: 安装了不兼容的软件 二、电脑不能上网 常见原因1: 新装系统无驱动 常见原因2: DNS服务器异常 常见原因3: 硬件问题 三、电脑没声音 常见原因1: 未安装驱动 常见原因2: 硬件故障 四、电脑屏幕不显示 常见原因1: 显…...
大语言模型损失函数详解
我们可以把语言模型分为两类: 自动回归式语言模型:自动回归式语言模型在本质上是单向的,也就是说,它只沿着一个方向阅读句子。正向(从左到右)预测;反向(从右到左)预测。…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
