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



Добавлено зеркало для сайта и форума. http://videoswitch.ru/
Если будут проблемы с доступом - все изменения так же будут отображены в github репозитории.

Автор Тема: openMCU ошибка сегментирования под CentOS 5.4  (Прочитано 11246 раз)

happyman

  • Гость
Собираю по инструкции http://openmcu.ru/index.php?topic=10.0

ОС - Linux 2.6.18-164.el5 #1 SMP Thu Sep 3 03:33:56 EDT 2009 i686 i686 i386 GNU/Linux

Для сборки доставлен yasm-1.0.0
Проблему с путями LD_LIBRARY_PATH решаю пока каждый раз через export, /etc/ld/so/conf.d почему-то не парситься.

Проблемы:
1. В разделе Room Control в выпадающем списке нет комнат, список пуст
2. При попытке пригласить клиента в конференцию или подключиться с помощью myphone3 openmcu падает в segmentation fault.

Логи MyPhone
-------------------------------------------------
MyPhone2 готов к приему...
Отправляем G.711-ALaw-64k данные .
Отправляем H.264-CIF4{sw} данные  (1 frames).
Разгавариваем с -new 192.168.101.110
Получаем G.7231-6.3k[m]{sw} данные .
Получаем H.264-CIF4{sw} данные  (1 frames).
Прекратили получать H.264-CIF4{sw} данные.
Прекратили отправлять G.711-ALaw-64k данные.
Прекратили отправлять H.264-CIF4{sw} данные.
Прекратили получать G.7231-6.3k[m]{sw} данные.
Соединение с -new 192.168.101.110 завершено.
-------------------------------------------------

Логи openmcu от загрузки до падения
---------------------------------------------------------------------------------------------------------------
[user@mcu openmcu]# /home/openmcu/openmcu -x
PLUGIN DIRS /usr/local/lib/ptlib
PLUGIN  Enumerating plugin directory /usr/local/lib/ptlib/
PLUGIN  Enumerating plugin directory /usr/local/lib/ptlib/codecs/
PLUGIN  Enumerating plugin directory /usr/local/lib/ptlib/codecs/video/
PLUGIN  Checking /usr/local/lib/ptlib/codecs/video/libavcodec.so against suffix _pwplugin
PLUGIN  Checking /usr/local/lib/ptlib/codecs/video/h264_video_pwplugin.so against suffix _pwplugin
PLUGIN  Ready to load plugin /usr/local/lib/ptlib/codecs/video/h264_video_pwplugin.so
PLUGIN  Checking /usr/local/lib/ptlib/codecs/video/h263-1998_video_pwplugin.so against suffix _pwplugin
PLUGIN  Ready to load plugin /usr/local/lib/ptlib/codecs/video/h263-1998_video_pwplugin.so
PLUGIN  Enumerating plugin directory /usr/local/lib/ptlib/codecs/audio/
PLUGIN  Checking /usr/local/lib/ptlib/codecs/audio/gsm0610_audio_pwplugin.so against suffix _pwplugin
PLUGIN  Ready to load plugin /usr/local/lib/ptlib/codecs/audio/gsm0610_audio_pwplugin.so
PLUGIN  Checking /usr/local/lib/ptlib/codecs/audio/ima_adpcm_audio_pwplugin.so against suffix _pwplugin
PLUGIN  Ready to load plugin /usr/local/lib/ptlib/codecs/audio/ima_adpcm_audio_pwplugin.so
PLUGIN  Checking /usr/local/lib/ptlib/codecs/audio/g728_audio_pwplugin.so against suffix _pwplugin
PLUGIN  Ready to load plugin /usr/local/lib/ptlib/codecs/audio/g728_audio_pwplugin.so
PLUGIN  Checking /usr/local/lib/ptlib/codecs/audio/g729a_audio_pwplugin.so against suffix _pwplugin
PLUGIN  Ready to load plugin /usr/local/lib/ptlib/codecs/audio/g729a_audio_pwplugin.so
PLUGIN  Checking /usr/local/lib/ptlib/codecs/audio/gsmamrcodec_pwplugin.so against suffix _pwplugin
PLUGIN  Ready to load plugin /usr/local/lib/ptlib/codecs/audio/gsmamrcodec_pwplugin.so
PLUGIN  Checking /usr/local/lib/ptlib/codecs/audio/g726_audio_pwplugin.so against suffix _pwplugin
PLUGIN  Ready to load plugin /usr/local/lib/ptlib/codecs/audio/g726_audio_pwplugin.so
PLUGIN  Checking /usr/local/lib/ptlib/codecs/audio/g722_audio_pwplugin.so against suffix _pwplugin
PLUGIN  Ready to load plugin /usr/local/lib/ptlib/codecs/audio/g722_audio_pwplugin.so
PLUGIN  Checking /usr/local/lib/ptlib/codecs/audio/speex_audio_pwplugin.so against suffix _pwplugin
PLUGIN  Ready to load plugin /usr/local/lib/ptlib/codecs/audio/speex_audio_pwplugin.so
PLUGIN  Checking /usr/local/lib/ptlib/codecs/audio/g7321_audio_pwplugin.so against suffix _pwplugin
PLUGIN  Ready to load plugin /usr/local/lib/ptlib/codecs/audio/g7321_audio_pwplugin.so
PLUGIN  Checking /usr/local/lib/ptlib/codecs/audio/ilbc_audio_pwplugin.so against suffix _pwplugin
PLUGIN  Ready to load plugin /usr/local/lib/ptlib/codecs/audio/ilbc_audio_pwplugin.so
PLUGIN  Checking /usr/local/lib/ptlib/codecs/audio/lpc10_audio_pwplugin.so against suffix _pwplugin
PLUGIN  Ready to load plugin /usr/local/lib/ptlib/codecs/audio/lpc10_audio_pwplugin.so
PLUGIN  Checking /usr/local/lib/ptlib/codecs/libavcodec.so against suffix _pwplugin
PLUGIN  Checking /usr/local/lib/ptlib/libavcodec.so against suffix _pwplugin
PLUGIN  Enumerating plugin directory /usr/local/lib/ptlib/devices/
PLUGIN  Enumerating plugin directory /usr/local/lib/ptlib/devices/videoinput/
PLUGIN  Checking /usr/local/lib/ptlib/devices/videoinput/v4l_pwplugin.so against suffix _pwplugin
PLUGIN  Ready to load plugin /usr/local/lib/ptlib/devices/videoinput/v4l_pwplugin.so
PLUGIN  Checking /usr/local/lib/ptlib/devices/videoinput/v4l2_pwplugin.so against suffix _pwplugin
PLUGIN  Ready to load plugin /usr/local/lib/ptlib/devices/videoinput/v4l2_pwplugin.so
H264    Codec   Enabled
H.264-SQCIF{sw}
H.264-QCIF1{sw}
H.264-QCIF2{sw}
H.264-CIF1{sw}
H.264-CIF2{sw}
H.264-CIF3{sw}
H.264-4CIF1{sw}
H.264-4CIF2{sw}
H.264-4CIF3{sw}
H.264-SD{sw}
H.264-HD{sw}
H.263p-16CIF{sw}
H.263p-4CIF{sw}
H.263p-CIF{sw}
H.263p-QCIF{sw}
H.263p-SQCIF{sw}
H.263-16CIF{sw}
H.263-4CIF{sw}
H.263-CIF{sw}
H.263-QCIF{sw}
H.263-SQCIF{sw}
GSM-06.10{sw}
MS-GSM{sw}
MS-IMA-ADPCM{sw}
G.728-16k[e]{sw}
G.729A-8k[e]{sw}
GSM-AMR{sw}
G.726-40k{sw}
G.726-32k{sw}
G.726-24k{sw}
G.726-16k{sw}
G.722-64k[e]{sw}
SpeexIETFNarrow-5.95k{sw}
SpeexIETFNarrow-8k{sw}
SpeexIETFNarrow-11k{sw}
SpeexIETFNarrow-15k{sw}
SpeexIETFNarrow-18.2k{sw}
SpeexIETFNarrow-24.6k{sw}
SpeexIETFWide-20.6k{sw}
SpeexWNarrow-8k{sw}
SpeexWide-20.6k{sw}
G.7231-6.3k[e]{sw}
iLBC-13k3{sw}
iLBC-15k2{sw}
LPC-10{sw}
H264    Codec   Enabled
H.264-SQCIF{sw}
H.264-QCIF1{sw}
H.264-QCIF2{sw}
H.264-CIF1{sw}
H.264-CIF2{sw}
H.264-CIF3{sw}
H.264-4CIF1{sw}
H.264-4CIF2{sw}
H.264-4CIF3{sw}
H.264-SD{sw}
H.264-HD{sw}
H.263p-16CIF{sw}
H.263p-4CIF{sw}
H.263p-CIF{sw}
H.263p-QCIF{sw}
H.263p-SQCIF{sw}
H.263-16CIF{sw}
H.263-4CIF{sw}
H.263-CIF{sw}
H.263-QCIF{sw}
H.263-SQCIF{sw}
GSM-06.10{sw}
MS-GSM{sw}
MS-IMA-ADPCM{sw}
G.728-16k[e]{sw}
G.729A-8k[e]{sw}
GSM-AMR{sw}
G.726-40k{sw}
G.726-32k{sw}
G.726-24k{sw}
G.726-16k{sw}
G.722-64k[e]{sw}
SpeexIETFNarrow-5.95k{sw}
SpeexIETFNarrow-8k{sw}
SpeexIETFNarrow-11k{sw}
SpeexIETFNarrow-15k{sw}
SpeexIETFNarrow-18.2k{sw}
SpeexIETFNarrow-24.6k{sw}
SpeexIETFWide-20.6k{sw}
SpeexWNarrow-8k{sw}
SpeexWide-20.6k{sw}
G.7231-6.3k[e]{sw}
iLBC-13k3{sw}
iLBC-15k2{sw}
LPC-10{sw}

Message from syslogd@ at Wed May 12 15:05:06 2010 ...
mcu OpenMCU.ru[3838]: Starting service process "OpenMCU.ru" v2.2.3[RECEIVE_SOUND]= G.7231-6.3k[e]{sw}, G.729-8k[e]{sw}, SpeexWNarrow-8k{sw}, iLBC-13k3{sw}, iLBC-15k2{sw}, MS-IMA-ADPCM{sw}, G.728-16k[e]{sw}, MS-GSM{sw}, G.722-64k[e]{sw}, GSM-06.10{sw}, G.711-uLaw-64k{sw}, G.711-ALaw-64k{sw},
[TRANSMIT_SOUND]= G.7231-6.3k[e]{sw}, G.729-8k[e]{sw}, G.711-uLaw-64k, G.711-ALaw-64k, BAD,
[RECEIVE_VIDEO]= H.264-HD{sw}, H.264-SD{sw}, H.264-4CIF2{sw}, H.264-4CIF1{sw}, H.263p-4CIF{sw}, H.263-4CIF{sw}, H.264-CIF4{sw}, H.264-CIF3{sw}, H.264-CIF2{sw}, H.264-CIF1{sw}, H.263p-CIF{sw}, H.263-CIF{sw}, H.264-QCIF2{sw}, H.264-QCIF1{sw}, H.263p-QCIF{sw}, H.263-QCIF{sw}, H.264-SQCIF{sw}, H.263p-SQCIF{sw}, H.263-SQCIF{sw}, BAD, BAD1,
[TRANSMIT_VIDEO]= H.264-HD{sw}, H.264-SD{sw}, H.264-4CIF2{sw}, H.264-4CIF1{sw}, H.263p-4CIF{sw}, H.263-4CIF{sw}, H.264-CIF4{sw}, H.264-CIF3{sw}, H.264-CIF2{sw}, H.264-CIF1{sw}, H.263p-CIF{sw}, H.263-CIF{sw}, H.264-QCIF2{sw}, H.264-QCIF1{sw}, H.263p-QCIF{sw}, H.263-QCIF{sw}, H.264-SQCIF{sw}, H.263p-SQCIF{sw}, H.263-SQCIF{sw}, BAD,
[TRANSMIT_VIDEOCACHE]= H.263-CIF{sw},
     Table:
       G.7231-6.3k[e]{sw} <1>
       SpeexWNarrow-8k{sw} <2>
       iLBC-13k3{sw} <3>
       iLBC-15k2{sw} <4>
       MS-IMA-ADPCM{sw} <5>
       G.728-16k[e]{sw} <6>
       MS-GSM{sw} <7>
       G.722-64k[e]{sw} <8>
       GSM-06.10{sw} <9>
       G.711-uLaw-64k <10>
       G.711-ALaw-64k <11>
       H.264-HD{sw} <12>
       H.264-SD{sw} <13>
       H.264-4CIF2{sw} <14>
       H.264-4CIF1{sw} <15>
       H.263p-4CIF{sw} <16>
       H.263-4CIF{sw} <17>
       H.264-CIF3{sw} <18>
       H.264-CIF2{sw} <19>
       H.264-CIF1{sw} <20>
       H.263p-CIF{sw} <21>
       H.263-CIF{sw} <22>
       H.264-QCIF2{sw} <23>
       H.264-QCIF1{sw} <24>
       H.263p-QCIF{sw} <25>
       H.263-QCIF{sw} <26>
       H.264-SQCIF{sw} <27>
       H.263p-SQCIF{sw} <28>
       H.263-SQCIF{sw} <29>
     Set:
       0:
         0:
           G.7231-6.3k[e]{sw} <1>
           SpeexWNarrow-8k{sw} <2>
           iLBC-13k3{sw} <3>
           iLBC-15k2{sw} <4>
           MS-IMA-ADPCM{sw} <5>
           G.728-16k[e]{sw} <6>
           MS-GSM{sw} <7>
           G.722-64k[e]{sw} <8>
           GSM-06.10{sw} <9>
           G.711-uLaw-64k <10>
           G.711-ALaw-64k <11>
         1:
           H.264-HD{sw} <12>
           H.264-SD{sw} <13>
           H.264-4CIF2{sw} <14>
           H.264-4CIF1{sw} <15>
           H.263p-4CIF{sw} <16>
           H.263-4CIF{sw} <17>
           H.264-CIF3{sw} <18>
           H.264-CIF2{sw} <19>
           H.264-CIF1{sw} <20>
           H.263p-CIF{sw} <21>
           H.263-CIF{sw} <22>
           H.264-QCIF2{sw} <23>
           H.264-QCIF1{sw} <24>
           H.263p-QCIF{sw} <25>
           H.263-QCIF{sw} <26>
           H.264-SQCIF{sw} <27>
           H.263p-SQCIF{sw} <28>
           H.263-SQCIF{sw} <29>
x264 [info]: using cpu capabilities: MMX2 SSE2 SSE3 Cache64
x264 [info]: profile Baseline, level 3.0
H264    Encoder x264 encoder successfully opened
Adaptive Packet Delay 0
CIF MPI 0
CIF16 MPI 0
CIF4 MPI 0
Dynamic Video Quality 0
Encoding Quality 15
Frame Height 576
Frame Time 9000
Frame Width 704
Generic Parameter 3 0
Generic Parameter 4 0
Generic Parameter 41 64
Generic Parameter 42 50
Generic Parameter 5 0
Generic Parameter 6 0
h323_stillImageTra nsmission 0
h323_temporalSpati alTradeOffCapabili ty 0
Max Bit Rate 327600
Media Packetization "0.0.8.241.0.0.0.0"
QCIF MPI 0
SQCIF MPI 0
Target Bit Rate 64000
Profile: 66
Level: 21
width: 352
height: 288
frameTime: 9000
targetBitrate: 327600
x264 [info]: using cpu capabilities: MMX2 SSE2 SSE3 Cache64
x264 [info]: profile Baseline, level 2.1
H264    Encoder x264 encoder successfully opened
Key 88
Adding member 139067512 to conference 68134f33-245c-df11-9b8d-0015588c6151
cname= sound.room101
Adding member 139065544 to conference 68134f33-245c-df11-9b8d-0015588c6151
cname= video.room101
Key 138640441
cache 1
Ошибка сегментирования

---------------------------------------------------------------------------------------------------------------

Что не нравится openmcu?

muggot

  • Гость
Скорее всего все та же ошибка ffmpeg. Попробуй убрать h263-1998_video_pwplugin.so и запустить без него.

happyman

  • Гость
Скорее всего все та же ошибка ffmpeg. Попробуй убрать h263-1998_video_pwplugin.so и запустить без него.

Действительно после удаления этого кодека openmcu падать перестал.

Обнаружил что myphone3 упрямо передает от меня картинку кодеком H.264-4CIF2, принимает H.264-4CIF3. Кодек H.264-HD  и SD не стартуют. Используя Polycom PVX 8.0.4 - в логах openmcu видно, что H.264-HD подключается,  но нет звука.

muggot

  • Гость
Режимы HD и SD в openmcu были отключены, поскольку протестировать их до появления myphone3 у меня не было возможности.
Сейчас думаю как лучше выложить последния изменения, патчами или целыми пакетами.

muggot

  • Гость
Используя Polycom PVX 8.0.4 - в логах openmcu видно, что H.264-HD подключается,  но нет звука.

Возможно не находятся подходящие кодеки.
Попробуй скопировать все кодеки из [RECEIVE SOUND] в [TRANSMIT SOUND] и в кодеке G.729-8k[e]{sw} добавить букву А, вот так:
G.729A-8k[e]{sw}

happyman

  • Гость
Возможно не находятся подходящие кодеки.
Попробуй скопировать все кодеки из [RECEIVE SOUND] в [TRANSMIT SOUND] и в кодеке G.729-8k[e]{sw} добавить букву А, вот так:
G.729A-8k[e]{sw}

Спасибо за наводку. Стал для тестов использовать myphone. Оправляю 711-м, а от MCU приходит 723-м.
В конфе же из 2-х c с разршением абонентов CIF - тестовый сервер c процем Intel Pentium 4 531, 3000 MHz (15 x 200) и 1Гб уходит в 95%UL. При 4-х - 97-98%.

Есть у кого-ннибудь опыт запуска, на пример, конференции в раскладке: 5+1 со звуком и 25 FPS. Какая конфигурация сервера справиться? Кстати, myphone тоже потребляет порядка 90% русурсов в это время. :(

muggot

  • Гость
Спасибо за наводку. Стал для тестов использовать myphone. Оправляю 711-м, а от MCU приходит 723-м.
В конфе же из 2-х c с разршением абонентов CIF - тестовый сервер c процем Intel Pentium 4 531, 3000 MHz (15 x 200) и 1Гб уходит в 95%UL. При 4-х - 97-98%.

Есть у кого-ннибудь опыт запуска, на пример, конференции в раскладке: 5+1 со звуком и 25 FPS. Какая конфигурация сервера справиться? Кстати, myphone тоже потребляет порядка 90% русурсов в это время. :(

Для того, чтобы снизить нагрузку на процессоры при работе openmcu можно использовать кэширование. Оно конечно не очень соответствует стандарту h.323, но работает. Для того чтобы задействовать кэширование нужно настроить одинаково все терминалы в части приоритетов видеокодеков. Посмотреть какой кодек использует openmcu на отправку и прописать его в секции кэширования файла capability.conf. В противном случае редко какой сервер потянет честное кодирование картинки 4CIF с 25к/c на отправку более чем 5-ти участникам. Существенное ограничение этого способа состоит в том, что всем клиентам отправляется картинка с одинаковой сетевой полосой, которая задана в самом кодеке. И, чтобы ее изменить, нужно вносить изменения в исходники плагина, либо менять частоту кадров.

muggot

  • Гость
Еще одно существенное замечание. Чтобы сейчас использовать кэширование h.264 в capability.conf нужно убрать из секции transmit video все кодеки кроме того, который желательно использовать на отправку. Иначе он выставит максимально широкую полосу и высокое качество картинки, что загрузит и openmcu и терминалы.

Nikolai

  • Гость

Сейчас думаю как лучше выложить последния изменения, патчами или целыми пакетами.

Исходниками, да бы потом можно было скомпилировать на реальную машину, огромная просьба. Еще вопрос: все изменения которые идут, они вносятся в ftp раздел?

happyman

  • Гость
Еще одно существенное замечание. Чтобы сейчас использовать кэширование h.264 в capability.conf нужно убрать из секции transmit video все кодеки кроме того, который желательно использовать на отправку. Иначе он выставит максимально широкую полосу и высокое качество картинки, что загрузит и openmcu и терминалы.

После ряда тестов конференция из 6-ти абонетов с основной раскладкой 5+1

видео - рабочими оказались следующие video-кодеки: H.264-4CIF3(2), H.264-CIF3(2)
звук - необходимое качество звука обеспечивает только G.711A
коммуникации - 100 мбит/с ЛВС
web-камеры - Logitech C250

Железо:
   Процессор: Intel Pentium 4 531, 3000 MHz
   RAM:  2x512 (DDR2-667 DDR2 SDRAM)
   MB:    Foxconn SiS-662-6A7IEFKAC-00
   HDD:  ST3160815AS  (160 Гб, 7200 RPM, SATA-II)
ОС: Linux mcu 2.6.18-164.el5 #1 SMP Thu Sep 3 03:33:56 EDT 2009 i686 i686 i386 GNU/Linux

Софт:
  OpenMCU 2.2.3 by muggot
  все последние библиотеки и кодеки с этого сайта
Клиентские терминалы:
  Polycom PVX 8.0.4 trial version
  MyPhone3 by Muggot

В итоге более-менее сносное качество получил на поликомовском клиенте с кодеком H.264-4CIF3.
Однако, производительности железа тестового сервера не хватает даже на 2-х абонентов.
В итоге на 6-ть абонетов получается 8-15 к/сек, картинка нечеткая, при резких движениях - срывается и появляются артефакты.
Загрузка обоих ядер процессора не опускается ниже 98%.   

Клиент MyPhone3 с аналогичными настройками и конфигурацией делает работу на клиентском компе практически невозможной, так как приложение MyPhone3 загружает проц также на 95%. У поликома в этом плане все нормально.

Вот, в кратце, мои результаты. Сижу и думаю, какое железо брать и даст ли 2-х процессорная связка многоядерных ксеонов достаточный для моих задач прирост.  :-\.

Кто-то на форуме собирался на серьезном железе потестить - какие результаты?

При включении кеширования - в консоль openmcu сыпятся FastUpdate needed
и картинка не передается. 

2 muggot: а на каком железе у тебя тестовый публичный сервер работает, для ориентира.

muggot

  • Гость
Intel Pentium 4 531, 3000 MHz
Если я ничего не путаю это 1 ядерный Prescott.
Действительно очень слабо для поставленной задачи, 4CIF 25к/с не должен тянуть даже для одного терминала.
Но для нынешнего среднего core2 это уже 50% нагрузки.
Если используется кэширование, то линейный прирост идет в основном за счет декодирования. Под linux это на десятичный порядок меньше трудоемкости на один терминал.
Но лучше спроси Amir, у него реальный опыт использования при больших нагрузках, на больших конференциях. Может что подскажет.
У меня распределенная сеть на слабых канал, так что требования другие.