HD Видеоконференции на OpenMCU



23.01.2015. Выпущен релиз OpenMCU-ru 4.0. Исправлены ошибки, проведена оптимизация, добавлен встроенный регистратор, появилась возможность совершать внутренние вызовы между терминалами, реализовано шифрование SIP (TLS, SRTP, ZRTP), новые кодеки G.722.1, G.722.1 Annex C, G.722 (AMR-WB), MPEG4 (MP4V-ES), NAT для SIP и многое другое.

Автор Тема: v4l2loopback - виртуальная вебкамера для Linux  (Прочитано 10037 раз)

rayanAyar

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1231
  • Карма: 58
Для тестирования видеосжатия принято использовать одинаковые исходные видеопоследователь ности. Так как картинка картинке рознь. И разные исходные картинки могут выдавать разную нагрузку на сервер (что и видно в тестировании ниже). Поэтому для проверки производительности OpenMCU-ru рекомендуется применять виртуальные вебкамеры. Например в MyPhone есть fake-устройства, генерирующие одинаковую картинку.

Под Linux можно использовать модуль v4l2loopback:
https://github.com/umlaeute/v4l2loopback
Этот модуль создает виртуальную вебкамеру V4L2, которую можно уже скормить Linphone (или любой другой программе для работы с web-камерами). В качестве исходной картинки в виртуальную вебкамеру v4l2loopback можно направить:
- тестовые последовательнсти gstreamer;
- видеофайл (не любой файл, нельзя зациклить);
- набор фреймов PNG/YUV (можно зациклить, можно регулировать framerate).
Примеры использования:
https://github.com/umlaeute/v4l2loopback/wiki/Gstreamer

Пакет v4l2loopback-dkms есть в официальном репозитории Debian/Ubuntu. Но в Precise версия старая (0.4) и с Linphone не работает. С Linphone у меня заработала только 0.7. Кому нужно для Ubuntu можно взять здесь:
https://launchpad.net/~rayanayar/+archive/v4l2loopback

В качестве исходной картинки для виртуальной вебкамеры лучше подбирать что-то похожее на видеоконференции. В случае видеоконференций видеокартинка в большинстве случаев имеет следующие характеристики:
- статичный задний фон;
- вяло двигающаяся фигура на этом фоне;
- разрешение и FPS примерно на уровне современных вебкамер (примерно 640x480@10 ... 1280x720@30).

Например вот несколько готовых наборов фреймов из мульта BigBuckBunny (лицензия CC-BY, http://www.bigbuckbunny.org/) от Blender Foundation:
1280x720@24.7z (md5: 9d1c1e826630e176b2 3b0f06a7313db7)
640x480@24.7z (md5: 56324efffca613e131 cbfe10ab9e7312)

Для себя проверил какие из этих наборов сильнее напрягают сервер. Выкладываю результаты, может тоже кому-то будет интересно:


Тестовый стенд

Сервер:
Процессор: i3-2100 (2 ядра + Hyper-threading)
Память: 4GiB
ОС: Ubuntu 12.04 x86_64
7z Rating (Linux64): 8552 (363%)
Видео кодек: H.264@704x576
Аудио кодек: Opus
OpenMCU-ru: 3.1.0.297(86305969aad5272da6 7641ad79c4f7bfb2d6 a681) из PPA

4 клиента:
Процессор: i3-3220
Память: 4GiB
ОС: Ubuntu 12.04 x86_64, KDE
Видео кодек: H.264
Видео источник: 640x480, 12 fps, стабильная зацикленная картинка с виртуальной вебкамеры
Аудио кодек: Opus
Аудио источник: нет
Linphone: 3.6.1 из официального PPA
Ограничение битрейта: 512 кбит/сек (битрейт не был выдержан сервером)

* Сервер содержит чистую дефолтную установку
* Сервер используется эксклюзивно - в процессе тестирования все лишние службы отключены
* Клиенты и сервер в локальной сети 100мбит
* Перед каждым замером служба перезапускалась, клиенты не перезапускались
* На сервере "Video frame rate = 999", "Video quality = 20"
* Нагрузка на процессор оценивается с помощью ps.


Результаты

videotestsrc pattern=snow
Video out FPS: 217

Код: (Загрузка) [Выделить]
MARK  TIME  CPUTIME   CPUSECONDS  THCOUNT  RSS    VSZ
m1    0     00:00:27  27          36       58512  2284640
m2    60    00:02:49  169         36       58540  2284640
2-1   60    00:02:22  142         0        28     0
Использование ядер: 142 / 60 = 2.37

videotestsrc pattern=ball
Video out FPS: 274

Код: (Загрузка) [Выделить]
MARK  TIME  CPUTIME   CPUSECONDS  THCOUNT  RSS    VSZ
m1    0     00:00:32  32          36       59844  2288012
m2    60    00:02:51  171         36       60076  2288012
2-1   60    00:02:19  139         0        232    0
Использование ядер: 139 / 60 = 2.32

BigBuckBunny
Video out FPS: 228

Код: (Загрузка) [Выделить]
MARK  TIME  CPUTIME   CPUSECONDS  THCOUNT  RSS    VSZ
m1    0     00:00:25  25          37       59852  2288024
m2    60    00:02:52  172         37       60184  2288024
2-1   60    00:02:27  147         0        332    0
Использование ядер: 147 / 60 = 2.45

Frank
Video out FPS: 232

Код: (Загрузка) [Выделить]
MARK  TIME  CPUTIME   CPUSECONDS  THCOUNT  RSS    VSZ
m1    0     00:00:37  37          36       59980  2287764
m2    60    00:03:04  184         36       60208  2287764
2-1   60    00:02:27  147         0        228    0
Использование ядер: 147 / 60 = 2.45

Rinky
Video out FPS: 222

Код: (Загрузка) [Выделить]
MARK  TIME  CPUTIME   CPUSECONDS  THCOUNT  RSS    VSZ
m1    0     00:00:27  27          37       60056  2288024
m2    60    00:02:56  176         36       60476  2288024
2-1   60    00:02:29  149         -1       420    0
Использование ядер: 149 / 60 = 2.48

Gamera
Video out FPS: 233

Код: (Загрузка) [Выделить]
MARK  TIME  CPUTIME   CPUSECONDS  THCOUNT  RSS    VSZ
m1    0     00:00:26  26          36       59640  2284640
m2    60    00:02:52  172         36       60008  2284640
2-1   60    00:02:26  146         0        368    0
Использование ядер: 146 / 60 = 2.43

Bird
Video out FPS: 208

Код: (Загрузка) [Выделить]
MARK  TIME  CPUTIME   CPUSECONDS  THCOUNT  RSS    VSZ
m1    0     00:00:30  30          36       58692  2284704
m2    60    00:03:01  181         36       58940  2284704
2-1   60    00:02:31  151         0        248    0
Использование ядер: 151 / 60 = 2.52

Butterfly
Video out FPS: 217

Код: (Загрузка) [Выделить]
MARK  TIME  CPUTIME   CPUSECONDS  THCOUNT  RSS    VSZ
m1    0     00:00:26  26          36       58808  2287764
m2    60    00:02:58  178         36       59112  2288024
2-1   60    00:02:32  152         0        304    260
Использование ядер: 152 / 60 = 2.53

killer_boy

  • Гость
Слушай, есть подобный вариант для CentOS систем?

rayanAyar

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1231
  • Карма: 58
Честно говоря, не знаю где лучше искать RPM-ки (я на deb-based работаю) - но они судя по всему есть.