RtspToWeb Api说明
RTSPtoWeb API
Streams
List streams
Request
GET /streams
curl http://demo:demo@127.0.0.1:8083/streams
Response
{
"status": 1,
"payload": {
"demo1": {
"name": "test video",
"channels": {
"0": {
"name": "ch1",
"url": "rtsp://admin:admin@{YOUR_CAMERA_IP}/uri",
"on_demand": true,
"debug": false,
"status": 0
},
"1": {
"name": "ch2",
"url": "rtsp://admin:admin@{YOUR_CAMERA_IP}/uri",
"on_demand": true,
"debug": false,
"status": 0
}
}
},
"demo2": {
"name": "test video",
"channels": {
"0": {
"name": "ch1",
"url": "rtsp://admin:admin@{YOUR_CAMERA_IP}/uri",
"on_demand": true,
"debug": false,
"status": 0
},
"1": {
"name": "ch2",
"url": "rtsp://admin:admin@{YOUR_CAMERA_IP}/uri",
"on_demand": true,
"debug": false,
"status": 0
}
}
}
}
}
Add a stream
Request
POST /stream/{STREAM_ID}/add
curl \
--header "Content-Type: application/json" \
--request POST \
--data '{
"name": "test video",
"channels": {
"0": {
"name": "ch1",
"url": "rtsp://admin:admin@{YOUR_CAMERA_IP}/uri",
"on_demand": true,
"debug": false,
"status": 0
},
"1": {
"name": "ch2",
"url": "rtsp://admin:admin@{YOUR_CAMERA_IP}/uri",
"on_demand": true,
"debug": false,
"status": 0
}
}
}' \
http://demo:demo@127.0.0.1:8083/stream/{STREAM_ID}/add
Response
{
"status": 1,
"payload": "success"
}
Update a stream
Request
POST /stream/{STREAM_ID}/edit
curl \
--header "Content-Type: application/json" \
--request POST \
--data '{
"name": "test video",
"channels": {
"0": {
"name": "ch1",
"url": "rtsp://admin:admin@{YOUR_CAMERA_IP}/uri",
"on_demand": true,
"debug": false,
"status": 0
},
"1": {
"name": "ch2",
"url": "rtsp://admin:admin@{YOUR_CAMERA_IP}/uri",
"on_demand": true,
"debug": false,
"status": 0
}
}
}' \
http://demo:demo@127.0.0.1:8083/stream/{STREAM_ID}/edit
Response
{
"status": 1,
"payload": "success"
}
Reload a stream
Request
GET /stream/{STREAM_ID}/reload
curl http://demo:demo@127.0.0.1:8083/stream/{STREAM_ID}/reload
Response
{
"status": 1,
"payload": "success"
}
Get stream info
Request
GET /stream/{STREAM_ID}/info
curl http://demo:demo@127.0.0.1:8083/stream/{STREAM_ID}/info
Response
{
"status": 1,
"payload": {
"name": "test video",
"channels": {
"0": {
"name": "ch1",
"url": "rtsp://admin:admin@{YOUR_CAMERA_IP}/uri",
"on_demand": true,
"debug": false,
"status": 0
},
"1": {
"name": "ch2",
"url": "rtsp://admin:admin@{YOUR_CAMERA_IP}/uri",
"on_demand": true,
"debug": false,
"status": 0
}
}
}
}
Delete a stream
Request
GET /stream/{STREAM_ID}/delete
curl http://demo:demo@127.0.0.1:8083/stream/{STREAM_ID}/delete
Response
{
"status": 1,
"payload": "success"
}
Channels
Add a channel to a stream
Request
POST /stream/{STREAM_ID}/channel/{CHANNEL_ID}/add
curl \
--header "Content-Type: application/json" \
--request POST \
--data '{
"name": "ch4",
"url": "rtsp://admin:admin@{YOUR_CAMERA_IP}/uri",
"on_demand": false,
"debug": false,
"status": 0
}' \
http://demo:demo@127.0.0.1:8083/stream/{STREAM_ID}/channel/{CHANNEL_ID}/add
Response
{
"status": 1,
"payload": "success"
}
Update a stream channel
Request
POST /stream/{STREAM_ID}/channel/{CHANNEL_ID}/edit
curl \
--header "Content-Type: application/json" \
--request POST \
--data '{
"name": "ch4",
"url": "rtsp://admin:admin@{YOUR_CAMERA_IP}/uri",
"on_demand": true,
"debug": false,
"status": 0
}' \
http://demo:demo@127.0.0.1:8083/stream/{STREAM_ID}/channel/{CHANNEL_ID}/edit
Response
{
"status": 1,
"payload": "success"
}
Reload a stream channel
Request
GET /stream/{STREAM_ID}/channel/{CHANNEL_ID}/reload
curl http://demo:demo@127.0.0.1:8083/stream/{STREAM_ID}/channel/{CHANNEL_ID}/reload
Response
{
"status": 1,
"payload": "success"
}
Get stream channel info
Request
GET /stream/{STREAM_ID}/channel/{CHANNEL_ID}/info
curl http://demo:demo@127.0.0.1:8083/stream/{STREAM_ID}/channel/{CHANNEL_ID}/info
Response
{
"status": 1,
"payload": {
"name": "ch4",
"url": "rtsp://admin:admin@{YOUR_CAMERA_IP}/uri",
"on_demand": false,
"debug": false,
"status": 1
}
}
Get stream channel codec
Request
GET /stream/{STREAM_ID}/{CHANNEL_ID}/codec
curl http://demo:demo@127.0.0.1:8083/stream/{STREAM_ID}/{CHANNEL_ID}/codec
Response
{
"status": 1,
"payload": [
{
"Record": "AU0AFP/hABRnTQAUlahQfoQAAAMABAAAAwCiEAEABGjuPIA=",
"RecordInfo": {
"AVCProfileIndication": 77,
"ProfileCompatibility": 0,
"AVCLevelIndication": 20,
"LengthSizeMinusOne": 3,
"SPS": [
"Z00AFJWoUH6EAAADAAQAAAMAohA="
],
"PPS": [
"aO48gA=="
]
},
"SPSInfo": {
"ProfileIdc": 77,
"LevelIdc": 20,
"MbWidth": 20,
"MbHeight": 15,
"CropLeft": 0,
"CropRight": 0,
"CropTop": 0,
"CropBottom": 0,
"Width": 320,
"Height": 240
}
}
]
}
Delete a stream channel
Request
GET /stream/{STREAM_ID}/channel/{CHANNEL_ID}/delete
curl http://demo:demo@127.0.0.1:8083/stream/{STREAM_ID}/channel/{CHANNEL_ID}/delete
Response
{
"status": 1,
"payload": "success"
}
Video endpoints
HLS
GET /stream/{STREAM_ID}/channel/{CHANNEL_ID}/hls/live/index.m3u8
curl http://127.0.0.1:8083/stream/{STREAM_ID}/channel/{CHANNEL_ID}/hls/live/index.m3u8
ffplay http://127.0.0.1:8083/stream/{STREAM_ID}/channel/{CHANNEL_ID}/hls/live/index.m3u8
HLS-LL
GET /stream/{STREAM_ID}/channel/{CHANNEL_ID}/hlsll/live/index.m3u8
curl http://127.0.0.1:8083/stream/{STREAM_ID}/channel/{CHANNEL_ID}/hlsll/live/index.m3u8
ffplay http://127.0.0.1:8083/stream/{STREAM_ID}/channel/{CHANNEL_ID}/hlsll/live/index.m3u8
MSE
/stream/{STREAM_ID}/channel/{CHANNEL_ID}/mse?uuid={STREAM_ID}&channel={CHANNEL_ID}
ws://127.0.0.1:8083/stream/{STREAM_ID}/channel/{CHANNEL_ID}/mse?uuid={STREAM_ID}&channel={CHANNEL_ID}
NOTE: Use wss
for a secure connection.
WebRTC
/stream/{STREAM_ID}/channel/{CHANNEL_ID}/webrtc
http://127.0.0.1:8083/stream/{STREAM_ID}/channel/{CHANNEL_ID}/webrtc
Request
The request is an HTTP POST
with a parameter data
that is a base64 encoded SDP offer (e.g. v=0...
) from a WebRTC client.
Response
The response is a base64 encoded SDP Answer.
RTSP
/{STREAM_ID}/{CHANNEL_ID}
rtsp://127.0.0.1:{RTSP_PORT}/{STREAM_ID}/{CHANNEL_ID}
ffplay -rtsp_transport tcp rtsp://127.0.0.1/{STREAM_ID}/{CHANNEL_ID}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术