Skip to content

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

Этот раздел расскажет, как самостоятельно сформировать адреса URL для просмотра видео с камер, включая получение токена для пользовательской сессии.

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

Для отдельной камеры есть более быстрый способ автоматически получить URL — нажать кнопку Поделиться напротив камеры в списке камер, но в этом случае формируется 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>";
        };
?>