You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
RTSPtoWeb/docs/api.md

471 lines
9.4 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# RTSPtoWeb API
* [流管理](#streams)
* [列出流](#list-streams)
* [添加流](#add-a-stream)
* [更新流](#update-a-stream)
* [重新加载流](#reload-a-stream)
* [获取流信息](#get-stream-info)
* [删除流](#delete-a-stream)
* [通道管理](#channels)
* [向流添加通道](#add-a-channel-to-a-stream)
* [更新流通道](#update-a-stream-channel)
* [重新加载流通道](#reload-a-stream-channel)
* [获取流通道信息](#get-stream-channel-info)
* [获取流通道编解码器](#get-stream-channel-codec)
* [删除流通道](#delete-a-stream-channel)
* [视频端点](#video-endpoints)
* [HLS](#hls)
* [HLS-LL](#hls-ll)
* [MSE](#mse)
* [WebRTC](#webrtc)
* [RTSP](#rtsp)
## 流管理
### 列出流
#### 请求
`GET /streams`
```bash
curl http://demo:demo@127.0.0.1:8083/streams
```
#### 响应
```json
{
"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
}
}
}
}
}
```
### 添加流
#### 请求
`POST /stream/{STREAM_ID}/add`
```bash
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
```
#### 响应
```json
{
"status": 1,
"payload": "success"
}
```
### 更新流
#### 请求
`POST /stream/{STREAM_ID}/edit`
```bash
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
```
#### 响应
```json
{
"status": 1,
"payload": "success"
}
```
### 重新加载流
#### 请求
`GET /stream/{STREAM_ID}/reload`
```bash
curl http://demo:demo@127.0.0.1:8083/stream/{STREAM_ID}/reload
```
#### 响应
```json
{
"status": 1,
"payload": "success"
}
```
### 获取流信息
#### 请求
`GET /stream/{STREAM_ID}/info`
```bash
curl http://demo:demo@127.0.0.1:8083/stream/{STREAM_ID}/info
```
#### 响应
```json
{
"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
}
}
}
}
```
### 删除流
#### 请求
`GET /stream/{STREAM_ID}/delete`
```bash
curl http://demo:demo@127.0.0.1:8083/stream/{STREAM_ID}/delete
```
#### 响应
```json
{
"status": 1,
"payload": "success"
}
```
## 通道管理
### 向流添加通道
#### 请求
`POST /stream/{STREAM_ID}/channel/{CHANNEL_ID}/add`
```bash
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
```
#### 响应
```json
{
"status": 1,
"payload": "success"
}
```
### 更新流通道
#### 请求
`POST /stream/{STREAM_ID}/channel/{CHANNEL_ID}/edit`
```bash
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
```
#### 响应
```json
{
"status": 1,
"payload": "success"
}
```
### 重新加载流通道
#### 请求
`GET /stream/{STREAM_ID}/channel/{CHANNEL_ID}/reload`
```bash
curl http://demo:demo@127.0.0.1:8083/stream/{STREAM_ID}/channel/{CHANNEL_ID}/reload
```
#### 响应
```json
{
"status": 1,
"payload": "success"
}
```
### 获取流通道信息
#### 请求
`GET /stream/{STREAM_ID}/channel/{CHANNEL_ID}/info`
```bash
curl http://demo:demo@127.0.0.1:8083/stream/{STREAM_ID}/channel/{CHANNEL_ID}/info
```
#### 响应
```json
{
"status": 1,
"payload": {
"name": "ch4",
"url": "rtsp://admin:admin@{YOUR_CAMERA_IP}/uri",
"on_demand": false,
"debug": false,
"status": 1
}
}
```
### 获取流通道编解码器
#### 请求
`GET /stream/{STREAM_ID}/{CHANNEL_ID}/codec`
```bash
curl http://demo:demo@127.0.0.1:8083/stream/{STREAM_ID}/{CHANNEL_ID}/codec
```
#### 响应
```json
{
"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
}
}
]
}
```
### 删除流通道
#### 请求
`GET /stream/{STREAM_ID}/channel/{CHANNEL_ID}/delete`
```bash
curl http://demo:demo@127.0.0.1:8083/stream/{STREAM_ID}/channel/{CHANNEL_ID}/delete
```
#### 响应
```json
{
"status": 1,
"payload": "success"
}
```
## 视频端点
### HLS
`GET /stream/{STREAM_ID}/channel/{CHANNEL_ID}/hls/live/index.m3u8`
```bash
curl http://127.0.0.1:8083/stream/{STREAM_ID}/channel/{CHANNEL_ID}/hls/live/index.m3u8
```
```bash
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`
```bash
curl http://127.0.0.1:8083/stream/{STREAM_ID}/channel/{CHANNEL_ID}/hlsll/live/index.m3u8
```
```bash
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}
```
注意:使用 `wss` 进行安全连接。
### WebRTC
`/stream/{STREAM_ID}/channel/{CHANNEL_ID}/webrtc`
```
http://127.0.0.1:8083/stream/{STREAM_ID}/channel/{CHANNEL_ID}/webrtc
```
#### Request
请求是一个 HTTP `POST`,包含 FormData 参数 `data`,该参数是来自 WebRTC 客户端的 base64 编码的 SDP offer例如 `v=0...`)。
#### 响应
响应是一个 base64 编码的 SDP Answer。
### RTSP
`/{STREAM_ID}/{CHANNEL_ID}`
```
rtsp://127.0.0.1:{RTSP_PORT}/{STREAM_ID}/{CHANNEL_ID}
```
```bash
ffplay -rtsp_transport tcp rtsp://127.0.0.1/{STREAM_ID}/{CHANNEL_ID}
```