Наложение информации на поток IP- камеры c ардуино

in
Offline
Зарегистрирован: 29.08.2019

В камерах HIKVISION можно выводить текстовую информацию на видеопотом, например, информацию с датчиков. 

С компьютера делается это следующим образом:

1.формируем XML файл со следующим содержимым

<?xml version="1.0" encoding="UTF-8"?>
<TextOverlay version="1.0" xmlns="http://www.hikvision.com/ver10/XMLSchema">
<id>1</id>
<enabled>true</enabled>
<posX>20</posX>
<posY>20</posY>
<message>text_for_test</message>
</TextOverlay>

2.при помощи утилиты CURL, из командной строки windows(в десятке эта утилита уже встроена) отправляем содержимое файла на камеру

 
Получаем ответ, что все хорошо, и на видео потоке накладывается нужный текст
 
<?xml version="1.0" encoding="UTF-8"?>
<ResponseStatus version="1.0" xmlns="http://www.hikvision.com/ver10/XMLSchema">
<requestURL>/Video/inputs/channels/1/overlays/text</requestURL>
<statusCode>1</statusCode>
<statusString>OK</statusString>
</ResponseStatus>

 

Все работает земечательно. Как то же самое реализовать с помощью ардуино и Ethernet shield?

пробовал что-то типа такого, но ничего не вышло

      client.connect("admin:admin@192.168.1.245/Video/inputs/channels/1/overlays/text", 80))
      client.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
      client.println("<TextOverlay version=\"1.0\" xmlns=\"http://www.hikvision.com/ver10/XMLSchema\">");
      client.println("<id>1</id>");  
      client.println("<enabled>true</enabled>");
      client.println("<posX>200</posX>");
      client.println("<posY>200</posY>");
      client.println("<message>2222</message>");
      client.println("</TextOverlay>");

так как же это все-таки сделать правильно?

Morroc
Offline
Зарегистрирован: 24.10.2016

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

in
Offline
Зарегистрирован: 29.08.2019

запрос, если с компа отправляешь, выглядит так

запрос

Ответ выглядит так:

ответВопрос, как это повторить с АРДУИНО?

in
Offline
Зарегистрирован: 29.08.2019

Подозреваю, что это очень просто, но пока не допер, как :(

В особенности- кусок, где авторизация... как его заслать?

Morroc
Offline
Зарегистрирован: 24.10.2016
in пишет:
 
      client.connect("admin:admin@192.168.1.245/Video/inputs/channels/1/overlays/text", 80))
 
оно вроде так не умеет, там просто указывается сервер и порт, а далее надо авторизоваться как то так
 
    client.println("GET /search?q=arduino HTTP/1.1"); // тут нужно PUT судя по перехвату
    client.println("Authorization: Basic QzF5WXIxXG15cW14FkJheWVyMTIz"); 
 
вот тут сгенерить ключ можно ( не проверял :) )
 
negavoid
Offline
Зарегистрирован: 09.07.2016

Ключ - это обычный base64( "user:password" );

in
Offline
Зарегистрирован: 29.08.2019

не, нифига не выходит.

Есть кто-нибудь, кто

за вознаграждение

может подсказать, как с ардуино можно отправить то же самое, что и отправляет команда

curl -T c:\_\1.xml http://admin:admin@192.168.1.245/Video/inputs/channels/1/overlays/text

содержимое 1.xml написано выше.

 

Ибо я зашел в тупик.....

sadman41
Offline
Зарегистрирован: 19.10.2016

Могу, но задорого.

in
Offline
Зарегистрирован: 29.08.2019

каков бюджет?

sadman41
Offline
Зарегистрирован: 19.10.2016

Писните на wrk.sadman@gmail.com

Хотя, я, конечно не особо понимаю, в чём затруднения...

sadman41
Offline
Зарегистрирован: 19.10.2016

На тестовом скетче всё закидывается, камера говорит "ОК". Картину с камеры постить не буду - она непубличная.

 

in
Offline
Зарегистрирован: 29.08.2019

Сам уже нашел ошибку. Спасибо всем откликнувшимся.

Morroc
Offline
Зарегистрирован: 24.10.2016

sadman41 пишет:
Картину с камеры постить не буду - она непубличная.

Ничеси. Самое интересное в этой теме )

Код бы запостили - может пригодится кому то.

sadman41
Offline
Зарегистрирован: 19.10.2016

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

artemmaster1
Offline
Зарегистрирован: 01.10.2013

Дайте пожалуйста рабочий код. 

artemmaster1
Offline
Зарегистрирован: 01.10.2013

Второй день пытаюсь повторить ваш опыт, но всё без успешно. Кто может подскажите что не так делаю.

#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h>

byte IntIP[] = { 192,168,100,249 };
byte IntMac[] = { 0x90, 0xA2, 0xDA, 0x00, 0xE3, 0x0F };

EthernetClient client;


void setup()

{ 
  
}
  

void loop()
{
  
  Ethernet.begin(IntMac, IntIP);

    client.connect("admin:12345@192.168.100.248/Video/inputs/channels/1/overlays/text",80);
    client.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
    client.println("<TextOverlay version=\"1.0\" xmlns=\"http://www.hikvision.com/ver10/XMLSchema\">");
    client.println("<id>1</id>");  
    client.println("<enabled>true</enabled>");
    client.println("<posX>200</posX>");
    client.println("<posY>200</posY>");
    client.println("<message>Zarabotalo</message>");
    client.println("</TextOverlay>");

}

 

Алексей.
Алексей. аватар
Offline
Зарегистрирован: 02.02.2018

@artemmaster1, такое впечатление,что вы не представляете что делаете, для чего нужен Ethernet.begin и как его использовать, что такое EthernetClient и что он можем выполнять.
Кроме транспортного уровня tcp, есть еще протокольный уровень http, у которого есть различные методы.
На скриншоте видно что выполнялся метод PUT, кроме этого протокол предусматривает аутентификацию клиента, там-же на скриншоте видно, что выполнялась базовая аутентификация.
Таким образом, необходимо кроме передаваемого xml содержимого, сформировать http заголовки, обязательно включить в них заголовок Authorization, иначе получите 401-й код Unauthorized
Подробно о протоколе изложено в rfc2616

artemmaster1
Offline
Зарегистрирован: 01.10.2013

вы правы, знания мои малы. не чего не понял что вы сказали но всё равно спасибо. 

Я же правильно понимаю, arduino выступает в роли Web client?

sadman41
Offline
Зарегистрирован: 19.10.2016

Про webclient - правильно.

artemmaster1
Offline
Зарегистрирован: 01.10.2013

камера уже хотя бы меня посылает... уже прорыв) теперь понять как пройти авторизацию. её скармливать admin:admin@192.168.1.248 или как то в иной форме...

sadman41
Offline
Зарегистрирован: 19.10.2016

Алексей Н. написал про авторизацию.

Sirocco
Offline
Зарегистрирован: 28.09.2013

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

keeper20086
Offline
Зарегистрирован: 06.11.2020

Всем доброго времени.

Кто нибудь решение выложит? Не жадничайте =)

keeper20086
Offline
Зарегистрирован: 06.11.2020

или хотя бы ссылку куда смотреть

Boztepe
Offline
Зарегистрирован: 16.01.2021

Привет,

Вы можете поделиться кодом?