Table of Contents |
---|
Описание
Начиная со сборки 5.2.2022, WCS поддерживает аппаратное ускорение при декодировании и кодировании видео с использование NVIDIA GPU.
Требования к серверу
- Ubuntu 22.04 или новее
- установленные драйверы NVIDIA
- установленный графический адаптер NVIDIA
Поддерживаемые сценарии использования
- транскодинг H264 и H265 в любом сочетании
- микшер H264 (только кодирование)
- HLS ABR H264
- WebRTC ABR H264
Warning |
---|
Если поток был декодирован на CPU, то и кодироваться он будет тоже на CPU (за исключением микшера, входящие потоки которого декодируются на CPU, но выходной поток может кодироваиться на GPU) |
Неподдерживаемые сценарии использования
Транскодинг на GPU не поддерживается для:
- кодека VP8 в любом сочетании
- снятия превью трансляции (снапшотов)
- перехвата декодированных кадров
Warning |
---|
Во всех этих случаях поток должен декодироваться и кодироваться на CPU, аппаратное ускорение должно быть отключено |
Рекомендуется выделять под вышеперечисленные сценарии отдельный сервер без GPU.
Настройка
Для работы аппаратного ускорения на сервере должны быть установлены NVIDIA CUDA драйверы по инструкции с официального сайта. При этом CUDA toolkit устанавливать не нужно:
...
- sample.mp4 - файл-источник видео для тестирования, должен содержать видео максимального разрешения, которое будет использоваться в эксплуатации, например, 1920x1080
- --separate-test - провести тестирование всех GPU, установленных на сервере и доступных операционной системе; если этот ключ не указан, проводится тест одного GPU, выбранного случайным образом
- --interval - интервал в секундах между тестами различных чипов
Для тестирования инструмент использует профили кодирования, заданные в файле /usr/local/FlashphonerWebCallServer/conf/hls_abr_profiles.yml
(см HLS ABR на одном узле).
Инструмент проводит тестирование и создает файл настроек с максимальными параметрами GPU по результатам теста. Если тестируется несколько чипов, в настройках будут указаны их идентификаторы на PCI шине. Если тестируется только один чип (ключ --separate-test
не указан), в настройках будет имя GPU.
...
настройки декодирования будут сбрасываться при каждом изменении разрешения. Это может сильно повлиять на производительность.
Мониторинг
Текущую статистику использования GPU можно получить при помощи REST API.
REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:
- HTTP: http://streaming.flashphoner.com:8081/rest-api/gpu/info
- HTTPS: https://streaming.flashphoner.com:8444/rest-api/gpu/info
Здесь:
- streaming.flashphoner.com - адрес WCS-сервера
- 8081 - стандартный REST / HTTP порт WCS-сервера
- 8444 - стандартный HTTPS порт
- rest-api - обязательный префикс
- /gpu/info - используемый REST-вызов
REST методы и статусы ответа
/gpu/info
Получить текущую статистику использования всех GPU
Request example
Code Block | ||||
---|---|---|---|---|
| ||||
POST /rest-api/gpu/info HTTP/1.1
Host: localhost:8081
Content-Type: application/json |
Response example
Code Block | ||||
---|---|---|---|---|
| ||||
HTTP/1.1 200 OK Access-Control-Allow-Origin: * Content-Type: application/json { "cudaVersion": "12.4", "nvencVersion": "12.2", "driverVersion": "550.90.07", "nvmlVersion": "12.550.90.07", "numOfAvailableDevices": 1, "numOfDecodingSessions": 1, "numOfEncodingSessions": 5, "numOfHostEncodingSessions": 5, "deviceList": [ { "name": "Tesla P100-PCIE-16GB", "pciBusId": "0000:02:00.0", "computeCapability": "6.0", "computeMode": 0, "computeModeDescription": "Default compute mode (Multiple contexts allowed per device)", "numOfDecodingSessions": 1, "numOfEncodingSessions": 5, "numOfHostEncodingSessions": 5, "fpsStats": { "decoderFps": 30, "encoderFps": 30 }, "nativeEncoderStats": { "averageFps": 29, "averageLatency": 1225 }, "utilizationState": { "computeUtilization": 1, "memUtilization": 0, "decoderUtilization": 5, "encoderUtilization": 4, "totalMem": "16 GB", "freeMem": "15.26 GB", "usedMem": "752.25 MB", "usedPciBandwidth": "984.76 KB" }, "supportedEncodeCodecs": { "H265": { "minWidth": 65, "minHeight": 33, "maxWidth": 4096, "maxHeight": 4096 }, "H264": { "minWidth": 33, "minHeight": 17, "maxWidth": 4096, "maxHeight": 4096 } }, "supportedDecodeCodecs": { "H265": { "minWidth": 144, "minHeight": 144, "maxWidth": 4096, "maxHeight": 4096 }, "H264": { "minWidth": 48, "minHeight": 16, "maxWidth": 4096, "maxHeight": 4096 } } } ] } |
Return codes
Code | Reason |
---|---|
200 | OK |
500 | Internal server error |
Параметры
Параметр | Описание | Пример |
---|---|---|
cudaVersion | Версия CUDA | 12.4 |
nvencVersion | Версия NVENC | 12.2 |
driverVersion | Версия драйверов NVIDIA | 550.90.07 |
nvmlVersion | Версия NVIDIA management library | 12.550.90.07 |
numOfAvailableDevices | Количество доступных GPU | 1 |
numOfDecodingSessions | Количество декодеров | 1 |
numOfEncodingSessions | Количество кодировщиков | 5 |
numOfHostEncodingSessions | Количество кодировщиков на сервер | 5 |
name | Имя GPU | Tesla P100-PCIE-16GB |
pciBusId | Идентификатор GPU на PCI шине | 0000:02:00.0 |
computeCapability | Идентификатор возможностей GPU | 6.0 |
computeMode | Режим вычислений GPU | 0 |
computeModeDescription | Описание режима вычислений | Default compute mode (Multiple contexts allowed per device) |
decoderFps | FPS декодирования | 30 |
encoderFps | FPS кодирования | 30 |
averageFps | Средний FPS по данным GPU | 29 |
averageLatency | Средняя задержка по данным GPU в микросекундах | 1225 |
computeUtilization | Процент использования GPU | 1 |
memUtilization | Процент использования памяти | 0 |
decoderUtilization | Процент загрузки декодирования | 5 |
encoderUtilization | Процент загрузки кодирования | 4 |
totalMem | Общее количество памяти | 16 GB |
freeMem | Количество свободной памяти | 15.26 GB |
usedMem | Количество используемой памяти | 752.25 MB |
usedPciBandwidth | Использование пропускной способности шины PCI | 984.76 KB |
minWidth | Минимальная ширина картинки для декодирования/кодирования | 33 |
minHeight | Минимальная высота картинки для декодирования/кодирования | 17 |
maxWidth | Максимальная ширина картинки для декодирования/кодирования | 4096 |
maxHeight | Максимальная высота картинки для декодирования/кодирования | 4096 |