Аппаратное ускорение
Видео с камеры и демонстрации экрана кодируется на видеокарте, когда это позволяют железо и драйвер. Если нет, GameVox переключается на программное кодирование и продолжает работать. На этой странице рассказано, как делается этот выбор, что умеет ваша видеокарта и куда смотреть, если результат не такой, как вы ожидали.
Аппаратное кодирование является лишь одной из вещей, от которых зависит, как выглядит ваше видео. Две другие влияют чаще: ограничение битрейта, заданное для вашей группы на этом сервере, и автоматическое снижение качества, которое включается, когда соединение не тянет поток. Обе описаны в разделе почему картинка всё равно может быть плохой.
На этой странице
Как узнать, что вы используете
Настройки → Аудио и видео → Качество стрима дают ответ быстрее всего. В выпадающем списке «Видеокодек» у каждого варианта есть пометка Hardware Accelerated, Software Encoding или Unsupported, а недоступные вашему компьютеру варианты выделены серым. Ниже карточка «Аппаратное ускорение» показывает бэкенд кодирования, который десктопный клиент обнаружил при запуске (NVENC, AMF, QSV, VAAPI или VideoToolbox), доступные в нём кодеки и связанный с ним бэкенд декодирования. Эта проверка идёт в фоне при запуске, так что к моменту, когда вы откроете настройки, карточка обычно уже заполнена.
Для уже идущего звонка лучше подходит журнал активности голосового канала. Когда кто-то включает камеру или демонстрацию экрана, под этой записью появляется приглушённая строка с кодеком, названием энкодера и отметкой, аппаратный он или программный, например AV1 · AV1 (FFmpeg-NVENC) · hardware. Смена энкодера посреди трансляции получает отдельную запись, так что видно, когда аппаратный путь сдался и что пришло ему на смену.

Остальное есть в лог-файле десктопного приложения. Он лежит в %LOCALAPPDATA%\GameVox\logs\ на Windows, ~/Library/Application Support/GameVox/logs/ на macOS и ~/.gamevox/logs/ на Linux. Какие строки стоит поискать:
[HWEnc] Detected:бэкенд кодирования и кодеки, которые он заявляет[NVENC] Function table loaded successfully (API X.Y)версия API NVENC, которую предоставляет ваш драйвер NVIDIASelected encoder:на чём остановилась лестница для этой трансляции[FFmpegHW] Createdэнкодер открыт, с разрешением и битрейтом[EncSelect] ... trial failedаппаратный энкодер отклонил запрос, и лестница пошла дальше[ScreenShare-Win] Capture backend:WGC, DXGI или BitBlt, используемый способ захвата в Windows
Как выбирается кодек
GameVox согласует AV1, VP9, H.264 и VP8. HEVC в этот набор не входит, поэтому в таблицах ниже его нет, хотя большинство этих видеокарт умеют его кодировать.
Отправитель проходит лестницу сверху вниз и останавливается на первой ступени, которую предложил сервер и которую видеокарта действительно может открыть. Вторая часть не догадка: клиент создаёт одноразовый энкодер ровно с тем разрешением и битрейтом, которые собирается использовать, потому что многие драйверы справляются с 1080p и падают на 4K.
Windows
- AV1 на видеокарте:
av1_nvenc,av1_amfилиav1_qsv - VP9 на видеокарте: только
vp9_qsv. NVIDIA и AMD никогда не выпускали аппаратное кодирование VP9, поэтому такие системы пропускают эту ступень целиком - H.264 на видеокарте:
h264_nvenc,h264_amfилиh264_qsv - VP9 программно (libvpx), затем VP8, затем AV1 через libaom
Linux
- VAAPI AV1, после того как проверка VAAPI в отдельном процессе подтвердила, что он работает
- NVENC AV1, для компьютеров с NVIDIA без моста
nvidia-vaapi-driver - VAAPI VP9
- VAAPI H.264, только для камеры и видео DJ
- NVENC H.264
- libaom AV1, затем libvpx VP9, затем VP8
Демонстрация экрана намеренно пропускает ступень VAAPI H.264. Качество драйверов на содержимом экрана у Intel и AMD было настолько плохим, с сильной блочностью в динамичных сценах, что программный VP9 даёт картинку лучше. NVENC H.264 для демонстрации экрана остаётся включённым, так что компьютер с NVIDIA на Linux всё равно получает аппаратный H.264, а не скатывается до программного энкодера.
VAAPI AV1 остаётся единственной ступенью, которой не доверяют на слово. Стандартный radeonsi из Mesa имеет привычку зависать на первой попытке AV1, поэтому клиент пропускает AV1, пока отдельный процесс проверки хотя бы раз не откроет его успешно. При первом запуске это может означать NVENC или программный AV1 для первой трансляции и VAAPI AV1 после этого.
macOS
Сборка для macOS вообще не содержит аппаратных энкодеров FFmpeg. Кодирование и декодирование идут через VideoToolbox внутри WebRTC-стека WebKit, что даёт ускоренный H.264, но не AV1: Apple ни в один чип так и не поставила энкодер AV1.
Ручной выбор
Выпадающий список «Видеокодек» ставит ваш выбор в начало лестницы, а не навязывает его. Выберите AV1 на GTX 1080, и открывать будет нечего, поэтому лестница вернётся к обычному порядку, а трансляция не сорвётся. Почти всегда лучше всего оставить «Авто».
Пути для разных платформ
| ОС | Кодирование | Декодирование | Производители |
|---|---|---|---|
| Windows 10/11 | NVENC, AMF, Quick Sync | D3D11VA | NVIDIA, AMD, Intel |
| Linux | VAAPI, NVENC | VAAPI, затем NVDEC | AMD (Mesa), Intel (iHD), NVIDIA |
| macOS | VideoToolbox через WebKit | VideoToolbox через WebKit | Apple Silicon, Mac на Intel |
На Linux декодер сначала пробует VAAPI и затем переходит на NVDEC, так что видеокарта NVIDIA декодирует аппаратно и без установленного моста nvidia-vaapi-driver. Аппаратно декодированные кадры возвращаются в NV12 и конвертируются в RGBA на процессоре, что обходится примерно так же, как собственный шаг конвертации программного декодера.
Кодирование по видеокартам
Отправка видео: камера и демонстрация экрана.
| Семейство видеокарт | H.264 | VP9 | AV1 |
|---|---|---|---|
| NVIDIA, через NVENC | |||
| RTX 40 / 50 (Ada Lovelace, Blackwell) | Да | Нет | Да |
| RTX 20 / 30, GTX 16 (Turing, Ampere) | Да | Нет | Нет |
| От GTX 600 до GTX 10 (от Kepler до Pascal) | Да | Нет | Нет |
| AMD, через AMF на Windows и VAAPI на Linux | |||
| RX 7000 / 9000, APU Phoenix (RDNA 3, RDNA 4) | Да | Нет | Да |
| От RX 400 до RX 6000 (от Polaris до RDNA 2) | Да | Нет | Нет |
| Intel, через Quick Sync на Windows и VAAPI на Linux | |||
| Arc серии A/B, Core Ultra (Alchemist, Battlemage, Meteor / Lunar / Arrow Lake) | Да | Да | Да |
| Core с 7-го по 14-е поколение (от Kaby Lake до Raptor Lake) | Да | Да | Нет |
| Core с 4-го по 6-е поколение (от Haswell до Skylake) | Да | Нет | Нет |
| Apple, через VideoToolbox | |||
| Apple Silicon и Mac на Intel с чипом T2 | Да | Нет | Нет |
Intel остаётся единственным производителем, который вообще встраивал энкодер VP9 в потребительские чипы, начиная с Kaby Lake. Кодирование AV1 появилось с Arc и встроенной графикой Core Ultra у Intel, с RDNA 3 у AMD и с Ada Lovelace у NVIDIA. Всё, что старше, кодирует H.264 аппаратно, а всё остальное программно.
Декодирование по видеокартам
Приём видео от всех остальных в канале.
| Семейство видеокарт | H.264 | VP9 | AV1 |
|---|---|---|---|
| NVIDIA, через NVDEC (D3D11VA на Windows, CUDA на Linux) | |||
| RTX 30 и новее (Ampere и выше) | Да | Да | Да |
| GTX 10 / RTX 20 (Pascal, Turing) | Да | Да | Нет |
| GTX 900 (Maxwell 2) | Да | Только 8 бит | Нет |
| GTX 600 / 700 (Kepler) | Да | Нет | Нет |
| AMD, через VCN (D3D11VA на Windows, VAAPI на Linux) | |||
| RX 6000 и новее (RDNA 2 и выше) | Да | Да | Да |
| RX Vega, RX 5000 (RDNA 1) | Да | Да | Нет |
| RX 400 / 500 (Polaris) | Да | Нет | Нет |
| Intel, через Quick Sync (D3D11VA на Windows, VAAPI на Linux) | |||
| Arc, Core Ultra, 11-е поколение и новее (Tiger Lake и выше) | Да | Да | Да |
| Core с 7-го по 10-е поколение (от Kaby Lake до Comet Lake) | Да | Да | Нет |
| Core 6-го поколения (Skylake) | Да | Только 8 бит | Нет |
| Core 4-го / 5-го поколения (Haswell, Broadwell) | Да | Нет | Нет |
| Apple, через VideoToolbox | |||
| Apple Silicon, M3 и новее | Да | Да | Да |
| Apple Silicon, M1 и M2 | Да | Да | Нет |
| Mac на Intel с чипом T2 (2018 года и новее) | Да | Нет | Нет |
Эти столбцы описывают сам чип. Видеокарте, которая умеет декодировать кодек, всё равно нужен драйвер, который его предоставляет, а Linux-машина без libva-drm декодирует программно, что бы ни поддерживало железо. GameVox сначала пробует аппаратное декодирование и переключается на программное уже на первом кадре, если ускоритель не инициализируется.
Почему картинка всё равно может быть плохой
Аппаратный энкодер на мощной видеокарте всё равно может выдавать мыльный или дёрганый поток, потому что разрешение и кодек не единственное, что влияет. Две самые частые причины никак не связаны с таблицами выше.
Ваша группа может ограничивать битрейт
Владельцы серверов могут задать для группы потолок битрейта, отдельно для демонстрации экрана, камеры и микрофона. Реальный потолок вашего кодирования равен меньшему из двух значений: лимита уровня сервера и лимита вашей группы. Поэтому даже сервер уровня Diamond может ограничить группу 2,5 Мбит/с для демонстрации экрана. Потолки демонстрации экрана бывают от 2,5 до 25 Мбит/с, камеры от 0,8 до 10 Мбит/с, микрофона от 48 до 256 кбит/с.
На каждом сервере вы состоите ровно в одной группе, поэтому действует только потолок этой группы: перейдите в другую группу, и её потолок заменит прежний. Группа без заданного потолка вас не ограничивает. На владельцев серверов их собственные лимиты не распространяются. Если к потоку применили ограничение, журнал активности канала сообщит об этом в той же приглушённой строке, где указаны кодек и энкодер, так что этот журнал быстрее всего помогает отличить лимит группы от проблемы с энкодером.
Качество снижается само, когда не хватает канала
Выбранное качество является потолком, а не обещанием. Когда зрители вашей трансляции начинают терять пакеты, сервер это замечает и просит ваш клиент сбавить обороты; энкодер пересоздаётся с более низким битрейтом примерно за секунду. Когда перегрузка проходит, сервер снимает ограничение, и выбранный вами пресет возвращается сам. Ничего перезапускать не нужно.
Что уступает первым, зависит от того, что вы передаёте. Демонстрация экрана по умолчанию бережёт разрешение, так что текст и интерфейс остаются чёткими, а падает частота кадров. Если переключить демонстрацию экрана в режим с приоритетом частоты кадров, всё наоборот, и для геймплея это подходит лучше, чем для таблицы. Видео с камеры всегда бережёт частоту кадров и жертвует разрешением, потому что плавное лицо смотрится лучше, чем чёткое, но дёрганое.
Срабатывает это от вашей реальной пропускной способности на отдачу в данный момент, поэтому причиной может стать домашняя сеть, забившая исходящий канал, загруженный Wi-Fi или VPN, пока видеокарта почти простаивает. Если поток сначала выглядит хорошо, а через несколько минут портится, почти всегда дело в этом, а не в сбое энкодера.
Когда происходит откат на программное кодирование
Если аппаратного ускорения нет, ничего не ломается. Программный VP9 спокойно тянет 1080p30 на любом современном процессоре, а на старых машинах обычно достаточно снизить демонстрацию экрана до 720p. Вот самые частые причины отката.
Слишком старый драйвер NVIDIA. У NVENC версионный API, и драйвер старше, чем ожидает сборка клиента, отклоняется сразу. В этом случае карточка в настройках так и пишет и называет минимальную ветку драйвера, которая нужна, от 522.25 для NVENC API 12.0 до 610 для 13.1, а не оставляет вас молча на программном кодировании.
Нет драйверов VA-API на Linux. Если энкодер вообще не находится, карточка в настройках называет пакет для вашего процессора: intel-media-va-driver для Intel начиная с Broadwell, i965-va-driver для Haswell и старше и mesa-va-drivers для AMD.
Кодека нет в самом чипе. У Intel определение оптимистичное: каждая видеокарта сначала заявляет VP9 и AV1, и настоящий ответ появляется только при открытии пробного энкодера. Ступень, которая падает по причине, не способной измениться, пока приложение запущено, например когда драйвер сообщает об отсутствии блока кодирования, исключается до конца сеанса, а не пробуется заново при каждой трансляции. Перезапустите GameVox после обновления драйвера, чтобы проверка прошла заново.
Вы в веб-клиенте. Браузеры кодируют и декодируют через WebCodecs, и попадёт ли это на видеокарту, решают Chrome, Edge или Firefox. Всё написанное выше относится к десктопному приложению.