Добрый день.
Добавить водяной знак в поток можно на стороне сервера двумя способами:
1. Создать транскодер для потока при помощи REST API /transcoder/startup, и добавить картинку в поток
Code:
POST /rest-api/transcoder/startup HTTP/1.1
HOST: wcs:8081
content-type: application/json
{
"uri": "transcoder://tcode1",
"remoteStreamName": "test",
"localStreamName": "testT",
"encoder": {
"width": 640,
"height": 480,
"keyFrameInterval": 30,
"fps": 30,
"watermark": "/opt/media/Test.png"
}
}
Картинки для добавления водяных знаков необходимо поместить в каталог на сервере, например /opt/media/. Поддерживается формат PNG.
2. Использовать собственный класс для
перехвата и обработки декодированных фреймов. В этом случае необходимо реализовать Java класс который будет вызван для каждого декодированного фрейма. Вы получаете на вход фрейм в YUV формате, и можете изменять его попиксельно, в том числе отрисовывая текст или картинку. Чтобы этот способ работал, необходимо включить транскодинг для конкретного потока (например, заказывая воспроизведение с заданной шириной и высотой картинки) или для всех потоков на сервере при помощи настройки
Code:
disable_streaming_proxy=true
В обоих случаях, на сервере необходим транскодинг потоков, чтобы декодировать картинки, изменять их и кодировать обратно, поэтому нагрузка на процессор возрастет. Как правило, одно ядро CPU требуется, чтобы закодировать два 720p потока. Для кодирования одного 1080p потока, потребуется уже два ядра.
Также текст или картинку можно добавить на стороне клиента. Для этого поток в браузере нужно захватывать не непосредственно с камеры, а
с канваса (см также
статью). В
последних сборках Web SDK добавлен пример с применением фильтров к изображению
Stream Filter (исходный код
на GitHub), аналогичным образом можно рисовать в кадре текст или картинку. В этом случае кодирование и декодирование производится на стороне клиента, что позволяет разгрузить сервер.