Добавить п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.locationREQUIRED – если разрешена запись 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 |
Ошибка сервера |