LiveMan HTTP API
Live777 集群管理器
WHIP && WHEP
POST /whip/:streamId
Response: [201]
POST /whep/:streamId
Response: [201]
PATCH /session/:streamId/:sessionId
Response: [204]
DELETE /session/:streamId/:sessionId
Response: [204]
Recording & Playback
录制与回放相关 API(索引列表与代理)
列出存在录制索引的流
GET /api/playback
响应: [200] application/json
json
["camera01", "roomA", "web-0001"]根据流列出录制索引
GET /api/playback/{stream}
响应: [200] application/json
json
[
{ "year": 2025, "month": 7, "day": 24, "mpd_path": "camera01/2025/07/24/manifest.mpd" }
]代理获取分片文件
GET /api/record/object/{path}
path: 录制对象在存储中的 URL 编码路径(如camera01/2025/07/24/manifest.mpd)
响应: [200] 二进制媒体数据,Content-Type 通过文件扩展名推断(例如 .mpd 为 application/dash+xml,.m4s/.mp4 为 video/mp4)。
响应: [200] application/dash+xml
xml
<?xml version="1.0"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" ...>
<!-- MPEG-DASH manifest content -->
</MPD>获取分片文件
代理访问录制的分片文件。
GET /api/record/object/{path}
路径参数: 分片文件的存储路径(URL编码)
响应: [200] 二进制媒体数据 或 [302] 重定向到存储URL
Node
GET /api/nodes/
Response: [200]
alias: String, 别名必须唯一url: String, 节点 API 的 URL 地址pub_max: Int16, 最大支持推流数sub_max: Int16, 最大支持订阅数status: StringEnum("running" | "stopped"), 节点状态
例如:
json
[
{
"alias": "buildin-0",
"url": "http://127.0.0.1:55581",
"pub_max": 65535,
"sub_max": 1,
"status": "running"
},
{
"alias": "buildin-1",
"url": "http://127.0.0.1:55582",
"pub_max": 65535,
"sub_max": 1,
"status": "running"
},
{
"alias": "buildin-2",
"url": "http://127.0.0.1:55583",
"pub_max": 65535,
"sub_max": 1,
"status": "running"
}
]Stream
获取所有流
此API将合并所有节点的流
GET /api/streams/
Response: [200]
id: String,streamIdcreatedAt: Int,timestamppublish:Object(PubSub), about publishersubscribe:Object(PubSub), about subscriber(publish | subscribe).leaveAt: Int,timestamp(publish | subscribe).sessions: Array,sessions(publish | subscribe).sessions.[].id: String,sessionId(publish | subscribe).sessions.[].createdAt: Int,timestamp(publish | subscribe).sessions.[].state: String, RTCPeerConnection/connectionState(publish | subscribe).sessions.[].cascade: Optional(Object(Cascade)
例如:
json
[
{
"id": "push",
"createdAt": 1719326206862,
"publish": {
"leaveAt": 0,
"sessions": [
{
"id": "08c1f2a0a60b0deeb66ee572bd369f80",
"createdAt": 1719326206947,
"state": "connected"
}
]
},
"subscribe": {
"leaveAt": 1719326206862,
"sessions": []
}
},
{
"id": "pull",
"createdAt": 1719326203854,
"publish": {
"leaveAt": 0,
"sessions": [
{
"id": "41b2c52da4fb1eed5a3bff9a9a200d80",
"createdAt": 1719326205079,
"state": "connected",
"cascade": {
"src": "http://localhost:7777/whep/web-0",
"resource": "http://localhost:7777/session/web-0/aabc02240abfc7f4800e8d9a6f087808"
}
}
]
},
"subscribe": {
"leaveAt": 1719326203854,
"sessions": []
}
},
{
"id": "web-0",
"createdAt": 1719326195910,
"publish": {
"leaveAt": 0,
"sessions": [
{
"id": "0dc47d8da8eb0a64fe40f461f47c2a36",
"createdAt": 1719326196264,
"state": "connected"
}
]
},
"subscribe": {
"leaveAt": 0,
"sessions": [
{
"id": "aabc02240abfc7f4800e8d9a6f087808",
"createdAt": 1719326204997,
"state": "connected"
},
{
"id": "dab1a9e88b2400cfd4bcfb4487588ef3",
"createdAt": 1719326206798,
"state": "connected",
"cascade": {
"dst": "http://localhost:7777/whip/push",
"resource": "http://localhost:7777/session/push/08c1f2a0a60b0deeb66ee572bd369f80"
}
},
{
"id": "685beee8650b761116b581a4a87ca9b9",
"createdAt": 1719326228314,
"state": "connected"
}
]
}
}
]获取流详情
此API将返回指定流在所有节点上的信息
GET /api/streams/:streamId
Response: [200]
json
{
"buildin-1": {
"id": "web-0",
"createdAt": 1719415906241,
"publish": {
"leaveAt": 0,
"sessions": []
},
"subscribe": {
"leaveAt": 0,
"sessions": [
{
"id": "04eaae154975b61d62fc2e81b2b0862f",
"createdAt": 1719415906274,
"state": "connected"
}
]
}
},
"buildin-0": {
"id": "web-0",
"createdAt": 1719415876416,
"publish": {
"leaveAt": 0,
"sessions": [
{
"id": "6ea2c116b93dde47032c7ea19349dc78",
"createdAt": 1719415876510,
"state": "connected"
}
]
},
"subscribe": {
"leaveAt": 0,
"sessions": [
{
"id": "369227db507bf2addbb55313e0eb99a0",
"createdAt": 1719415885569,
"state": "connected"
}
]
}
}
}