Получение URL для вставки видео на сайт
Этот раздел расскажет, как самостоятельно сформировать адреса URL для просмотра видео с камер, включая получение токена для пользовательской сессии.
Приведенные ниже примеры позволят написать код для вашего сайта, который будет выводить, например, только активные камеры определенного пользователя. Также вы научитесь создавать ссылки на поток в необходимом формате.
Для отдельной камеры есть более быстрый способ автоматически получить URL — нажать кнопку Поделиться напротив камеры в списке камер, но в этом случае формируется URL только для одной камеры.
Чтобы создать ссылку для встраивания видео на веб-страницу:
-
Создайте пользователя, который будет использоваться для создания токена для доступа к камере. Например, создадим пользователя
webuser
и добавим его в вашу Организацию. -
Дайте созданному пользователю разрешения на управление камерами в Организации. Это должны быть те камеры, которые вы хотите показывать на внешнем сайте.
В свойствах пользователя на вкладке Доступ к камерам щелкните значок с камерой напротив папки, доступ к которой вы хотите дать пользователю.
-
Получите идентификатор сессии для этого пользователя. Используйте следующий вызов 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"
. -
Получим данные о камерах, доступных для пользователя:
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
. -
С помощью полученных значений
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>";
};
?>