Skip to content

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 地址
  • status: StringEnum("running" | "stopped"), 节点连通状态:poll 节点反映最近一次轮询结果(任何 HTTP 响应都视为可达),sse 节点反映 SSE 连接状态,net4mqtt 节点反映发现(presence)状态
  • duration: String, 最近一次节点接触的往返耗时(如 "12ms"):poll 节点为轮询 RTT,sse 节点为连接握手 RTT,或者 liveman 刷新节点构建信息时 /api/info 请求的 RTT;首次成功接触前为 "-"
  • info: Object, 可选 — 节点自身 GET /api/info 的构建信息(version、gitHash、buildTime、features),由 liveman 缓存并在节点重连时刷新;首次拉取成功前不出现该字段

例如:

json
[
  {
    "alias": "buildin-0",
    "url": "http://127.0.0.1:55581",
    "status": "running",
    "duration": "3ms",
    "info": {
      "version": "v0.10.2",
      "gitHash": "b789a64",
      "buildTime": "2026-09-28T10:00:00+00:00",
      "features": ["webui", "cascade", "recorder", "source-all"]
    }
  },
  {
    "alias": "buildin-1",
    "url": "http://127.0.0.1:55582",
    "status": "running",
    "duration": "5ms"
  },
  {
    "alias": "buildin-2",
    "url": "http://127.0.0.1:55583",
    "status": "stopped",
    "duration": "-"
  }
]

Source ​

源管理接口按节点代理({alias}):liveman 将请求改写为对应节点上的相同路径,并注入该节点的 bearer token 转发,因此集群客户端只需通过 liveman 管理各节点的源。请求/响应体即为节点的 liveion 源 API —— 参见 live777 API / 媒体源。别名不存在时返回 [503]。

GET /api/sources/{alias}

列出该节点的源。

POST /api/sources/{alias}/{stream}

创建源。创建成功后 liveman 会立即登记 stream→node 映射,使 WHEP 路由在下一次节点快照之前即可生效。

GET /api/sources/{alias}/{stream}

获取源信息。

DELETE /api/sources/{alias}/{stream}

删除源。

GET /api/sources/{alias}/{stream}/state

获取源的运行状态。

GET /api/sources/{alias}/{stream}/bitrate

获取编码器码率遥测。

GET /api/sources/{alias}/{stream}/tier

获取源的质量档位。

POST /api/sources/{alias}/{stream}/tier

应用源的质量档位。

Stream ​

获取所有流 ​

此API将合并所有节点的流

GET /api/streams/

Response: [200]

  • id: String, streamId
  • createdAt: Int, timestamp
  • publish: Object(PubSub), about publisher
  • subscribe: 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"
        }
      ]
    }
  }
}

流状态 SSE ​

此API推送与 GET /api/streams/ 相同的合并视图

GET /api/sse/streams

Server-Sent Events 端点,和管理接口使用同样的鉴权。

当存储的集群状态发生变化时,推送所有流的全量合并快照(按流 ID 合并各节点的快照)。每条 SSE 消息都是一个流对象的 JSON 数组,格式与 GET /api/streams/ 一致(包括 statsScope 标记)。可选的 ?nodes=<alias> 查询参数(可重复)将视图限制在指定节点,语义与 GET /api/streams/ 相同。

连接建立时立即发送第一条消息;之后每次状态变化都会发送,内容相同的连续负载会被去重。对于轮询模式(poll)的节点,只要至少有一个客户端保持连接,快照就按轮询周期刷新。

Released under the MPL-2.0 License.