Содержание
Аудио и видео вызовы при помощи Psi+ (Psimedia)
Вступление
Скриншоты
Что это такое?
Это ни что иное как XEP-0167.
Другими словами – это расширение протокола XMPP, описывающее возможность передачи аудио- и видеопотоков между XMPP-клиентами и, в нашем случае, реализованное в Psi.
Итак, кроме XEP-0167 использовано ещё несколько технологий. Одна из них – это мультимедиа-бэкэнд GStreamer и вторая – это транспортный уровень ICE, выполненный по XEP-0176.
GStreamer считается одним из самых мощных мультимедиа-фреймворков за счёт своей простой расширяемости и простоты использования в различных сторонних библиотеках (Gnome использует его практически во всех мультимедиа-приложениях. В KDE его может использовать phonon как один из своих бэкэндов).
ICE (в нашем случае – Jingle ICE-UDP) описывает процесс установления соединения между клиентами, порядок использования портов и т.д. (подробнее - см. спецификацию).
По поводу используемых портов для передачи данных: последнее что было слышно - это то, что будет использован 8010 UDP-порт и некоторые другие, хотя ICE вообще не подразумевает жёсткую привязку к портам.
Страница проекта находится здесь. Там же можно скачать готовые сборки Psimedia для некоторых ОС.
Совместимость с различными операционными системами
- MS Windows – свежие актуальные сборки можно найти на официальной странице проекта, а здесь могут быть найдены ежедневные снапшоты официальной Psi со встроенной Psimedia. Также дистрибутив Psimedia есть на сайте проекта Psi+. Psimedia необходимо устанавливать в каталог с самой Psi.
- Gentoo Linux - emerge psimedia (rion-overlay).
- Ubuntu - поддержка только начиная с версии 9.04.
- Mac OS X - сборки на странице проекта.
Сборка под Linux/BSD-системами
Psimedia для кодирования/декодирования медиа-потока использует GStreamer. Другие фреймворки не поддерживаются и вряд ли будут поддерживаться.
Инструменты для сборки
- gstreamer-plugins-base-0.10.22
- gstreamer-plugins-good
- glib-2.20
- speex-1.2rc1
- liboil0.3
- Qt
ВНИМАНИЕ: Пакеты, выделенные жирным шрифтом, обязательно должны быть установлены вместе с заголовочными (.h) файлами. Во многих системах это называется dev-пакеты.
Если быть более точным, то glib 2.19.x (точно неизвестно начиная с какой версии psimedia будет собираться без ошибок).
Плагины: speex, v4l, v4l2, theora, ogg, alsa, jpeg.
Процесс сборки
Скрипт сборки (при условии, что перечисленные выше компоненты уже скачаны и установлены) можно найти здесь.
Перед сборкой необходимо уточнить путь установки Psi.
Если при конфигурировании Psi (configure) не был указан префикс (–prefix), то Psi будет установлена в /usr/local и, таким образом, путь установки плагина будет /usr/local/lib/psi/plugins. Довольно часто же практикуется указание префикса /usr; в этом случае путь установки плагина будет /usr/lib/psi/plugins. Учтите это ниже.
svn co https://delta.affinix.com/svn/trunk/psimedia cd psimedia qconf ./configure make mkdir -p /usr/local/lib/psi/plugins/ cp gstprovider/libgstprovider.so /usr/local/lib/psi/plugins/
Если сборка не удалась c сообщением:
cc1: warnings being treated as errors
то можно попробовать следующee:
sed 's/ -Werror//' -i gstprovider/gstelements/static/static.pro
а можно сделать это сразу
Тестирование
Для теста запустите demo/demo после сборки. В demo-программе для передачи картинки на нижнее окно нужно скопировать полученный кодек после старта в нижнее соответсвующее поле.
Подключение через IPv4 с использованием STUN-сервера
Если Вы находитесь за NAT-ом, то Вам также понадобится использовать STUN-сервер. Данная настройка находится на вкладке Misc. в настройках аккаунта. Вы можете вписать туда stun.ekiga.net (если не получится, то пропишите IP-адрес), порт 3478.
Также проверьте настройки голосовых звонков в общих настройках Psi.
UPD: на сервере jabber.ru появился собственный stun-сервер: stun.jabber.ru, порт 5249.
Проблемы и способы их решения при работе голосовых вызовов в Psi/Psi+
Шаг первый: Использование свежей версии Psi/Psi+
Psi 0.14 имеет ряд известных проблем совместимости с голосовыми вызовами. Для обеспечения стабильной работы голосовых вызовов необходимо использовать свежие версии Psi/Psi+.
Шаг второй: Убедиться, что в системе доступен протокол IPv6
Многие системы поддерживают по умолчанию только протокол IPv4, что делает невозможным установление прямого соединения. Самым простым решением этой проблемы является включение и использование протокола IPv6. Даже если поставщик услуг Интернета не предлагает подключение по протоколу IPv6, вы можете использовать туннелирование для получения поддержки IPv6. Если вы можете получить доступ к этому сайту, то это означает, что IPv6 работает правильно и вы можете перейти к следующему шагу. Посмотрите на приведённые ниже инструкции, чтобы получить подключение по протоколу IPv6.
Включение поддержки протокола IPv6
На старых системах, таких как MS Windows XP, поддержка протокола IPv6 не включена по умолчанию. В MS Windows XP, следующая команда позволяет включить поддержку IPv6:
netsh interface ipv6 install
Если ваш провайдер предлагает встроенную поддержку IPv6, то вы можете уже иметь доступ к тестовой странице. В остальных случаях рассмотрим следующие варианты получения поддержки IPv6.
Настройка туннеля IPv6 с помощью Teredo
Что такое Teredo?
Если поставщик услуг не предоставляет встроенной поддержки IPv6, то вы можете настроить туннель поверх IPv4. В MS Windows XP это делается с помощью следующей команды:
netsh interface ipv6 set teredo client
В Debian и Ubuntu туннель может быть создан с помощью команды:
apt-get install miredo
or when you are not root:
sudo apt-get install miredo
Другие GNU/Linux дистрибутивы также должны иметь пакет miredo в репозитории.
Теперь попробуйте открыть тестовую странцу ещё раз.
Настройка туннеля IPv6 с использованием Freenet6
Если Teredo не работает, то вы можете также использовать Freenet6 для создания туннеля IPv6. Скачайте один из следующих вариантов для MS Windows:
Установите и разрешите клиенту подключение. Это должно дать вам подключение по протоколу IPv6. Вы можете проверить это ещё раз, используя тестовую страницу.
Существует также gw6c, доступный в Debian и Ubuntu.
Если обе стороны могут получить доступ к тестовой странице, то это означает, что у них всегда есть возможность установить соединение для разговора друг с другом. Если это всё же не работает, то проверьте настройки брандмауэра.
Шаг третий и заключительный: Проверка громкоговорителей и микрофона
Проверьте свои колонки и микрофон.
В GNU/Linux с ALSA простой тест можно сделать командой:
arecord | aplay
В MS Windows для проверки работы микрофона можно использовать инструмент Звукозапись (sound recorder).
Для проверки колонок и микрофона непосредственно из Psi/Psi+ можно использовать тестовый голосовой звонок (Collabora), подробнее – здесь.
Обратите внимание, что эти тесты не являются проверкой поддержки IPv6.
Часто Задаваемые ВОпросы (FAQ)
Почему я должен использовать IPv6?
Есть ещё несколько способов использовать подключение по IPv4. Одним из вариантов является использование сервера STUN, как описано в предыдущем разделе. Однако такой подход является, как правило, менее надёжным. Авторы этой статьи настоятельно рекомендуют использовать на обеих сторонах протокол IPv6 для совершения голосовых вызовов между Psi/Psi+. Этот вариант до сих пор даёт 100%-ый результат.
Почему я не могу использовать телефон Nokia N900? Почему Psi/Psi+ поддерживает только Speex?
На данный момент не представляется возможным успешное установление голосового соединения иежду пользователями N900. В окне обзора сервиса, Вы можете увидеть сообщение об ошибке «кодеки не совпадают». N900 в настоящее время предлагает использовать следующие аудио-кодеки:
- G729
- ILBC
- PCMA
- PCMU
Psi/Psi+ поддерживает только:
- Speex Wideband
- Speex Narrowband (только в случае, когда используются Psi+ и Psimedia, пропатченные патчами из Psi+ SVN.
Поскольку они не имеют общего кодека, то прямой голосовой вызов между ними всегда обречён на провал. Однако оба телефона могут соединиться с сервисом Asterisk и участвовать в голосовой конференции, в этом случае сам сервис Asterisk будет заниматься перекодированием.
Причина, по которой Psimedia поддерживает только перечисленные кодеки, состоит в том, что в настоящее время нет поддержки в какой-либо форме codec negotiation. В дальнейшем поддержка codec negotiation будет добавлена в Psimedia с использованием библиотеки Farsight. Это принесёт поддержку многих распространённых кодеков, включая PCMA и PCMU, которая, в свою очередь, позволит совершать голосовые звонки на телефоны Nokia N900.
А как насчёт видеозвонков?
Существует недокументированная переменная окружения, позволяющая передавать видео. Подтверждения успешности осуществления видеозвонка не так давно были получены. Если Вы хотите протестировать данную возможность, то можете установить переменную окружения PSI_ENABLE_VIDEO=1 перед запуском Psi+.
Примечания:
- В свежий версиях Psi+ (начиная с версии 0.15.3106 и выше) появилась опция включения приёма/передачи видео.
- В Linux всегда используйте V4L2 для камеры. V4L1, скорее всего, не будет работать.
- В Linux показали успешные результаты камеры с модулем gspca, а камера с модулем uvcvideo не заработала по неизвестным причинам.
- В MS Windows должна работать любая камера с установленными для неё драйверами.
Прочее
TODO by Justin
Что осталось сделать:
- Сделать calldlg красивее.
- Создать новый звуковой сигнал для входящих звонков.
- Согласовать с существующим кодом VoiceCallManager/Dlg (если это имеет смысл).