本文镜像:https://linkpi.cn/archives/1388
本文链接:https://blog.csdn.net/weixin_45326556/article/details/123679784
灵派编码器的后台是PHP实现的,若有定制需求,可以自行修改其源码,灵派编码器的后台源程序参见https://gitee.com/LinkPi/Encoder/tree/web。 有些用户需要在自己的服务器或者自己编写的软件中控制编码器,则可以通过调用灵派编码器HTTP API接口来完成。为了方便论述,我们把灵派编码器HTTP API接口定义为LPH接口。
由于产品版本升级或其他原因,本文档内容会持续更新. 除非另有约定,本文档仅作为使用指导,本文档中的所有陈述信息和建议不构成任何明示或暗示的担保。
LPH协议是一种定义于 HTTP 之上的 API 接口,其本质仍属于HTTP协议,LPH协议在HTTP基础上,增加了Digest认证和登录验证的交互过程。
LPH命令的带Digest认证的HTTP 交互过程和标准HTTP交互过程主要区别如下:
LPH协议目前只支持Digest 认证流程,默认认证用户名密码均为admin。
下面我们通过postman作为客户端来说明一次通信过程,这里以登录(/link/user/lph_login)为例。
(1) 首先我们启动postman,并如下图打开postman控制台工具,并清空控制台信息
(2)创建一个请求,url为 /link/usr/lph_login,请求方式GET/POST都可以,并设置好传递的参数,这里以GET请求为例,如下图
(3)设置postman Http认证方式,并设置用户名和密码,如下图
(4)点击Send按钮发送请求,然后打开postman 控制台工具,可以看到2条请求记录,如下图
(5)通过对比,我们可以看到,第一次客户端向服务器发送请求,服务器返回401,并在响应头中携带了
WWW-Authenticate认证信息,postman客户端拿到认证信息后,计算出Authenticate并加入到请求头中,再次发送。
(6)服务器认证通过后,会返回请求结果,如果下图
通过2.2.1的例子已经知道,在通信过程中需要Authorization头信息,但是除登录请求外的请求头不仅要带上 Authorization信息还要带上登录获取的 3 组 HASH 值,才能请求成功。
这里通过获取视频通道信息简单说明交互流程:
(1) 发送请求首先要登录服务器 /link/user/lph_login
(2) 登录后才会发送 /link/encoder/get_channels 获取视频通道信息
(3) 获取信息后登出 /link/user/lph_logout
如下图,登录成功后,在调用获取视频通道信息接口的请求头中添加3个HASH值,此时就可以拿到正确的请求结果。
请求类型:GET / POST
参数
参数名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
username | string | 是 | 登录用户名,同登录web用户名一致 |
passwd | string | 是 | 登录密码,同登录web密码一致,需要md5加密后传输 |
响应
{
"data": {
"L-HASH": "0b3bb1f7fcdffc5ea1077090b9bbc43314fa4268",
"P-HASH": "29a07d69a3e5f9b8ef42eee9d5a837af2ff0f403",
"H-HASH": "9d181efb0c1b606f5a7fef2a45b1385a447794f3"
},
"status": "success",
"msg": "登录成功"
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 描述 |
---|---|---|
无 | 无 | 无 |
响应
{
"data": "",
"status": "success",
"msg": "登出成功"
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 描述 |
---|---|---|
无 | 无 | 无 |
响应
{
"data": {
"cpu": 17, //cpu百分比使用率
"mem": 41, //内存百分比使用率
"temperature": 42 //核心温度,摄氏度
},
"status": "success",
"msg": "执行完成"
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 描述 |
---|---|---|
无 | 无 | 无 |
响应
{
"data": {
"rx": 0, //网络下行
"tx": 0 //网络上行
},
"status": "success",
"msg": "执行完成"
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 描述 |
---|---|---|
无 | 无 | 无 |
响应
{
"data": [
{
"avalible": true, //是否有hdm/sdi输入源接入
"framerate": 50, //帧率
"full": false,
"height": 1080, //视频高
"interlace": false, //是否隔行扫描
"protocol": "HDMI", //输入源类型
"samplerate": 48000, //音频采样率
"width": 1920 //视频宽
},
…………
],
"status": "success",
"msg": "执行完成"
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 描述 |
---|---|---|
无 | 无 | 无 |
响应
{
"data": {
"ip": "192.168.1.213",
"mask": "255.255.252.0", //掩码
"gateway": "192.168.1.1", //网关
"dns": "8.8.8.8",
"mac": "886570e99627"
"dhcp": false
},
"status": "success",
"msg": "执行完成"
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
ip | string | 否 | ip地址 |
mask | string | 否 | 子网掩码 |
gateway | string | 否 | 网关 |
dns | string | 否 | dns |
dhcp | bool | 否 | 是否自动获取ip,值为true时将忽略其他参数 |
响应
无返回值
请求类型:GET / POST
参数
参数名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
无 | 无 | 无 | 无 |
响应
{
"data": "2021-11-11 03:37:28",
"status": "success",
"msg": "执行完成"
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
sysDate | string | 是 | 参数格式是且仅是:“yyyy/MM/dd/hh/mm/ss” |
响应
{
"data": "",
"status": "success",
"msg": "执行完成"
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
无 | 无 | 无 | 无 |
响应
{
"data": {
"server": "cn.pool.ntp.org", //ntp服务器地址
"enable": false //开机是否同步ntp服务器时间
},
"status": "success",
"msg": "执行完成"
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
server | string | 否 | Ntp服务器地址,如cn.pool.ntp.org |
enable | bool | 否 | 开机时是否同步ntp时间 |
sync | bool | 否 | 是否立即同步一次ntp时间 |
响应
{
"data": "",
"status": "success",
"msg": "执行完成"
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
无 | 无 | 无 | 无 |
响应
{
"data": [
{
"id": 0, //通道id
"name": "HDMI", //通道名称
"type": "vi", //通道类型,共有vi usb net mix4种
"enable": true, //通道总开关,主码流编码开关
"enable2": false, //子码流编码开关
"encv": { //主码流编码参数
"Iqp": 25, //I帧量化因子
"Pqp": 25, //P帧量化因子
"bitrate": 4000, //码率 kb/s
"codec": "h264", //编码格式
"framerate": 30, //帧率
"gop": 2, //gop长度
"gopmode": 0, //海思gop模式,0--Normal 1--SmarP 2--DualP 3--Bipred
"height": 1080, //视频高
"lowLatency": false, //是否低延时编码
"maxqp": 36, //最大量化因子
"minqp": 22, //最小量化因子
"profile": "main", //编码压缩方式
"rcmode": "cbr", //码率控制
"width": 1920 //视频宽
},
"encv2": { //子码流参数,同encv
"Iqp": 25,
"Pqp": 25,
"bitrate": 1000,
"codec": "h264",
"framerate": 30,
"gop": 1,
"gopmode": 0,
"height": 360,
"lowLatency": false,
"maxqp": 36,
"minqp": 22,
"profile": "high",
"rcmode": "avbr",
"width": 640
},
"enca": { //音频编码参数
"audioSrc": "hdmi", //使用的音频源
"bitrate": 128, // 码率 kb/s
"channels": 1, //声道 1代表单声道,2代表立体声
"codec": "aac", //音频编码格式
"gain": 6, //声音增益
"samplerate": 48000 //采样率
},
"cap": { //视频参数,该属性为vi通道(HDMI/SDI)特有属性,其他通道不存在
"crop": {
"B": 0, //视频下采集,单位像素
"L": 0, //视频左采集,单位像素
"R": 0, //视频右采集,单位像素
"T": 0 //视频上采集,单位像素
},
"deinterlace": false, //是否全帧去隔行
"rotate": 0 //旋转角度
},
"net": { //网络输入,该属性为net通道特有属性,其他通道不存在
"bufferMode": 0, //缓冲模式
"decodeA": false, //是否音频解码
"decodeV": false, //是否视频解码
"framerate": -1, //帧率
"minDelay": 500, //缓冲时间,单位毫秒
"path": "rtsp://192.168.2.182/1", //网络流地址
"protocol": "tcp" //传输协议
}
},
…………
],
"status": "success",
"msg": "执行完成"
}
请求类型:POST
参数
参数类型 | 描述 |
---|---|
string | 参数为JsonArray字符串,示例如下表 |
参数示例
[
{
"id":2,
"path":"rtsp://192.168.2.180/1",
"decodeV":true,
"enable":true
},
…………
NetObject,
NetObject
]
NetObject对象属性见下表
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
id | int | 是 | 通道id |
name | string | 否 | 通道名称 |
path | string | 否 | 网络流地址 |
bufferMode | int | 否 | 缓冲模式 0: 一般 1: 实时 2:同步 |
minDelay | int | 否 | 缓冲时间,单位毫秒 |
protocol | string | 否 | 传输协议,tcp\upd |
framerate | int | 否 | 帧率 |
decodeV | bool | 否 | 是否视频解码 |
decodeA | bool | 否 | 是否音频解码 |
enable | bool | 否 | 通道总开关,是否开启流 |
enable2 | bool | 否 | 是否开启子码流,视频解码开启时有效 |
响应
{
"data": "",
"status": "success",
"msg": "执行完成"
}
请求类型:POST
参数
参数类型 | 描述 |
---|---|
string | 参数为JsonArray字符串,示例如下表 |
参数示例
[
{
"id":2,
"name":"HDMI",
"enable":true,
"enable2":false,
"encv":{
"width":1920,
"height":1080,
"codec":"h264",
"profile":"main",
"rcmode":"cbr"
},
"encv2":{
"width":640,
"height":360
}
},
…………
ChnObject
]
ChnObject对象属性见下表
参数名称 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
id | int | 是 | 通道id |
name | string | 否 | 通道名称 |
enable | bool | 否 | 通道总开关,主码流编码开关 |
enable2 | bool | 否 | 子码流编码开关 |
encv | EncObject | 否 | 主码流编码参数,对象类型,属性见下表 |
encv2 | EncObject | 否 | 子码流编码参数,对象类型,属性见下表 |
EncObject
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
width | int | 否 | 视频宽,值为-1时,即使用输入源默认宽 |
height | int | 否 | 视频高,值为-1时,即使用输入源默认高 |
codec | string | 否 | 编码方式,可选值:h264 h265 close |
profile | string | 否 | 编码压缩方式,可选值:base main high |
rcmode | string | 否 | 码率控制,可选值cbr vbr avbr fixqp |
bitrate | string | 否 | 码率kb/s |
framerate | string | 否 | 帧率 |
gop | int | 否 | gop长度 |
gopmode | int | 否 | 海思GOP模式,0–Normal 1–SmarP 2–DualP 3–BipredB |
minqp | Int | 否 | 最小量化因子 |
maxqp | int | 否 | 最大量化因子 |
Iqp | int | 否 | I帧量化因子 |
Pqp | int | 否 | P帧量化因子 |
lowLatency | bool | 否 | 是否低延时编码 |
响应
{
"data": "",
"status": "success",
"msg": "执行完成"
}
请求类型: POST
参数
参数类型 | 描述 |
---|---|
string | 参数为JsonArray字符串,示例如下表 |
参数示例
[
{
"id":2,
"L":"200",
"rotate":90,
},
…………
CapObject
]
CapObject对象属性见下表
属性名 | 字段类型 | 描述 |
---|---|---|
id | int | 通道id |
deinterlace | bool | 是否全帧去隔行 |
rotate | int | 视频旋转,可选值0 90 180 270 |
L | int | 视频裁决左,单位像素 |
R | int | 视频裁决右,单位像素 |
T | int | 视频裁决上,单位像素 |
B | int | 视频裁决下,单位像素 |
响应
{
"data": "",
"status": "success",
"msg": "执行完成"
}
请求类型:POST
参数
参数类型 | 描述 |
---|---|
string | 参数为JsonArray字符串,示例如下表 |
参数示例
[
{
"id":2,
"codec":"aac",
" audioSrc":"hdmi",
" gain":"6"
},
…………
AudioObject
]
AudioObject对象属性见下表
属性名 | 字段类型 | 描述 |
---|---|---|
id | int | 通道id |
codec | string | 编码格式,可选值 aac pcma mp2 mp3 opus close |
audioSrc | string | 音频来源,可选值hdmi sdi line |
gain | int | 声音增益,可选值-24 -18 -12 -6 0 6 12 18 24 |
samplerate | int | 采样率,可选值 16000 32000 44100 48000 -1(-1代表自动) |
channels | int | 声道,可选值1—单声道 2—立体声 |
bitrate | int | 码率 kb/s |
响应
{
"data": "",
"status": "success",
"msg": "执行完成"
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 描述 |
---|---|---|
无 | 无 | 无 |
响应
{
"data": [
{
"id": 0, //通道id
"name": "HDMI", //通道名称
"type": "vi", //通道类型
"enable": true, //通道总开关,主码流开关
"enable2": false, //子码流开关
"stream": { //主码流输出
"hls": false, //输出hls流开关
"http": true, //输出tsHttp流开关
"push": { //推流参数
"enable": false, //是否开启推流
"format": "auto", //封装格式
"hevc_id": 12, //rtmp输出时,h265数据使用的id号
"path": "rtmp://127.0.0.1/live/test_main0" //推流地址
},
"rtmp": true, //输出rtmp流开关
"rtsp": true, //输出rtsp流开关
"srt": { //srt流参数
"enable": false, //是否开启rtsp流
"ip": "127.0.0.1", //ip地址
"latency": 50, //延时
"mode": "listener", //模式
"passwd": "", //密码
"port": 9001, //端口
"streamid": "" // stream id
},
"udp": { //组播参数
"bandwidth": 100, //流控最大带宽
"enable": false, //是否开启组播
"flowCtrl": true, //是否开启流控
"ip": "233.233.2.1", //地址
"port": 3000, //端口
"rtp": false, //是否增加rtp头
"ttl": 5 //ttl
}
},
"stream2": { //子码流输出,参数主码流输出
"hls": false,
"http": true,
"push": {
"enable": false,
"format": "auto",
"hevc_id": 12,
"path": "rtmp://127.0.0.1/live/test_sub0"
},
"rtmp": true,
"rtsp": true,
"srt": {
"enable": false,
"ip": "127.0.0.1",
"latency": 50,
"mode": "listener",
"passwd": "",
"port": 9101,
"streamid": ""
},
"udp": {
"bandwidth": 100,
"enable": false,
"flowCtrl": true,
"ip": "233.233.3.1",
"port": 3000,
"rtp": false,
"ttl": 5
}
}
},
…………
],
"status": "success",
"msg": "执行完成"
}
请求类型: POST
参数
参数类型 | 描述 |
---|---|
string | 参数为JsonArray字符串,示例如下表 |
参数示例
[
{
"id":0,
"stream":{
"hls":true,
"http": false,
"rtsp":true,
"udp":{
"enable":true
}
},
"stream2":{
"rtmp":true,
"http":false,
"hls":false,
"push":{
"enable":true,
"path":"rtmp://192.168.2.110/live/main"
},
"udp":{
"enable":false
}
}
},
ChnObject,
ChnObject,
ChnObject,
…………
]
ChnObject
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
id | int | 是 | 通道id |
stream | StreamObject | 否 | 主码流输出参数 |
Stream2 | StreamObject | 否 | 子码流输出参数 |
StreamObject
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
hls | bool | 否 | 是否输出hls流 |
http | bool | 否 | 是否输出http流 |
rtmp | bool | 否 | 是否输出rtmp流 |
rtsp | bool | 否 | 是否输出rtsp流 |
push | PushObject | 否 | 推流配置参数 |
udp | UdpObject | 否 | udp组播配置参数 |
srt | SrtObject | 否 | srt流配置参数 |
PushObject
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
enable | bool | 否 | 是否开启推流 |
format | string | 否 | 封装格式,值可为auto flv rtsp rtp mpegts rtp_mpegts |
hevc_id | int | 否 | rtmp输出时,h265数据使用的id号 |
path | string | 否 | 推流地址 |
UdpObject
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
bandwidth | int | 否 | 流控最大带宽,单位Mb |
enable | bool | 否 | 是否开启组播 |
flowCtrl | bool | 否 | 流控,让码流发送更均匀,防止丢包,但是消耗一些性能 |
ip | string | 否 | 地址 |
port | int | 否 | 端口 |
rtp | bool | 否 | 是否增加rtp头 |
ttl | int | 否 | ttl |
SrtObject
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
latency | int | 否 | 延时 |
enable | bool | 否 | 是否开启srt流 |
mode | string | 否 | 模式,caller listener rendezvous |
ip | string | 否 | 地址 |
port | int | 否 | 端口 |
passwd | string | 否 | 密码 |
streamid | int | 否 | 流id |
响应
{
"data": "",
"status": "success",
"msg": "执行完成"
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 描述 |
---|---|---|
无 | 无 | 无 |
响应
{
"data": [
{
"id": 0, //通道id
"name": "HDMI", //通道名称
"type": "vi", //通道类型
"enable": true, //通道总开关,主码流编码是否启用
"enable2": true, //子码流编码否启用
"hls": {
"hls_base_url": "/hls/", //url前缀
"hls_filename": "-%06d.ts", //文件名后缀
"hls_list_size": 5, //列表长度
"hls_time": 5 //分片长度
},
"ndi": {
"enable": false, //开关
"group": "", //NDI 分组
"name": "stream0" //NDI 名称
},
"ts": {
"mpegts_original_network_id": 1, //network id
"mpegts_pmt_start_pid": 4096, //pmt pid
"mpegts_service_id": 1, // service id
"mpegts_start_pid": 100, // pid
"mpegts_transport_stream_id": 1, //stream id
"tsSize": 1316 //packet size
}
}
],
"status": "success",
"msg": "执行完成"
}
请求类型: POST
参数
参数类型 | 描述 |
---|---|
string | 参数为JsonArray字符串,示例如下表 |
参数示例
[
{
"id":0,
"hls":{
"hls_time":5,
"hls_list_size":5
},
"ndi": {
"enable":true,
"name":"stream0"
},
"ts": {
"mpegts_pmt_start_pid":4096,
"mpegts_original_network_id":1,
"mpegts_start_pid":100
}
}
,
ChnObject,
ChnObject,
ChnObject,
…………
]
ChnObject
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
id | int | 是 | 通道id |
hls | HlsObject | 否 | hls输出参数 |
ndi | NdiObject | 否 | ndi输出参数 |
ts | TsObject | 否 | ts输出参数 |
HlsObject
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
hls_base_url | string | 否 | url前缀 |
hls_filename | string | 否 | 文件名后缀:如-%06d.ts |
hls_list_size | int | 否 | m3u8文件分片列表长度 |
hls_time | int | 否 | 分片长度,单位秒 |
NdiObject
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
enable | bool | 否 | 开启/关闭 |
group | string | 否 | NDI分组 |
name | string | 否 | NDI名称 |
TsObject
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
mpegts_original_network_id | int | 否 | network id |
mpegts_pmt_start_pid | int | 否 | pmt pid |
mpegts_service_id | int | 否 | service id |
mpegts_start_pid | int | 否 | pid |
mpegts_transport_stream_id | int | 否 | stream id |
tsSize | int | 否 | packet size |
响应
{
"data": "",
"status": "success",
"msg": "执行完成"
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 描述 |
---|---|---|
无 | 无 | 无 |
响应
{
"data": {
"autorun": false, //是否自动启动
"srcA": 0, //音频源
"srcV": 0, //视频源
"url": [
{
"des": "直播平台1", //描述
"enable": true, //是否开启
"path": "rtmp://127.0.0.1/live/push1" //推流地址
},
{
"des": "直播平台2",
"enable": true,
"path": "rtmp://127.0.0.1/live/push2" },
{
"des": "直播平台3",
"enable": false,
"path": "rtmp://127.0.0.1/live/push3" }
]
},
"status": "success",
"msg": "执行完成"
}
请求类型: POST
参数
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
autorun | bool | 否 | 是否自动开启 |
srcA | int | 否 | 音频源 |
srcV | int | 否 | 视频源 |
url | array | 否 | 地址集合,里面存放UrlObject对象 |
UrlObject
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
des | string | 是 | 平台描述 |
enable | bool | 是 | 使用启用 |
path | string | 是 | 地址 |
参数示例
{
"autorun": false,
"srcA": 0,
"srcV": 0,
"url": [
{
"des": "直播平台1",
"enable": true,
"path": "rtmp://127.0.0.1/live/push1"
},
{
"des": "直播平台2",
"enable": true,
"path": "rtmp://127.0.0.1/live/push2"
},
{
"des": "直播平台3",
"enable": false,
"path": "rtmp://127.0.0.1/live/push3"
},
{
"des": "直播平台4",
"enable": false,
"path": "rtmp://127.0.0.1/live/push4"
}
]
}
响应
{
"data": "",
"status": "success",
"msg": "执行完成"
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 描述 |
---|---|---|
无 | 无 | 无 |
响应
{
"data": "",
"status": "success",
"msg": "执行完成" //注意:如果没有挂载外部存储设备,会启动录制失败
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 描述 |
---|---|---|
无 | 无 | 无 |
响应
{
"data": "",
"status": "success",
"msg": "执行完成"
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 描述 |
---|---|---|
无 | 无 | 无 |
响应
{
"data": {
"duration": 243945, //启动持续时间,单位ms
"pushing": true, //多平台直播状态
"speed": [ //每个平台地址的速度,和保存的直播平台是一一对应关系
2406, //速度 kb/s
2406,
0,
0
]
},
"status": "success",
"msg": "执行完成"
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 描述 |
---|---|---|
无 | 无 | 无 |
响应
{
"data": [
{
"id": 0, //通道id
"name": "HDMI", //通道名称
"type": "vi", //通道类型
"enable": true, //通道总开关,主码流是否启用
"enable2": false, //子码流是否启用
"overlay": [ //水印参数,下面展示全部6种水印类型,实际中根据设置的类型和参数返回
{
"type": "text", //叠加类型为文本
"enable": true, //显示该叠加层
"font": "/link/res/font.ttf", //字体文件路径
"content": "我是水印", //文字内容,最多支持250个字
"x": 0.1, //叠加层坐标[0,1],相对于整个图像
"y": 0.136, //同上
"scale": 2.2, //文字相对大小,不同的字体表现不同,[0.1,4]
"color": "#669900", //文字颜色,RGB
"bgColor": "", //文字颜色,RGBA,留空表示透明
"alpha": 1, //叠加层透明度
"move": -1, //负数向左滚动,正数向右滚动,数值越大速度越快
"w":0.515 //叠加层宽度,主要用于限制滚动范围。
},
{
"type": "time", //叠加类型为时间戳
"enable": true, //显示该叠加层
"font": "/link/res/font.ttf", //字体文件路径
"content": "yyyy年MM月dd日 hh:mm:ss", //时间格式
"x": 0.1, //叠加层坐标[0,1],相对于整个图像
"y": 0.136, //同上
"scale": 2.2, //文字相对大小,不同的字体表现不同,[0.1,4]
"color": "#669900", //文字颜色,RGB
"bgColor": "", //文字颜色,RGBA,留空表示透明
"alpha": 1 //叠加层透明度
},
{
"type": "pic", //叠加类型为图像
"enable": true, //显示该叠加层
"content": "/link/res/logo.png", //图片路径
"x": 0.1, //叠加层坐标[0,1],相对于整个图像
"y": 0.1, //同上
"scale": 1, //图片等比缩放倍数,[0.1,4]
"alpha": 1 //叠加层透明度
//图片也可以增加w、h属性,会导致图片强制拉伸,可能产生比例变化
},
{
"type": "mask", //叠加类型为马赛克
"enable": true, //显示该叠加层
"content": "16", //马赛克粒度,8/16/32/64
"x": 0.4, //叠加层坐标[0,1],相对于整个图像
"y": 0.4, //同上
"w": 0.2, //同上
"h": 0.2 //同上
},
{
"type": "border", //叠加类型为边框
"x": "0.483", //叠加层坐标[0,1],相对于整个图像
"y": "0.508", //同上
"h": "0.197", //同上
"w": "0.304", //同上
"enable": true, //显示该叠加层
"color": "#000000", //边框颜色,RGB
"alpha": 1, //叠加层透明度
"border": 7 //边框宽度,像素
},
{
"type": "rect", //叠加类型为矩形
"x": "0.097", //叠加层坐标[0,1],相对于整个图像
"y": "0.104", //同上
"h": "0.261", //同上
"w": "0.208", //同上
"enable": true, //显示该叠加层
"color": "#000000", //矩形颜色,RGB
"alpha": 1 //叠加层透明度
}
]
},
…………
],
"status": "success",
"msg": "执行完成"
}
请求类型: POST
参数
参数类型 | 描述 |
---|---|
string | 参数为JsonArray字符串,示例如下表 |
参数示例
[
{
"id":0,
"overlay": [
{
"alpha": 1,
"color": "#669900",
"content": "Overlay Text",
"enable": true,
"font": "/link/res/font.ttf",
"move": -1,
"scale": 2.2,
"type": "text",
"w": 0.515,
"x": 0.1,
"y": 0.136
},
…………
]
},
ChnObject,
ChnObject,
ChnObject,
…………
]
ChnObject
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
id | int | 是 | 通道id |
overlay | array | 是 | 水印集合,集合内为水印对象,可以为文字水印,图像水印,时间水印,马赛克水印,边框水印,矩形水印共6种,6种水印可以自由组合和重复组合,但是同一个视频通道使用的水印个数不能超过8个,不同水印可选参数如下 |
TextObject(文字水印)
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
type | string | 是 | 水印类型,文字水印类型值为text |
enable | bool | 是 | 是否显示该叠加层 |
font | string | 是 | 字体文件绝对路径 |
content | string | 是 | 文字内容,最多支持250个字 |
x | double | 是 | 叠加层坐标[0,1],相对于整个图像,图像左上角为[0,0] |
y | double | 是 | 叠加层坐标[0,1],相对于整个图像,图像左上角为[0,0] |
scale | double | 是 | 文字相对大小,不同的字体表现不同,[0.1,4] |
color | string | 是 | 文字颜色,RGBA,留空表示透明,例如:#669900 |
bgColor | string | 是 | 文字背景颜色,RGBA,留空表示透明,例如:#669900 |
move | int | 是 | 负数向左滚动,正数向右滚动,0静止,数值越大速度越快 |
alpha | double | 是 | 叠加层透明度 |
w | double | 是 | 叠加层宽度,主要用于限制滚动范围 |
TimeObject(时间水印)
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
type | string | 是 | 水印类型,时间水印类型值为time |
enable | bool | 是 | 是否显示该叠加层 |
font | string | 是 | 字体文件绝对路径 |
content | string | 是 | 时间格式,如yyyy年MM月dd日 hh:mm:ss |
x | double | 是 | 叠加层坐标[0,1],相对于整个图像,图像左上角为[0,0] |
y | double | 是 | 叠加层坐标[0,1],相对于整个图像,图像左上角为[0,0] |
scale | double | 是 | 文字相对大小,不同的字体表现不同,[0.1,4] |
color | string | 是 | 文字颜色,RGBA,留空表示透明,例如:#669900 |
bgColor | string | 是 | 文字背景颜色,RGBA,留空表示透明,例如:#669900 |
alpha | double | 是 | 叠加层透明度 |
PicObject(图像水印)
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
type | string | 是 | 水印类型,图像水印类型值为pic |
enable | bool | 是 | 是否显示该叠加层 |
content | string | 是 | 图片绝对路径 |
x | double | 是 | 叠加层坐标[0,1],相对于整个图像,图像左上角为[0,0] |
y | double | 是 | 叠加层坐标[0,1],相对于整个图像,图像左上角为[0,0] |
scale | double | 是 | 文字相对大小,不同的字体表现不同,[0.1,4] |
alpha | double | 是 | 叠加层透明度 |
MaskObject(马赛克水印)
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
type | string | 是 | 水印类型,马赛克水印类型值为mask |
enable | bool | 是 | 是否显示该叠加层 |
content | string | 是 | 马赛克颗粒,可选值8 16 32 64 |
x | double | 是 | 叠加层坐标[0,1],相对于整个图像,图像左上角为[0,0] |
y | double | 是 | 叠加层坐标[0,1],相对于整个图像,图像左上角为[0,0] |
w | double | 是 | 叠加层宽度[0,1],相对于整个图像,图像左上角为[0,0] |
h | double | 是 | 叠加层高度[0,1],相对于整个图像,图像左上角为[0,0] |
BorderObject(边框水印)
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
type | string | 是 | 水印类型,边框水印类型值为border |
enable | bool | 是 | 是否显示该叠加层 |
x | double | 是 | 叠加层坐标[0,1],相对于整个图像,图像左上角为[0,0] |
y | double | 是 | 叠加层坐标[0,1],相对于整个图像,图像左上角为[0,0] |
w | double | 是 | 叠加层宽度[0,1],相对于整个图像,图像左上角为[0,0] |
h | double | 是 | 叠加层高度[0,1],相对于整个图像,图像左上角为[0,0] |
color | string | 是 | 边框颜色,RGBA,留空表示透明 例如:#669900 |
alpha | double | 是 | 叠加层透明度 |
border | int | 是 | 边框宽度,像素 |
RectObject(矩形水印)
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
type | string | 是 | 水印类型,矩形水印类型值为rect |
enable | bool | 是 | 是否显示该叠加层 |
x | double | 是 | 叠加层坐标[0,1],相对于整个图像,图像左上角为[0,0] |
y | double | 是 | 叠加层坐标[0,1],相对于整个图像,图像左上角为[0,0] |
w | double | 是 | 叠加层宽度[0,1],相对于整个图像,图像左上角为[0,0] |
h | double | 是 | 叠加层高度[0,1],相对于整个图像,图像左上角为[0,0] |
color | string | 是 | 边框颜色,RGBA,留空表示透明 例如:#669900 |
alpha | double | 是 | 叠加层透明度 |
响应
{
"data": "",
"status": "success",
"msg": "执行完成"
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 描述 |
---|---|---|
无 | 无 | 无 |
响应
{
"data": [
{
"id": 0, //布局id
"name": "9宫格" //布局名称
},
{
"id": 1,
"name": "4分屏"
},
{
"id": 2,
"name": "1+2"
},
{
"id": 3,
"name": "画中画"
},
{
"id": 4,
"name": "单画面"
},
{
"id": 5,
"name": "上下"
}
],
"status": "success",
"msg": "执行完成"
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 描述 |
---|---|---|
无 | 无 | 无 |
响应
{
"data": {
"srcV": [ //视频布局内使用的视频通道id,-1为占位符,表示该位置没有切入任何输入源
"0",
"-1",
"-1",
"-1"
],
"srcA": [ //音频混音使用的视频通道id
"0"
],
"curLayId": 1, //当前正在使用的布局id
"curLayName": "4分屏" //当前正在使用的布局名
},
"status": "success",
"msg": "执行完成"
}
请求类型: GET / POST
参数
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
layId | int | 否 | 使用的布局id |
srcV | array | 否 | 在布局中切入的视频通道ID,”-1”为占位符 |
srcA | array | 否 | 音频混音使用的视频通道id |
参数示例
{
"layId": 1, //使用的布局id
"srcV" : ["1","2","3","-1"], // 切入的视频通道id,-1表示该位置不切入任何输入源
"srcA" : ["1"] //音频混音使用的视频通道id
}
响应
{
"data": "",
"status": "success",
"msg": "执行完成"
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 描述 |
---|---|---|
无 | 无 | 无 |
响应
{
"data": {
"output": { //HDMI 输出参数
"enable": false, // 是否启用HDMI输出
"lowLatency": false, //是否开启低延时
"output": "1080P60", //输出分辨率
"rotate": 0, //旋转0 90 180 270
"src": 6, //输出的视频通道id
"type": "hdmi", // 类型
"ui": true //是否输出ui(个人开发的UI程序)
},
"output2": { //VGA 输出参数,同HDMI
"enable": false,
"lowLatency": false,
"output": "1080P60",
"rotate": 0,
"src": 0,
"type": "vga",
"ui": false
}
},
"status": "success",
"msg": "执行完成"
}
请求类型: GET / POST
参数
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
output | OutObject | 否 | HDMI输出配置 |
output2 | OutObject | 否 | VGA输出配置 |
OutObject
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
enable | bool | 否 | 是否开启输出 |
lowLatency | bool | 否 | 是否开启低延时 |
output | string | 否 | 输出分辨率1080P60 1080I60 1080P50 1080I50 1080P30 720P60 720P50 |
rotate | int | 否 | 旋转 |
src | int | 否 | 输出使用的视频通道id |
ui | bool | 否 | 是否输出ui(个人开发的UI程序) |
参数示例
{
"output": {
"enable": true,
"lowLatency": true,
"output": "1080P60",
"src": 6
},
"output2": {
"enable": false,
"lowLatency": false,
"output": "1080P60",
"src": 0
}
}
响应
{
"data": "",
"status": "success",
"msg": "执行完成"
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 描述 |
---|---|---|
无 | 无 | 无 |
响应
{
"data": {
"chns": [ //启动录制时,录制的视频通道id
"0",
"2"
],
"mp4": true, //是否录制mp4
"flv": false, //是否录制flv
"mkv": false, //是否录制mkv
"mov": false, //是否录制mov
"ts": false //是否录制ts
},
"status": "success",
"msg": "执行完成"
}
请求类型: GET / POST
参数
属性名 | 字段类型 | 是否必传 | 描述 |
---|---|---|---|
chns | array | 否 | 要录制的视频通道id集合 |
mp4 | bool | 否 | 是否录制mp4 |
flv | bool | 否 | 是否录制flv |
mkv | bool | 否 | 是否录制mkv |
mov | bool | 否 | 是否录制mov |
ts | bool | 否 | 是否录制ts |
参数示例
{
"chns": [
"0",
"2"
],
"mp4": true,
"flv": true,
"mkv": false
}
响应
{
"data": "",
"status": "success",
"msg": "执行完成"
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 描述 |
---|---|---|
无 | 无 | 无 |
响应
{
"data": "",
"status": "success",
"msg": "执行完成" //注意:如果没有挂载外部存储设备,会启动录制失败
}
请求类型:GET / POST
参数
参数名 | 字段类型 | 描述 |
---|---|---|
无 | 无 | 无 |
响应
{
"data": "",
"status": "success",
"msg": "执行完成"
}