Документация Flussonic Watcher

Contents

Просмотр видео с камер на внешнем сайте

Flussonic Media Server позволяет просматривать видео-потоки не только в своем веб-интерфейсе, но и на сторонем сайте. Для этого есть специальная страница embed.html с плеером.

Похожая возможность есть и в Watcher. Если необходимо интегрировать Watcher с внешним сайтом, например, личным кабинетом вашего сервиса или корпоративным порталом, то API Watcher поможет автоматически выдавать ссылку на плеер, учитывая активный стример и права пользователя. Ссылки можно генерировать на прямой эфир, на архивный плеер, на определенный участок архива.

Этот раздел расскажет о том, как вставить видео, получаемое с IP камеры, из Flussonic Watcher на внешнюю веб-страницу, включая:

  • формирование ссылки на видео
  • разные виды ссылок (прямой эфир, архив, часть архива)
  • способы использования ссылки и параметры, которые можно использовать в URL (см. в документации Flussonic Media Server)

Получение URL для вставки видео на сайт

Для формирования URL для доступа к видео нужно сгенерировать токен, который будет использоваться в этом URL. Мы рекомендуем создать выделенного пользователя в Watcher для этой цели. Идентификатор сеанса и токен нужно запрашивать с помощью Watcher API v2. Токен действует до тех пор, пока у пользователя не сменится пароль.

Генерировать URL можно программно. Примеры скриптов будут приведены после описания последовательности действий.

Чтобы создать ссылку для встраивания видео на веб-страницу:

  1. Создайте пользователя, который будет использоваться для создания токена для доступа к камере. Например, создадим пользователя webuser и добавим его в вашу Организацию.

    Создать пользователя Watcher в Организации

  2. Дайте созданному пользователю разрешения на управление камерами в Организации. Эти должны быть те камеры, которые вы хотите показывать на внешнем сайте.

    В свойствах пользователя на вкладке Доступ к камерам щелкните значок с камерой напротив папки, доступ к которой вы хотите дать пользователю.

    Права пользователей Watcher на Папки

  3. Получите идентификатор сессии для этого пользователя. Используйте следующий вызов API v2:

    curl http://watcher-ip/vsaas/api/v2/auth/login -H 'Content-Type: application/json' --data-binary '{"login":"webuser", "password":"webuser"}'
    

    Сервер ответит следующим образом:

    {
    "groups_count": 0,
    "notification_email": null,
    "session": "Z-aCeqoKapk-DhfnqSGEOI5kVT0",
    "is_admin": true,
    "login": "webuser"
    }
    

    Подробнее о вызове /api/v2/auth/login

    Скопируйте из ответа сервера переменную "session": "Z-aCeqoKapk-DhfnqSGEOI5kVT0".

  4. Получим данные о камерах, доступных для пользователя:

    curl http://WATCHER-IP/vsaas/api/v2/cameras/ -H "x-vsaas-session:Z-aCeqoKapk-DhfnqSGEOI5kVT0"
    

    Подробнее о вызове

    Чтобы получить данные только об отдельных камерах, добавьте в запрос название камеры:

    curl http://WATCHER-IP/vsaas/api/v2/cameras/CAMERA_NAME -H "x-vsaas-session:Z-aCeqoKapk-DhfnqSGEOI5kVT"
    

    Сервер ответит следующим образом:

    {
    'stream_url': 'fake://fake',
    'playback_config': {'token': 'WyIxMzgzIiwyXQ.DrEHcw.h7RL4o83OSbFMrW-wMWJXcdXfgU'},
    'dvr_path': None,
    'title': 'test',
    'substream_url': '',
    'agent_id': None,
    'access': 'private',
    'static': True,
    'onvif_url': None,
    'agent_serial': None,
    'agent_status': None,
    'external_id': None,
    'groups': [],
    'owner': 'tst',
    'agent_model': None,
    'comment': '',
    'user_attributes': {},
    'dvr_space': None,
    'coordinates': '37.768665 55.652579',
    'enabled': True,
    'server': 'WATCHER-IP',
    'postal_address': '',
    'thumbnails': True,
    'permissions': {'dvr': None, 'ptz': False, 'edit': True, 'view': True},
    'dvr_depth': None,
    'stream_status': {'lifetime': 1963704,
    'source_error': None,
    'alive': True,
    'https_port': None,
    'http_port': None,
    'bitrate': 183,
    'rtmp_port': 1935,
    'rtsp_port': 8554,
    'server': 'WATCHER-IP'},
    'onvif_profile': None,
    'name': 'CAMERA_NAME',
    'dvr_protected': False,
    'thumbnails_url': None,
    'onvif_ptz': False,
    'agent_key': None}
    

    Из полей ответа вам нужны server, name и token.

  5. С помощью полученных значений server, name и token сформируйте URL для просмотра видео с камеры на странице embed.html. Пример URL:

    http://WATCHER-IP/vsaas/embed/CAMERA_NAME?token=WyIxMzgzIiwyXQ.DrEHcw.h7RL4o83OSbFMrW-wMWJXcdXfgU
    

Скрипты для получения URL для встраивания видео с камер на сайт

После того, как вы создадите отдельного пользователя (webuser в процедуре выше), вы можете запустить следующий скрипт, который принимает логин и пароль в качестве входных данных и выводит для каждой камеры строку с кодом для вставки на сайт.

Cкрипт на Python для генерации RTSP URL

import os
import sys
import requests

server = sys.argv[1]
s = server.split('//')
path = ''
file = str(path) + s[1] + '.txt'

sysargv_auth = {"login": sys.argv[2], "password": sys.argv[3]}

url = sys.argv[1] + '/vsaas/api/v2/'

print(url, sysargv_auth)
print(len(sys.argv))


def get_session():
    r = requests.post(url + 'auth/login', json=sysargv_auth)
    print(r)
    if r.status_code == 200:
        session_id = r.json()['session']
        file_auth = open(file, 'w+')
        file_auth.write(session_id)
        file_auth.close()
        return session_id
    else:
        print('Get session: delete file')
        os.remove(file)
        exit(1)

def get_cams():

    if os.path.isfile(file):
        print('Is file')
        file_auth = open(file, 'r')
        session_id = file_auth.read()
    else:
        print('no file')
        session_id = get_session()

    headers = {'x-vsaas-session': session_id, 'X-Page-Limit':'99'}

    r = requests.get(url + 'cameras', headers=headers)

    if r.status_code == 403:
        os.remove(file)
        exit(1)

    cam_list = 'link\n'

    for el in r.json():
        if el['stream_status']['server']:
            server = str(el['stream_status']['server'])
            link = 'rtsp://' + server + ':554/' + el['name'] + '?token=' + el['playback_config']['token']
        else:
            server = 'null'
            link = 'null'
        cam_list += link + '\n'

    return cam_list


print(get_cams())

PHP скрипт генерации HTTP URL для вставки камеры на сайт

<?php

$server = $_GET["server"];

$auth = [ 'login' => $_GET['login'], 'password' => $_GET['pass']]; // 1 line instead of 3

if(empty($server)) {
        echo "The server address and auth data not provided";
        header('HTTP/1.0 204 No Content');
        error_log('No server address provided', 4);
        die();
}

$options = array(
  'http' => array(
    'method'  => 'POST',
    'content' => json_encode( $auth ),
    'header'=>  'Content-Type: application/json'
    )
);

$context  = stream_context_create( $options );
$result = file_get_contents( "http://$server/vsaas/api/v2/auth/login", false, $context );
$response = json_decode($result, true);
$session = $response['session'];

$get_cams = array(
        'http' => array(
                'method' => 'GET',
                'header' => 'Content-Type: application/json',
                'header' => "x-vsaas-session: $session",
        'header' => 'x-page-limit: 99'
        )
);

$context_cam = stream_context_create($get_cams);
$result_cam = file_get_contents("http://$server/vsaas/api/v2/cameras", false, $context_cam);
$resp_cam = json_decode($result_cam, true);

foreach($resp_cam as $key => $cam) {
        $cam_token = $cam['playback_config']['token'];
        $cams_url[] = "http://" .$cam['stream_status']['server']. '/' .$cam['name']."/embed.html?token=$cam_token";
}

foreach($cams_url as $url){
        echo "<iframe style=\"width:640px; height:480px;\" allowfullscreen src=\"$url\"></iframe>";
        };
?>

Примеры URL

В примере используется камера с именем CAMERA_NAME. Время следует указывать в Unix Timestamp.

Просмотр прямого эфира с низкой задержкой:

http://WATCHER-IP/vsaas/embed/CAMERA_NAME?dvr=false&token=WyI2MTA1IiwiNCJd.Dhz88A.dW7On6GSgVni7k8cJNYZuISzhe0

Просмотр прямого эфира с низкой задержкой с элементами управления для просмотра архива:

http://WATCHER-IP/vsaas/embed/CAMERA_NAME?dvr=true&token=WyI2MTA1IiwiNCJd.Dhz88A.dW7On6GSgVni7k8cJNYZuISzhe0

Просмотр архива начиная с указанного времени:

http://WATCHER-IP/vsaas/embed/CAMERA_NAME?dvr=false&token=WyI2MTA1IiwiNCJd.Dhz88A.dW7On6GSgVni7k8cJNYZuISzhe0&from=1530620900