一、概述
本文檔涵蓋Ceres云端流拉取相關(guān)GraphQL接口,用于通知ceres服務(wù)從設(shè)備拉流并獲取拉流URL,或終止已建立的流連接。支持三種流拉取初始化接口(適配不同認(rèn)證場(chǎng)景)和一種流終止接口。
說(shuō)明:
- 所有接口統(tǒng)一通過(guò)
POST方法請(qǐng)求,請(qǐng)求路徑為/ceres; - 支持
RTSP (over TLS)和HLS兩種流格式; - 接口支持實(shí)時(shí)流拉取和回放流拉取,回放需指定相關(guān)回放參數(shù);
- 需提前向TUTK申請(qǐng)
realm信息,用于接口身份校驗(yàn); - 響應(yīng)數(shù)據(jù)統(tǒng)一包含在
data字段中,核心返回值為狀態(tài)碼(code)、拉流URL(url)和錯(cuò)誤信息(msg)。
二、GraphQL 接口
所有接口請(qǐng)求地址:
https://domain:port/ceres(實(shí)際部署時(shí)替換為真實(shí)域名和端口),請(qǐng)求方式均為 POST,Content-Type 默認(rèn)為 application/json。(一)init_streaming
通知ceres從設(shè)備拉流并獲取拉流URL,適配P2P場(chǎng)景下基于
account/password 的認(rèn)證方式,支持實(shí)時(shí)流拉取。請(qǐng)求說(shuō)明
| 項(xiàng) | 說(shuō)明 |
|---|---|
| HTTP請(qǐng)求方式 | POST(固定URL:https://domain:port/ceres) |
| 請(qǐng)求頭(Header) | Content-Type: application/json |
輸入?yún)?shù)
| 參數(shù)名 | 類型 | 必選 | 說(shuō)明 | 備注 |
|---|---|---|---|---|
device | string | 是 | 設(shè)備的UID,長(zhǎng)度為20位或40位 | 核心標(biāo)識(shí)參數(shù) |
account | string | 是 | [P2P] 連線 avClientStart 中的 account(AVAPI) | P2P場(chǎng)景必填 |
password | string | 是 | [P2P] 連線 avClientStart 中的 password(AVAPI) | P2P場(chǎng)景必填 |
protocol | string | 是 | 流格式,可選值:rtsp(rtsp over TLS)、hls | 僅支持指定的兩種格式 |
realm | string | 是 | realm,客戶向TUTK申請(qǐng) | 身份校驗(yàn)核心參數(shù) |
state | string | 是 | 客戶自定義信息,用于第三方驗(yàn)證 | 自定義校驗(yàn)字段 |
authkey | string | 否 | [P2P] 設(shè)備 loginEx 的連線密碼,使用 login 方式則無(wú)需填寫 | 可選參數(shù) |
authToken | string | 否 | 第三方 auth 的 token | 可選參數(shù) |
authType | string | 否 | authToken 的類型,如:Bearer 或 JWT | 與 authToken 配套使用 |
channel | int | 否 | 設(shè)備的通道 | 默認(rèn)使用默認(rèn)通道 |
返回值
| 參數(shù)名 | 類型 | 說(shuō)明 |
|---|---|---|
code | string | 小于0失敗,0為成功 |
url | string | 拉流的地址(成功時(shí)返回有效地址,失敗時(shí)為空字符串) |
msg | string | 失敗的錯(cuò)誤信息(成功時(shí)為空字符串) |
響應(yīng)狀態(tài)碼
| 狀態(tài)碼 | 徽章 | 說(shuō)明 |
|---|---|---|
200 | 成功 | 請(qǐng)求成功,返回拉流信息 |
400 | 參數(shù)錯(cuò)誤 | 必填參數(shù)缺失或格式錯(cuò)誤 |
401 | 認(rèn)證失敗 | realm無(wú)效、account/password錯(cuò)誤或第三方驗(yàn)證失敗 |
請(qǐng)求示例(curl)
init_streaming 請(qǐng)求示例(curl命令)
curl -XPOST -d '{
"query": "query {
init_streaming(
authToken:\"dm verify token\",
authType:\"Bearer\",
device:\"device UID\",
account:\"user\",
password:\"secret\",
protocol:\"rtsp\",
realm:\"rd\",
state:\"state\",
authkey:\"auth auth\",
channel:0
){
code,
url,
msg
}
}"
}' https://domain:port/ceres
響應(yīng)示例(成功)
init_streaming 成功響應(yīng)示例
{
"data": {
"init_streaming": {
"code": 0,
"url": "rtsp://192.168.55.10:8554/de89bbd28252c7bde7e09223f078529f85279e86",
"msg": ""
}
}
}
(二)init_streaming_v3
通知ceres從設(shè)備拉流并獲取拉流URL,適配P2P場(chǎng)景下基于
avtoken/identity 的認(rèn)證方式,支持實(shí)時(shí)流和回放流拉取。請(qǐng)求說(shuō)明
| 項(xiàng) | 說(shuō)明 |
|---|---|
| HTTP請(qǐng)求方式 | POST(固定URL:https://domain:port/ceres) |
| 請(qǐng)求頭(Header) | Content-Type: application/json |
輸入?yún)?shù)
| 參數(shù)名 | 類型 | 必選 | 說(shuō)明 | 備注 |
|---|---|---|---|---|
device | string | 是 | 設(shè)備的UID,長(zhǎng)度為20位或40位 | 核心標(biāo)識(shí)參數(shù) |
avtoken | string | 是 | [P2P] 連線 avClientStart 中的 avtoken/av password(AVAPI) | P2P場(chǎng)景必填 |
identity | string | 是 | [P2P] 連線 avClientStart 中的 account 或 identity(AVAPI) | P2P場(chǎng)景必填 |
protocol | string | 是 | 流格式,可選值:rtsp(rtsp over TLS)、hls | 僅支持指定的兩種格式 |
realm | string | 是 | realm,客戶向TUTK申請(qǐng) | 身份校驗(yàn)核心參數(shù) |
state | string | 是 | 客戶自定義信息,用于第三方驗(yàn)證 | 自定義校驗(yàn)字段 |
authkey | string | 否 | [P2P] 設(shè)備 loginEx 的連線密碼,使用 login 方式則無(wú)需填寫 | 可選參數(shù) |
avType | string | 否 | [P2P] av通道創(chuàng)建驗(yàn)證的密碼類型,可選值:authToken、authPass | 可選參數(shù) |
authToken | string | 否 | 第三方 auth 的 token | 可選參數(shù) |
authType | string | 否 | authToken 的類型,如:Bearer 或 JWT | 與 authToken 配套使用 |
channel | int | 否 | 設(shè)備的通道 | 默認(rèn)使用默認(rèn)通道 |
playbackFile | string | 否 | 回放的文件名 | 回放場(chǎng)景必填 |
playbackChannel | int | 否 | 回放的通道 | 回放場(chǎng)景必填 |
playbackTimestamp | int | 否 | 回放的時(shí)間戳,最早不超過(guò)1年 | 回放場(chǎng)景必填 |
返回值
| 參數(shù)名 | 類型 | 說(shuō)明 |
|---|---|---|
code | string | 小于0失敗,0為成功 |
url | string | 拉流的地址(成功時(shí)返回有效地址,失敗時(shí)為空字符串) |
msg | string | 失敗的錯(cuò)誤信息(成功時(shí)為空字符串) |
響應(yīng)狀態(tài)碼
| 狀態(tài)碼 | 徽章 | 說(shuō)明 |
|---|---|---|
200 | 成功 | 請(qǐng)求成功,返回拉流信息 |
400 | 參數(shù)錯(cuò)誤 | 必填參數(shù)缺失、格式錯(cuò)誤或回放場(chǎng)景參數(shù)不完整 |
401 | 認(rèn)證失敗 | realm無(wú)效、avtoken/identity錯(cuò)誤或第三方驗(yàn)證失敗 |
請(qǐng)求示例(curl)
init_streaming_v3 請(qǐng)求示例(curl命令)
curl -XPOST -d '{
"query": "query {
init_streaming_v3(
device:\"device UID\",
authToken:\"dm verify token\",
authType:\"Bearer\",
avtoken:\"user\",
authkey:\"secret\",
avType:\"authToken\",
protocol:\"rtsp\",
identity:\"admin\",
realm:\"rd\",
state:\"state\",
channel:0
){
code,
url,
msg
}
}"
}' https://domain:port/ceres
響應(yīng)示例(成功)
init_streaming_v3 成功響應(yīng)示例
{
"data": {
"init_streaming_v3": {
"code": 0,
"url": "rtsp://192.168.55.10:8554/de89bbd28252c7bde7e09223f078529f85279e86",
"msg": ""
}
}
}
(三)init_streaming_v4
通知ceres從設(shè)備拉流并獲取拉流URL,適配基于設(shè)備
credential 的認(rèn)證方式,支持實(shí)時(shí)流和回放流拉取,配置更簡(jiǎn)潔。請(qǐng)求說(shuō)明
| 項(xiàng) | 說(shuō)明 |
|---|---|
| HTTP請(qǐng)求方式 | POST(固定URL:https://domain:port/ceres) |
| 請(qǐng)求頭(Header) | Content-Type: application/json |
輸入?yún)?shù)
| 參數(shù)名 | 類型 | 必選 | 說(shuō)明 | 備注 |
|---|---|---|---|---|
device | string | 是 | 設(shè)備的UDID | 核心標(biāo)識(shí)參數(shù) |
credential | string | 是 | 設(shè)備的連線憑證/秘鑰:credential | 認(rèn)證核心參數(shù) |
protocol | string | 是 | 流格式,可選值:rtsp(rtsp over TLS)、hls | 僅支持指定的兩種格式 |
realm | string | 是 | realm,客戶向TUTK申請(qǐng) | 身份校驗(yàn)核心參數(shù) |
state | string | 是 | 客戶自定義信息,用于第三方驗(yàn)證 | 自定義校驗(yàn)字段 |
authToken | string | 否 | 第三方 auth 的 token | 可選參數(shù) |
authType | string | 否 | authToken 的類型,如:Bearer 或 JWT | 與 authToken 配套使用 |
channel | int | 否 | 設(shè)備的通道 | 默認(rèn)使用默認(rèn)通道 |
playbackFile | string | 否 | 回放的文件名 | 回放場(chǎng)景必填 |
playbackChannel | int | 否 | 回放的通道 | 回放場(chǎng)景必填 |
playbackTimestamp | int | 否 | 回放的時(shí)間戳,最早不超過(guò)1年 | 回放場(chǎng)景必填 |
返回值
| 參數(shù)名 | 類型 | 說(shuō)明 |
|---|---|---|
code | string | 小于0失敗,0為成功 |
url | string | 拉流的地址(成功時(shí)返回有效地址,失敗時(shí)為空字符串) |
msg | string | 失敗的錯(cuò)誤信息(成功時(shí)為空字符串) |
響應(yīng)狀態(tài)碼
| 狀態(tài)碼 | 徽章 | 說(shuō)明 |
|---|---|---|
200 | 成功 | 請(qǐng)求成功,返回拉流信息 |
400 | 參數(shù)錯(cuò)誤 | 必填參數(shù)缺失、格式錯(cuò)誤或回放場(chǎng)景參數(shù)不完整 |
401 | 認(rèn)證失敗 | realm無(wú)效、credential錯(cuò)誤或第三方驗(yàn)證失敗 |
請(qǐng)求示例(curl)
init_streaming_v4 請(qǐng)求示例(curl命令)
curl -XPOST -d '{
"query": "query {
init_streaming_v4(
authToken:\"dm verify token\",
authType:\"Bearer\",
device:\"device UID\",
credential:\"credential\",
protocol:\"rtsp\",
realm:\"rd\",
state:\"state\",
channel:0
){
code,
url,
msg
}
}"
}' https://domain:port/ceres
響應(yīng)示例(成功)
init_streaming_v4 成功響應(yīng)示例
{
"data": {
"init_streaming_v4": {
"code": 0,
"url": "rtsp://192.168.55.10:8554/de89bbd28252c7bde7e09223f078529f85279e86",
"msg": ""
}
}
}
(四)terminate_streaming
通知ceres停止拉流,釋放相關(guān)連接資源。
請(qǐng)求說(shuō)明
| 項(xiàng) | 說(shuō)明 |
|---|---|
| HTTP請(qǐng)求方式 | POST(固定URL:https://domain:port/ceres) |
| 請(qǐng)求頭(Header) | Content-Type: application/json |
輸入?yún)?shù)
| 參數(shù)名 | 類型 | 必選 | 說(shuō)明 | 備注 |
|---|---|---|---|---|
device | string | 是 | device UID | 核心標(biāo)識(shí)參數(shù) |
state | string | 是 | 客戶自定義信息,用于第三方驗(yàn)證 | 自定義校驗(yàn)字段 |
protocol | string | 否 | 流格式,可選值:rtsp(rtsp over TLS)、hls | 可選參數(shù),指定需終止的流格式 |
authToken | string | 否 | 第三方驗(yàn)證token,用于身份校驗(yàn) | 可選參數(shù),用于驗(yàn)證 |
authType | string | 否 | token類型,如:Bearer 或 JWT | 與 authToken 配套使用 |
playbackFile | string | 否 | 回放的文件名 | 回放流終止時(shí)必填 |
channel | int | 否 | 需終止的通道編號(hào) | 多通道場(chǎng)景建議指定 |
返回值
| 參數(shù)名 | 類型 | 說(shuō)明 |
|---|---|---|
code | string | 小于0失敗,0為成功 |
msg | string | 失敗的錯(cuò)誤信息(成功時(shí)為空字符串) |
響應(yīng)狀態(tài)碼
| 狀態(tài)碼 | 徽章 | 說(shuō)明 |
|---|---|---|
200 | 成功 | 請(qǐng)求成功,流連接已終止 |
400 | 參數(shù)錯(cuò)誤 | 必填參數(shù)缺失或格式錯(cuò)誤 |
401 | 認(rèn)證失敗 | 第三方驗(yàn)證失敗或權(quán)限不足 |
404 | 未找到 | 指定設(shè)備或流連接不存在 |
請(qǐng)求示例(curl)
terminate_streaming 請(qǐng)求示例(curl命令)
curl -XPOST -d '{
"query": "query {
terminate_streaming(
authToken:\"dm verify token\",
authType:\"Bearer\",
device:\"device UID\",
state:\"state\",
channel:0
){
code,
msg
}
}"
}' https://domain:port/ceres
響應(yīng)示例(成功)
terminate_streaming 成功響應(yīng)示例
{
"data": {
"terminate_streaming": {
"code": 0,
"msg": ""
}
}
}
三、錯(cuò)誤碼說(shuō)明
HTTP錯(cuò)誤碼:
400(請(qǐng)求錯(cuò)誤),具體錯(cuò)誤原因通過(guò)返回體中的 code 字段和 msg 字段說(shuō)明。| 錯(cuò)誤碼(code) | 錯(cuò)誤消息(msg) | 說(shuō)明 | 處理建議 |
|---|---|---|---|
0 | ""(空字符串) | Success(操作成功) | - |
-1 | 設(shè)備連線失敗 | SDK返回報(bào)錯(cuò),或者已經(jīng)有在拉取其他格式的流 | 檢查設(shè)備狀態(tài),確認(rèn)無(wú)其他流連接占用,重試?yán)?/td> |
-2 | 協(xié)議不支持 | 目前只支持 hls 或者 rtsp(rtsp over TLS) | 使用支持的流格式重新請(qǐng)求 |
-3 | 驗(yàn)證失敗 | 第三方驗(yàn)證失敗 | 檢查 authToken 有效性和權(quán)限配置 |
-4 | 參數(shù)錯(cuò)誤 | 部分參數(shù)錯(cuò)誤 | 對(duì)照接口文檔檢查參數(shù)格式和必填項(xiàng) |
-5 | 通道占用 | 指定通道已被其他流連接占用 | 終止該通道已有連接后重試,或更換通道編號(hào) |
錯(cuò)誤響應(yīng)示例
接口錯(cuò)誤響應(yīng)示例
{
"data": {
"init_streaming": {
"code": -3,
"msg": "verify error",
"url": ""
}
}
}
四、備注信息
(一)設(shè)備規(guī)格
- 圖像編碼:
H.264 - 音頻編碼:
AAC ADTS(支持 8k / 44.1k / 48k Hz 采樣率)
(二)自動(dòng)關(guān)閉情形
- RTSP 流:1分鐘內(nèi)未被使用,將自動(dòng)關(guān)閉連接;
- HLS 流:30秒內(nèi)未收到
m3u8請(qǐng)求,將自動(dòng)關(guān)閉連接; - 每個(gè)設(shè)備當(dāng)前播放只支持一種流格式,如果已經(jīng)在播放 RTSP,那么另外一個(gè)客戶的想要 HLS 流是不被允許;
- 同個(gè)客戶端需重新連接設(shè)備拉流時(shí),需調(diào)用
terminate_streaming關(guān)閉上次連接,或等待1分鐘超時(shí); - 服務(wù)器如果30秒內(nèi)沒(méi)有收到設(shè)備任何數(shù)據(jù),將關(guān)閉連接。
(三)測(cè)試推薦格式
- 分辨率:
1080p - 幀率:
25 fps - 音頻:
AAC(8k Hz 采樣率)
(四)RTSP 流測(cè)試方法
- 使用
stunnel工具將加密的 RTSP 流代理為本地裸流; - 播放器連接本地代理的裸流地址進(jìn)行播放。
