Анализ видеокодека 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.
Статья научная