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 устанавливать не нужно:
...
- gpuName - имя GPU
- pciBusId - идентификатор GPU на PCI шине
- disabled - не использовать GPU
- maxEncodeSessions - максимальное количество кодировщиков на GPU
- maxHostEncodeSessions - максимальное количество кодировщиков на сервере
- maxDecodeSessions - максимальное количество декодеров на GPU
- maxEncoderUtilization - максимальная нагрузка на GPU при кодировании, в процентах
- maxDecoderUtilization - максимальная нагрузка на GPU при декодировании, в процентах
- minMemoryAvailable - минимальное количество свободной памяти
Если в сервер установлены несколько GPU, конфигурация с именем GPU применяется ко всем чипам с таким именем. Конфигурация с идентификатором GPU на PCI шине применяется только к одному GPU, т.к. идентификаторы на PCI шине уникальны для каждого устройства.
Инструмент для тестирования GPU и автоматической генерации файла настроек
Для тестирования нагрузочной способности GPU на сервере и автоматической генерации файла настроек предусмотрен специальный инструмент, который запускается следующим образом:
Code Block | ||||
---|---|---|---|---|
| ||||
/usr/local/FlashphonerWebCallServer/tools/gpu_calibration_tool.sh sample.mp4 --separate-test --interval=20 |
Здесь:
- sample.mp4 - файл-источник видео для тестирования, должен содержать видео максимального разрешения, которое будет использоваться в эксплуатации, например, 1920x1080
- --separate-test - провести тестирование всех GPU, установленных на сервере и доступных операционной системе; если этот ключ не указан, проводится тест одного GPU, выбранного случайным образом
- --interval - интервал в секундах между тестами различных чипов
Для тестирования инструмент использует профили кодирования, заданные в файле /usr/local/FlashphonerWebCallServer/conf/hls_abr_profiles.yml
(см HLS ABR на одном узле).
Инструмент проводит тестирование и создает файл настроек с максимальными параметрами GPU по результатам теста. Если тестируется несколько чипов, в настройках будут указаны их идентификаторы на PCI шине. Если тестируется только один чип (ключ --separate-test
не указан), в настройках будет имя GPU.
Если в сервер установлены разные GPU, и ключ --separate-test
не указан, будет протестировано по одному из GPU каждого типа
Warning |
---|
Во время тестирования WCS должен быть остановлен! |
Изменение конфигурации кодирования/декодирования при изменении разрешения исходного потока
При публикации WebRTC потока разрешение может меняться в ходе публикации. Кроме того, при публикации потока скриншаринга, если захватывается какое-то окно на экране, разрешение также будет меняться при изменении размеров окна. При транскодинге такого потока на GPU, необходимо при каждом изменении разрешения менять параметры декодировщика. С настройками по умолчанию
Code Block | ||
---|---|---|
| ||
hardware_acceleration_enable_soft_reconfiguration=true
hardware_acceleration_reconfigure_max_width=1920
hardware_acceleration_reconfigure_max_height=1088 |
если разрешение снижается, меняются только настройки разрешения для декодирования. Если же разрешение увеличивается выше заданного порога, настройки декодирования будут сброшены, фактически декодер будет создан заново.
С настройкой
Code Block | ||
---|---|---|
| ||
hardware_acceleration_enable_soft_reconfiguration=false |
настройки декодирования будут сбрасываться при каждом изменении разрешения. Это может сильно повлиять на производительность.
Мониторинг
Текущую статистику использования 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 |