Добавить пoток для захвата или публикации: Stream.Add
Метод и параметры
Добавление потока для захвата или публикации.
string Stream.Add
(uid camera
, uid stream,
url source
, number priority,
bool enable
, array tracks
, object cluster
, object dvr
, object capture
, object live
, object access
, object reconnect
).
Параметры
uid camera
REQUIRED – уникальный идентификатор камеры в рамках всей инсталляции.
uid stream
REQUIRED – уникальный идентификатор потока в рамках камеры.
number priority
– приоритет потока в камере. Используется при обработке архива камеры.
url source
– RTSP URL захватываемого/публикуемого потока. Если source
не указан, то пoток регистрируется, но не обслуживается. Поддерживаются следующие виды схемы URL:
rtsp://
– захват RTSP потока по протоколу TCP.tcp://
– аналогичноrtsp://
.udp://
– захват RTSP потока по протоколу UDP.sink://
– создает точку подключения для публикации потока.
bool enable
= true
– поток включен.
array tracks
= ["audio","video"]
– список медиаканалов, которые необходимо захватывать. Если не указан, то всегда будет захватываться video
канал.
video
– захватывать канал видео данных. Захватывается всегда, независимо от настроек. Поддерживаются кодеки H.264, H.265.audio
– захватывать канал звука. Если канала нет в исходном RTSP, то канал не создается и не захватывается. Поддерживаются кодеки PCMU, PCMA, MPA, AAC.
object cluster
– конфигурация захвата потока в режиме отказоустойчивости.
string cluster.primary
– имя хоста первичной ноды кластера, захватывающего поток постоянно.
stringcluster.secondary
– имя хоста резервной ноды кластера, захватывающего поток в случае недоступности или отказа cluster.primary
. Окончание /on
обозначает недоступность или отказ cluster.primary
хоста, /off
или отсутствие постфикса обозначает доступность первичного хоста и нет необходимости захватывать поток.
object dvr
– задает параметры записи и хранения архива потока.
bytesdvr.buffer
= 1M
– размер внутреннего буфера для кеширования операций чтения, записи. Большой объем снижает количество обращений к диску, но увеличивает потребление оперативной памяти.
secondsdvr.duration
=1d
– указывает длительность хранения DVR в секундах. По истечении установленного срока, архив будет автоматически подчищаться. Изменение параметра длительности хранения может быть как в большую, так и в меньшую сторону.
В значении возможно использовать сокращения: d
– дни (пример: 30d
), h
– часы (пример: 120h
), m
– минуты (пример:20m
).
stringdvr.enable
– настройки записи в формате when
: mode
или week day
:offset in seconds
: duration in seconds
:mode
when
принимает значенияalways
,never
,event
:max prev secs
:default post secs
,mode
принимает значенияfull
,part
.
stringdvr.location
REQUIRED – если разрешена запись DVR, то данный параметр является обязательным и указывает расположение хранения архива.
bytesdvr.quota
= 0G
– устанавливает ограничение на объем архива. Если параметр не указан или равен 0
, то объем неограничен.
В значении возможно использовать сокращения: G
– гигабайт (пример: 30G
), M
– мегабайт (пример: 120M
), K
– килобайт (пример: 20K
).
В текущей версии данный параметр не накладывает физическое ограничение на объем дискового пространства. Можно использовать как справочный при вызове API.
object capture
– определяет параметры захвата.
stringcapture.enable
– настройки захвата в формате when: mode
или week day:offset in seconds:duration in seconds:mode
when
– принимает значенияalways
,never
,event
:max prev secs
:default post secs
,mode
– принимает значенияfull
,part
.
object live
– определяет параметры стриминга.
stringlive.enable
– настройки стриминга в формате when:mode
или week day:offset in seconds:duration in seconds:mode
when
– принимает значенияalways
,never
,event
:max prev secs
:default post secs
,mode
– принимает значенияfull
,part
.
object access
– определяет параметры предоставления доступа к воспроизведению Live и DVR.
enumaccess.allow
=private
– параметр определяет тип доступа к воспроизведению потока. Поддерживаются следующие виды доступа:
public
– для доступа к потоку авторизация не требуется.private
– требуется авторизация для доступа к потоку. Всегда включена авторизация по OAuth токену. Определен следующий приоритет проверки доступа к потоку:
Задан
whitelist
и клиент подключается с разрешенного IP – доступ предоставляется без дальнейшей проверки.Заданы
user
иpassword
, и клиент успешно авторизовался – доступ предоставляется.Проверяется OAuth токен, доступ предоставляется если токен верен.
stringaccess.password
– пароль для авторизации.
stringaccess.user
– имя пользователя веб авторизации.
arrayaccess.whitelist
= []
– список IP4\IP6 адресов, с которых разрешен доступ без авторизации.
object reconnect
– параметры переподключения к потоку при потере или разрыве сетевого соединения.
secondsreconnect.interval
= 3s
– минимальный таймаут в секундах между попытками подключения к потоку камеры.
secondsreconnect.period
=5m
– максимальный интервал времени, через который будет осуществляться подключение к камере в случае неудачных последовательных попыток переподключения.
numberreconnect.total
= 10
– количество неудачных последовательных попыток подключения, после которых медиасервер перестанет делать очередную попытку переподключения и отметит поток invalid
– необслуживаемый. Повторно запустить поток можно только через метод APIStream.Update
.
Определена следующая схема переподключения к потоку:
В случае обнаружения разрыва соединения, Mediaserver проверит общее количество неудачных попыток подключения. Если количество равно или превышает reconnect.total
, то отметит поток как invalid
и прекратит попытки подключения. Если попытки подключения не исчерпаны, то через интервал осуществит попытку подключения. Если попытка удалась, сбросит счетчик ошибок переподключения. В случае неуспешной попытки увеличит счетчик и изменит интервал подключения, прибавив к текущему интервалу значение reconnect.interval
. Каждый раз при неуспешной последовательной попытке подключения интервал будет увеличиваться до значения reconnect.period
, после чего, до истечения reconnect.total
, подключения будут осуществляться через интервал reconnect.period
.
Пример:
Если reconnect.interval = 3s
, reconnect.period = 180s
, то период подключения будет 3
,6
,9
,12
... 180
,180
... 180
POST /api/ |
{
"jsonrpc": "2.0",
"method": "Stream.Add",
"params": {
"camera": "uid",
"stream": "uid",
"source": "url",
"priority": "",
"enable": true,
"tracks": [
"audio",
"video"
],
"cluster": {
"primary": "string",
"secondary": "string"
},
"dvr": {
"enable": "string",
"location": "string",
"duration": "1d",
"quota": "0G",
"buffer": "1M"
},
"capture": {
"enable": "string"
},
"live": {
"enable": "string"
},
"access": {
"allow": "private",
"whitelist": [],
"user": "string",
"password": "string"
},
"reconnect": {
"interval": "3s",
"period": "5m",
"total": 10
}
},
"id": 1
}
curl -k --request POST \
--url 'https://your-domain/api/' \
--header 'Content-Length: 953' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <api-authorization-token>' \
--header 'Content-Length: <Длина данных>' \
--data '{
"jsonrpc": "2.0",
"method": "Stream.Add",
"params": {
"camera": "uid",
"stream": "uid",
"source": "url",
"priority": "",
"enable": true,
"tracks": [
"audio",
"video"
],
"cluster": {
"primary": "string",
"secondary": "string"
},
"dvr": {
"enable": "string",
"location": "string",
"duration": "1d",
"quota": "0G",
"buffer": "1M"
},
"capture": {
"enable": "string"
},
"live": {
"enable": "string"
},
"access": {
"allow": "private",
"whitelist": [],
"user": "string",
"password": "string"
},
"reconnect": {
"interval": "3s",
"period": "5m",
"total": 10
}
},
"id": 1
}'
$data = array (
'jsonrpc' => '2.0',
'method' => 'Stream.Add',
'params' =>
array (
'camera' => 'uid',
'stream' => 'uid',
'source' => 'url',
'priority' => '',
'enable' => true,
'tracks' =>
array (
0 => 'audio',
1 => 'video',
),
'cluster' =>
array (
'primary' => 'string',
'secondary' => 'string',
),
'dvr' =>
array (
'enable' => 'string',
'location' => 'string',
'duration' => '1d',
'quota' => '0G',
'buffer' => '1M',
),
'capture' =>
array (
'enable' => 'string',
),
'live' =>
array (
'enable' => 'string',
),
'access' =>
array (
'allow' => 'private',
'whitelist' =>
array (
),
'user' => 'string',
'password' => 'string',
),
'reconnect' =>
array (
'interval' => '3s',
'period' => '5m',
'total' => 10,
),
),
'id' => 1,
);
$context = stream_context_create([
'ssl'=>['verify_peer' => false],
'http' => [
'method' => 'POST',
'header' => "Content-Type: application/json\r
Accept: application/json\r
Authorization: Bearer <api-authorization-token>\r
Content-Length: <Длина данных>",
'content'=>json_encode($data)
]
]);
$result = file_get_contents('https://your-domain/api/', false, $context);
200 |
UID камеры, UID добавленного потока
JSON
|
400 |
Ошибка json-rpc
JSON
|
500 |
Ошибка сервера |