Скриншоты

Nikita

New Member
Здравствуйте!
Возникла необходимость делать скриншоты каждого транслируемого потока на сервере через n секунд, можно ли это сделать через АПИ сервера? Пройтись по потокам и дернуть у каждого скриншот, записав его в папку. Я знаю что где-то в конфиге есть параметр дергающий сервер через заданное в этом параметре время, вот туда и хотелось встроить создание скриншотов текущих потоков. Подскажите, пожалуйста, как это правильно реализовать без задержки сервера, что бы картинка не переживалась и не тратила ресурсы и не было "притормаживаний" в этот момент у всех, спасибо!
 

Max

Administrator
Staff member
Добрый день. Документация по снапшотам находится здесь.
При запросе снапшота для потока запускается видео декодер. После снятия снапшота декодер выключается.
Декодер в любом случае будет потреблять дополнительные ресурсы, но если на сервере хватает CPU, это должно остаться незаметным для пользователей.
 

Nikita

New Member
подскажите, пожалуйста, а то или обновлять или нет до 5.1....
 

Nikita

New Member
ответ
{"timestamp":1533887641305,"status":404,"error":"Not Found","exception":"com.flashphoner.server.manager.controller.exception.NotFoundException","message":"NOT FOUND","path":"/rest-api/stream/snapshot"}
 

Max

Administrator
Staff member
Какая версия?
В 5.1 работает. Сборка 3428.
1. Делаем REST запрос
Code:
http://demo.flashphoner.com:9091/rest-api/stream/snapshot
{"streamName":"cd7f"}
2. В последних сборках REST переместили на ядро сервера. Поэтому этот запрос вернет 308 статус.
Code:
HTTP/1.1 308 Permanent Redirect
Server: Apache-Coyote/1.1
Location: http://demo.flashphoner.com:8081/rest-api/stream/snapshot
Content-Length: 0
Date: Fri, 10 Aug 2018 12:13:32 GMT
Если ваш REST-клиент не поддерживает 308 редирект, перенастройте его на порт 8081.
3. Отправляем на 8081.
Code:
http://demo.flashphoner.com:8081/rest-api/stream/snapshot
{"streamName":"cd7f"}
4. Ответ со снапшотом.
Code:
{"data": "iVBORw0KGgoAAAANSUhEUgAAAUAAAADwCAYAAABxLb1rAAAACXBIWXMAAAAAAAAAAQCEeRdzAAAQAElEQVR4nOy9B3gUR7b+PYDt9ebsu/fbfPd68+7/3r27a1Ai"}
подскажите, пожалуйста, а то или обновлять или нет до 5.1....
Могут быть регрессии.
Можете потестировать 5.1 на другом сервере.
Можете на том же сервере переключиться на 5.1 с возможностью быстро откатиться на 5.0, как описано в документации
Т.е. надо тестировать с вашими конкретными кейсами.
 

Nikita

New Member
PHP, curl
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://localhost:9091/rest-api/stream/snapshot');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($mess));
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));

в логах ответ {"timestamp":1533887641305,"status":404,"error":"Not Found","exception":"com.flashphoner.server.manager.controller.exception.NotFoundException","message":"NOT FOUND","path":"/rest-api/stream/snapshot"} это в _manager_log
 

Nikita

New Member
опять таки, закрытие потока и отправка сообщений, таким же курлом, пашет на ура
 

Max

Administrator
Staff member
Похоже на неправильное имя потока в теле запроса. Для того, чтобы определить причину, нам потребуется:
1. Знать, как формируется тело запроса (переменная $mess в приведенном Вами фрагменте кода). Лучше показать соответствующий фрагмент кода.
2. Логи со стороны WCS сервера (не просто описание ошибки, а весь файл flashphoner_manager.log).
3. Дампы http трафика (Wireshark, tcpdump) со стороны, отправляющей запрос, и со стороны WCS сервера.
Тестовый запрос из консоли вернул 415, скорее всего, потому, что в параметрах не был прописан заголовок Content-Type: application/json. По умолчанию многие REST-консоли подставляют application/octet-stream, а сервер такие запросы не поддерживает.
 

Nikita

New Member
Здравствуйте! Спасибо большое, я разобрался, все работает!
Еще вопросы:
1. Скриншот можно сделать только со стрима, который кто-то смотрит. Со стрима просто зарегистрированном на сервере этого сделать невозможно, приходит та самая ошибка 404. Можно ли делать скрины всех без исключения транслируемых стримов через РЕСТ АПИ?
2. При включении keep_alive_striming_session_enabled очень много лишне информации пишется в fkashphoner_manager.log, можно эти сообщения по этому вызову исключить из лога?

Спасибо
 

Max

Administrator
Staff member
Скриншот можно сделать для любого потока, опубликованного на сервере, воспроизводить поток для этого необязательно. Попробуйте сделать, например, так:
1. Опубликуйте поток c именем testSnapshot в примере Two Way Streaming на сервере wcs5-demo.flashphoner.com (WCS 5.0.3406)
2. Отправьте из REST клиента http://wcs5-demo.flashphoner.com:9091/rest-api/stream/snapshot с заголовком Content-Type: application/json и телом {"streamName": "testSnapshot"}
Что касается исключения информации из лога, над этим можно подумать, если таких запросов от пользователей сервера будет достаточно много.
 

Nikita

New Member
Да, Вы правы. На вашем https://wcs5-demo.flashphoner.com/login.xhtml все так и есть, на моем включено streaming_video_decoder_fast_start=false и из-за нее оно не работает без просмотра кого-то, это я сокращал нагрузку на сервер, что бы не декодировало без необходимости.
 

Max

Administrator
Staff member
В Вашем случае без дополнительного декодирования не обойтись: чтобы получить картинку из потока, поток должен быть декодирован. Однако, поскольку снятие скриншота - операция кратковременная, декодер создается и тут же уничтожается, поэтому средняя загрузка процессора не должна существенно возрасти.
Кстати, в версии 5.1 настройка streaming_video_decoder_fast_start=false не отключает декодер при создании скриншота, см документацию.
 

Max

Administrator
Staff member
Мы воспроизвели ситуацию на версии 5.0. Действительно, если активна настройка streaming_video_decoder_fast_start=false, скриншот через REST API снимается с воспроизводимого потока. Таким образом, если Вам необходимо снимать скриншоты с публикуемых потоков, и вы снижаете нагрузку на сервер, включая декодирование только по запросу, то Вам необходимо обновиться до версии 5.1. На данный момент REST API в версии 5.1 совместимо со скриптами, разработанными для 5.0, поэтому проблем у Вас возникнуть не должно.
Что касается нагрузки на сервер, в 5.1 декодер отключается сразу после снятия скриншота, в 5.0 - только после остановки стрима, так что и здесь от обновления будет небольшой выигрыш.
Процедура обновления с 5.0 до 5.1 описана здесь.
 
Top