Анализ видеокодека VP9, применяемого в мультипротокольной платформе JITSI
Автор: Керенцева Нина Дмитриевна, Трофимов Александр Игоревич, Галич Сергей Владимирович
Журнал: НБИ технологии @nbi-technologies
Рубрика: Инновации в информатике, вычислительной технике и управлении
Статья в выпуске: 1 т.17, 2023 года.
Бесплатный доступ
В статье проведен сравнительный анализ различных видеокодеков, которые используются в мультипротокольной платформе Jitsi Meet основанной на технологии WebRTC. Также рассмотрены плюсы и минусы каждого видеокодека в отдельности. Приведены результаты нагрузочного тестирования данной платформы.
Видеоконференцсвязь, видеокодек, открытый исходный код, сквозное шифрование, кроссплатформенность
Короткий адрес: https://sciup.org/149142563
IDR: 149142563 | DOI: 10.15688/NBIT.jvolsu.2023.1.5
Текст научной статьи Анализ видеокодека VP9, применяемого в мультипротокольной платформе JITSI
DOI:
Выбор видеокодека для связи в реальном времени (RTC) зависит от нескольких факторов, таких как доступная полоса пропускания [1], вычислительная мощность устройства [3] и желаемое качество видео [2].
Jitsi Meet поддерживает несколько видеокодеков для общения в реальном времени. К ним относятся VP8, VP9 и H.264.
VP8 – это видеокодек с открытым исходным кодом, разработанный Google, был выпущен в 2010 г. с целью создания альтернативы
проприетарным видеокодекам. VP8 является масштабируемыемым кодеком, что означает, что он может адаптироваться к различным сетевым условиям и устройствам, следовательно может использоватся там, где пропускная способность и вычислительная мощность могут быть ограничены. Одной из ключевых особенностей VP8 является использование внутрикад-рового кодирования, что означает, что каждый кадр кодируется независимо от других кадров. Это обеспечивает лучшее сжатие и уменьша-
ИННОВАЦИИ В ИНФОРМАТИКЕ ет объем данных, которые необходимо передавать по сети. VP8 также поддерживает ряд функций, таких как временная масштабируемость, которая позволяет доставлять видео разного уровня качества на разные устройства или в разных сетевых условиях.
VP9 – это видеокодек с открытым исходным кодом, разработанный в качестве преемника VP8. Данный кодек использует передовые методы сжатия видео, включая переменные размеры блоков и компенсацию движения для обеспечения уменьшения объема данных, необходимых для представления каждого кадра, а также поддерживает расширенные функции, такие как 10-битная глубина цвета, которая обеспечивает более яркие и точные цвета, и расширенный динамический диапазон (HDR), предоставляющий более широкий диапазон яркости и контрастности. Поддерживается большинством бразуеров и в основном используется для потокового видео. Требует больше аппаратных ресурсов, чем VP8.
H.264 или MPEG-4 – это широко используемый видеокодек, обеспечивающий хорошее качество видео при низкой скорости передачи данных. Данный видеокодек использует алгоритм сжатия на основе блоков, который делит каждый кадр на небольшие блоки, называемые макроблоками, которые затем делятся на более мелкие блоки, называемые единицами прогнозирования. Энкодер анализиру- ет каждую единицу предсказания и генерирует набор векторов движения, которые описывают, как пиксели в блоке сместились по сравнению с предыдущим кадром, а также использует метод, называемый внутрикадровым прогнозированием, который позволяет ему прогнозировать значение каждого пикселя в блоке на основе значений соседних пикселей. H.264 также использует ряд других методов сжатия, включая переменные размеры блоков, энтропийное кодирование и фильтры удаления блочности, чтобы уменьшить объем данных, необходимых для передачи, при сохранении высокого качества видео. Он поддерживает ряд расширенных функций, таких как расширенный динамический диапазон (HDR) и преобразование цветового пространства. Одним из ключевых преимуществ H.264 является его широкая поддержка в аппаратном и программном обеспечении. Кодек од-держивается большинством веб-браузеров и платформ видеоконференцсвязи (ВКС). Основным недостатком кодека H.264 являются его лицензионные требования. Кроме того, H.264 может не обеспечивать тот же уровень сжатия, что и более новые кодеки, такие как VP9, что является недостатком для приложений с ограниченной пропускной способностью.
На рисунке 1 изображена схема взаимодействия различных блоков кроссплатформен-ной платформы Jitsi Meet [4].
jitsi - meet
Nginx

prosody/xmpp
5222,5347 5347

Рис. 1. Схема взаимодействия модулей Jitsi Meet
videobridge
На порт 443 приходит запрос, обрабатываемый службой веб-сервера nginx, который далее поступает на кроссплатформенный XMPP-сервер [5], после чего запрос перенаправляется на службу Jicofo, которая управляет подключением клиентских приложений к видеоконференции. Также во время проведения видеоконференции данная служба реализует функционал отправки приглашений и распределения нагрузки. Вместе с тем устанавливается соединение через 10 000 порт на Videobridge (видеомост), который является ключевым компонентом системы. При передаче видео и аудио между участниками он выполняет роль посредника, то есть осуществляет функцию терминирования RTP/RTCP, и устанавливает границы битрейта в обе стороны на каждого клиента.
При проведении нагрузочного тестирования, было выявлено, что сервер, развернутый на виртуальной машине, со спецификацией:
– 1 CPU;
– 1 RAM;
– 10 Gb HDD;
позволил провести ВКС на 14 человек при использовании кодека VP9, что можно наблю- дать на рисунке 2 (мониторинг производился при помощи утилиты htop).
Потребление системы в режиме простоя представлено на рисунке 3.
Таким образом можно сделать вывод о том, что потребление RAM на одного пользователя составило ~ 10–15 Мбайт. Потребление CPU ~ 7 % на одного пользователя. Приблизительная пропускная способность на одного пользователя составляет 0.93 Мбит/с (см. рис. 4).
Современный кодек обрабатывает каждый кадр в отдельности, но также анализирует последовательность кадров на предмет повторений во времени (между кадрами) и пространстве (внутри одного кадра), что является сложной вычислительной задачей.
В результате нагрузочного тестирования было определено, что спецификации, указанной в данной статье, оказалось недостаточно для проведения ВКС на 15 человек. Также в ходе работы был проведен обзор видеокодека с открытым исходным кодом VP9, определены минимальные системные требования к серверу ВКС.
И 902.823366] Out of memory: Killed process 414 (Java) total-vm:5514216kB, anon-rss:669592kB, p98 pgtalII111111 1 I 1III 1 1 1 11 1 11 1 II 111 111 III lti Tasks: 24, 240 th- ; 1 running Memtill HI || HIl Illi II llllll III III llllllIII 52ЭМ/977М] Load average: 2.63 1.10 0.47 Swpt OK/OK] Uptime: 00:17:13 |
|
PIO USER PRI NI VIRT RES SHR S CPUX MEHX TIME+ Comfrend 852 Jvb ________ 20 0 5372M 294M 30592 S 86.2 30.1 0:33.94 Java -Xmx3072m -XX:+UseGlGC |
|
868 Jvb 20 0 5372M 294H 30592 R 37.5 30.1 0:11.32 lava -Хтк3072т -xx:4lseGlGC - 1025 jvb 20 0 5372M 294M 30592 R 13.8 30.1 0:03.76 Java -Xmx3072m -XX:*UseGlGC - 860 jvb 20 0 5372M 294H 592 4.6 30.1 0:00.66 java -Xn • eGIGC - 1008 Jvb 20 0 5372N 294И 30592 II 3.330.1 0:00.59 Java Xmx3072n ••:»UseGlGC - 869 Jvb 20 0 5372м 294M 30592 S 2.6 30.1 0:04.21 Java -Xin»<3072m -XX:+UseGlGC - 1054 Jvb 20 0 5372M 294M 30592 S 2.6 30.1 0:00.26 lava -ХШХ3072ГП -XX:+UseGlGC - 1036 Jvb 20 0 5372M 294M 30592 S 2.6 30.1 0:00.47 lava -Xnw3072m -xx:*UseGlGC - 1044 Jvb 20 0 5372M 294M 30592 S 2.030.1 0:00.22 Java -Xn :*UseGlGC - 1062 jvb 20 0 537. " 592 8 2.0 30.1 0:00.17 Java -Xn : HseGlGC - 1019 Jvb 20 0 5372M 294И 30592 R 2.030.1 0:00.66 Java Xnw3072n --^UseGlGC - 1048 jvb 20 0 5372M 294M 30592 S 2.0 30.1 0:00.16 Java -Xn 915 Jvb 20 0 5Э72И 294M 30592 R 1.3 30.1 0:00.41 Java -Xmx3072m -XX:+UseGlGC - 416 prosody 20 0 69060 24820 4448 S 1.3 2.5 0:04.83 lua /usr/bin/prosody -F 384 Jlcofo 20 0 5194M 147M 15980 S 1.3 15.1 0:19.03 Java -Xnw3072m -XX:*HeapCumpC 397 wuu-deta 20 0 65960 9260 4416 S 1.3 0.9 0:05.79 nglnx: worker process 858 Jvb 20 0 5372M 294M 30592 S 0.7 30.1 0:00.77 java -Xmx3072m -XX:*UseGlGC - 11 Ivb 20 0 5372M 294M 30592 S 0.730.1 0:00.26 lava -Xmx3072m -XX:»UseGlGC - 1032 jvb 20 0 5372M 294M 30592 S 0.7 30.1 0:00.37 java -Xn»3u72m -XX:+UseGlGC - 1049 Jvb 20 0 5372M 294M 30592 S 0.7 30.1 0:00.32 Java -Xrrt.3072m -XX:*UseGlGC - 607 root 20 0 11740 3568 1800 R 0.7 0.4 0:06.96 htop 1060 Jvb 20 0 5372M 294M 30592 S 0.7 30.1 0:00.02 Java -Xmx3072m -XX:4lseGlGC - 1023 jvb 20 0 5372H 294M 30592 S 0.7 30.1 0:00.05 Java -Xmx3072m -xx:4JseG!GC ■ 419 Jlcofo 20 0 5194M 147И 15980 S 0.7 15.1 0:06.58 lava -Xmx3072m -XX:-HeapDump! 1029 ivL 20 0 5372м 294M 30592 S 0.7 30.1 0:00.02 Java -Xmx3072m -XX;4lseGlGC - 879 Jvb 20 0 5372M 294M 30592 S 0.0 30.1 0:00.07 lava -Xmx3O72m -xx:*useG!GC • 1052 Jvb 20 0 5372M 294H 30592 S 0.0 30.1 0:00.05 Java -Xmx3072m -XX:*USeGlGC - 1001 jvb 20 0 5372M 294M 30592 S 0.0 30.1 0:00.11 lava -ХЖ3072® -XX:*UseGlGC - 1010 jvb 20 0 5372M 294H 30592 S 0.0 30.1 0:00.05 lava -Xmx3072m -XX:*UseGlGC • 1057 it 20 0 S372N 294M 30592 S 0.0 30.1 0:00.02 Java -Xmx3072m -XX:*UseGlGC - 1046 Jvb 20 0 5372M 294M 30592 S 0.0 30.1 0:00.02 Java -Xm>3072m -XX:-UseGlG2 - 723 Jlcofo 20 0 5194M 147M 15980 S 0.0 15.1 0:00.11 Java -Xmx3072m -XX:*HeapDumpC 443 Jlcofo 20 0 5194M 147M 1'980 S 0.0 15.1 0:00.85 Java -Xmx3072m -XX:*HeapDump( 1040 Jvb 20 0 5372M 294M 30592 S 0.0 30.1 0:00.01 Java -Xmx3072m -XX;4lseGlGC - 881 i.t 20 0 5372M 294M 30592 S 0.0 30.1 0:00.08 lava -Xmx3072m -XX:*UseGlGC - 1009 jvb 20 0 5372M 294M 30592 S 0.0 30.1 0:00.05 lava -Xmx3072m -xx:»UseGlGC - 1053 Jvb 20 0 5372M 294M 30592 S 0.0 30.1 0:00.08 lava -Xex3072m -XX:HseGlGC - 863 Jvb 20 0 5372M 294M 30592 S 0.0 30.1 0:00.43 lava -Xmx3072m -xx:»useG!GC - 1031 Jvb 20 0 5372M 294M 30592 S 0.0 30.1 0:00.08 lava -Xmx3072m -XX:»useGlGC - 618 jlcofo 20 0 5194M :47M 15980 S 0.0 15.1 0:01.85 Java -Xm>3072m -XX:*HeapCumpC 1020 ivb 20 0 5372M 294H 30592 S 0.0 30.1 0:00.18 lava -Хтк3072т -XX:*UseGlGC ■ |
|
Яне Id Esetup ®Search3FllterErree ®SortB'-33Nice -®llce +®ill 3SouTt |
- |
Рис. 2. Результат нагрузочного тестирования
CPU[I 0.7X]
Tasks: 24, 99 thr; 1 running Load average: 0.00 0.00 0.00 Uptime: 03:26:13
Mem[|I|I|I I|I I I I I I I I I I I I I I I I I I I I I I I I I 1111111111446М/Э77И]
Snip [ OK/OK]
RID USER |
PR I 20 |
NI 0 |
VIRT 5341M |
RES 235M |
SHR S 30900 S |
CPU% MEM% 0.0 24.1 |
TIME+ |
Command |
|
I 485 |
jvb |
0:07.23 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -xxl |
||||||
486 |
Jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.02 |
java -Xmx3072m -XX:+UseGLGC -XX:+HeapDumpOnOutOfMemoryError -XX |
601 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.10 |
Java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
602 |
jvb |
20 |
0 |
5341M |
235M |
30900 S |
0.0 24.1 |
0:00.13 |
java -Xmx3072m -XX:+UseGLGC -XX:+HeapDumpOnOutOfMemoryError -XX |
611 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.69 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
615 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.35 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
616 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:04.50 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
623 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:05.20 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
624 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:07.36 |
Java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
625 |
Jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.7 24.1 |
0:06.61 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapOumpOnOutOfMemoryError -XX |
628 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:02.15 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
629 |
Jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:03.28 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
644 |
Jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.02 |
Java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
645 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.01 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
646 |
Jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.41 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
647 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.15 |
Java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
648 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.17 |
java -Xmx3072m -XX:+UseGLGC -XX:+HeapDumpOnOutOfHemoryError -XX |
649 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.03 |
Java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
650 |
jvb |
20 |
0 |
5341M |
235M |
30900 S |
0.0 24.1 |
0:00.07 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
651 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.02 |
java -xmx3072m -xx:+useGlGC -xx:+HeapDumponoutofMemoryError -xx |
653 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.00 |
Java -Xmx3072m -XX:+UseGlGC -xx:+HeapDumpOnoutofMemoryError -xx |
654 |
jvb |
20 |
0 |
5341M |
235M |
30900 S |
0.0 24.1 |
0:00.00 |
java -Xmx3072m -XX:+UseGlGC -XX:*HeapDumpOnOutOfMemoryError -XX |
655 |
Jvb |
20 |
0 |
5341M |
235M |
30900 S |
0.0 24.1 |
0:00.02 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
656 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.01 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
657 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.00 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
658 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.01 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
659 |
jvb |
20 |
0 |
5341M |
235M |
30900 S |
0.0 24.1 |
0:00.01 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
660 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.02 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
952 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.25 |
java -Xmx3072m -XX:+UseGLGC -XX:+HeapDumpOnt)utofMemoryError -xx |
1111 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.00 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
465 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
1:14.92 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
1254 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.15 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
1258 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.00 |
Java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
1259 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.10 |
java -Xmx3072m -XX:+UseGLGC -XX:+HeapDumpOnOutOfMemoryError -XX |
1260 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.10 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
1261 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.7 24.1 |
0:01.26 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfHemoryError -XX |
1281 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:01.01 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
1282 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:00.00 |
Java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
469 |
jvb |
20 |
0 |
534 IM |
235H |
30900 S |
0.0 24.1 |
0:02.78 |
java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
470 |
jvb |
20 |
0 |
534 IM |
235M |
30900 S |
0.0 24.1 |
0:02.07 |
Java -Xmx3072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
471 |
jvb |
20 |
0 |
5341M |
235M |
30900 S |
0.0 24.1 |
0:00.00 |
java -Xmx3 072m -XX:+UseGlGC -XX:+HeapDumpOnOutOfMemoryError -XX |
Р1!ВН|р2^!]!1Рз^ВВ1]р4дЕПИр5ПЗЯРб^ВЯЗ!|р7В^®р8|!ЙВЕг |
j :4HB i icESHM |
Рис. 3. Потребление системы с установленной ВКС в режиме простоя
Bandwidth

Рис. 4. График общей пропускной способности (в пике)
Список литературы Анализ видеокодека VP9, применяемого в мультипротокольной платформе JITSI
- Исследование влияния характеристик каналов связи на качество видео-конференц-связи / Н. Н. Ермакова [и др.] // Инфокоммуникационные технологии. - 2021. - № 4. - С. 395-400.
- Керенцева, Н. Д. Аналитический обзор метрик, используемых для оценки качества мультимедийной информации / Н. Д. Керенцева, А. И. Трофимов // НБИ технологии. - 2022. - Т. 16, № 3. - С. 27-31. -.
- Ткаченко, Н. И. Исследование потребления аппаратных мощностей системами видеоконференцсвязи / Н. И. Ткаченко, С. В. Галич, Е. С. Семенов // Успехи современной радиоэлектроники. - 2017. - С. 645-649.
- Установка сервера для видеоконференций Jitsi Meet - Блог о видеоконференцсвязи // Защищенная платформа для корпоративного общения. - Электрон. текстовые дан. - Режим доступа: https://trueconf.ru/blog/baza-znaniy/ustanovka-servera-dlya-videokonferenczij-jitsi-meet.html.
- Specifications // XMPP The Universal Messaging Standard. - Electronic text data. - Mode of access: https://xmpp.org/extensions.