Перейти к контенту
Форум о видеонаблюдении

Рекомендуемые сообщения

В 23.05.2018 в 20:47, Andrey_Ra сказал:

А вот полный код программы PHP, которая формирует этот самый linia.h264, выгружая кадры нужного канала за искомый период (дальнейшую обработку можете дописать сами):

  Добавлю реализацию на Python (3.8.5). Для работы скрипта необходимо поставить дополнительно msgpack, requests 

import msgpack
import requests
from requests.auth import HTTPDigestAuth
import sys

# Настройки
channel = 2
start_time = [2020, 8, 14, 17, 48, 50]
end_time = [2020, 8, 14, 18, 20, 50]
login = 'admin'
password = 'admin'
url = 'http://127.0.0.1:9786/rpc'
header = {'Content-type': 'application/x-msgpack'}

data = msgpack.packb(
{
"method" : "archive.get_frames_list",
 "params" :
    {
    "channel" : channel,
    "stream" : "video",
    "start_time" : start_time,
    "end_time" : end_time
    }
}
)
# print(data)
try:
    a = requests.post(url, auth=HTTPDigestAuth(login, password), data=data, headers=header)
except Exception as e:
    print("Error: ", e)
    sys.exit(1)

try:
    frames = msgpack.unpackb(a.content)
except Exception as e:
    print(f"Error {a.status_code}: ", e)
    sys.exit(1)

# print(frames)
frames_id = []
key_frame = 0
for frame in frames['result']['frames_list']:
    # print(frame)
    if (key_frame == 0) and (frame['gop_index'] != 0):
        # print('Not a key')
        pass
    else:
        if (frame['gop_index']==0):
            key_frame+=1
            frames_id.append([])
            # print('Found key')
        frames_id[key_frame-1].append(frame['id'])

print("Скачиваем групп кадров: ", len(frames_id))
f = open('linia.h264','wb')
for frame_keys in frames_id:
    # print("Frame_keys", frame_keys)
    print("#", end='')
    for frame in frame_keys:
        # print(frame)
        data = msgpack.packb(
            {"method": "archive.get_frame","params":{"channel": channel,"stream": "video","id": frame}}
                        )
        a = requests.post(url, auth=HTTPDigestAuth(login, password), data=data, headers=header)
        payload = msgpack.unpackb(a.content, raw=True)
        f.write(payload[b'result'][b'frame'][b'raw_bytes'])
f.close()
print("\r\nРабота программы завершена")

Спасибо Andrey_Ra за шпаргалку :)

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо, что сообщили о результате и дополнили информацию.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте!

 

Пишу в эту тему, потому как, вопрос более всего приближен к её названию. Я работаю над интеграцией DevLine с ПО предприятия, и для связи с регистраторами использую API RPC DevLine, задача у меня состоит в том, чтобы выполнять запросы к видеорегистраторам на доступность архива за определённый промежуток времени и в случае успеха запрашивать отдельный кадр. У меня получилось выполнить запрос с именем метода "archive.get_frames_list"  и я получил список доступных записей фреймов с идентификаторами (content-type в запросе, я указывал application/json),  но запрос отдельного фрейма по идентификатору в формате application/x-msgpack, как написано в спецификации, не получается. Если я указываю формат application/json я получаю ответ, где в поле "raw_bytes" присутствуют данные, но прочитать я их не могу, возможно потому, что неверно указал формат данных. Есть ли у Вас какие-либо примеры по работе с архивом через API RPC?

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте!

Переношу Ваше сообщение в эту тему, прошу ознакомится с ней.

raw_bytes дополнительно декодировать не нужно.

Версию прошивки регистратор уточните  и покажите запрос и ответ. 

Готовых примеров, к сожалению, нет.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, Станислав сказал:

Готовых примеров, к сожалению, нет.

Линия 8, html5, архив работает через API rpc, код на js. Кадры jpeg 3 поток, но так же можно брать 1,2. Но для этого лучше другой язык использовать и декодировать кадры через ffmpeg либы

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти

×