====== Аудио и видео вызовы при помощи Psi+ (Psimedia) ======
===== Вступление =====
==== Скриншоты ====
{{:psivideo1.png|}}
{{:psivideo2.png|}}
==== Что это такое? ====
Это ни что иное как [[http://www.xmpp.org/extensions/xep-0167.html|XEP-0167]].
Другими словами -- это расширение протокола [[http://ru.wikipedia.org/wiki/XMPP|XMPP]], описывающее возможность передачи аудио- и видеопотоков между XMPP-клиентами и, в нашем случае, реализованное в Psi.
Итак, кроме XEP-0167 использовано ещё несколько технологий. Одна из них -- это мультимедиа-бэкэнд [[http://www.gstreamer.net/|GStreamer]] и вторая -- это транспортный уровень **ICE**, выполненный по [[http://xmpp.org/extensions/xep-0176.html|XEP-0176]].
**GStreamer** считается одним из самых мощных мультимедиа-фреймворков за счёт своей простой расширяемости и простоты использования в различных сторонних библиотеках (Gnome использует его практически во всех мультимедиа-приложениях. В KDE его может использовать phonon как один из своих бэкэндов).
**ICE** (в нашем случае -- Jingle ICE-UDP) описывает процесс установления соединения между клиентами, порядок использования портов и т.д. (подробнее - см. спецификацию).
По поводу используемых портов для передачи данных: последнее что было слышно - это то, что будет использован 8010 UDP-порт и некоторые другие, хотя ICE вообще не подразумевает жёсткую привязку к портам.
Страница проекта находится [[http://delta.affinix.com/psimedia/|здесь]]. Там же можно скачать готовые сборки Psimedia для некоторых ОС.
==== Совместимость с различными операционными системами ====
* **MS Windows** -- свежие актуальные сборки можно найти на [[http://delta.affinix.com/psimedia/|официальной странице проекта]], а [[http://andbit.net/psi_snapshots/win/|здесь]] могут быть найдены ежедневные снапшоты официальной Psi со встроенной Psimedia. Также дистрибутив Psimedia есть на [[http://code.google.com/p/psi-dev/downloads/list?q=setup-psimedia|сайте проекта Psi+]]. Psimedia необходимо устанавливать в каталог с самой Psi.
* **Gentoo Linux** - emerge psimedia (rion-overlay).
* **Ubuntu** - поддержка только начиная с версии 9.04.
* **Mac OS X** - сборки на [[http://delta.affinix.com/psimedia/|странице проекта]].
===== Сборка под Linux/BSD-системами =====
Psimedia для кодирования/декодирования медиа-потока использует GStreamer. Другие фреймворки не поддерживаются и вряд ли будут поддерживаться.
==== Инструменты для сборки ====
* **[[https://launchpadlibrarian.net/21502583/gstreamer0.10_0.10.22.orig.tar.gz|gstreamer-0.10.22]]**
* **gstreamer-plugins-base-0.10.22**
* gstreamer-plugins-good
* **glib-2.20**
* [[http://delta.affinix.com/qconf/|qconf]]
* **speex-1.2rc1**
* **liboil0.3**
* **Qt**
__**ВНИМАНИЕ**__: Пакеты, выделенные жирным шрифтом, обязательно должны быть установлены вместе с заголовочными (.h) файлами. Во многих системах это называется dev-пакеты.
Если быть более точным, то glib 2.19.x (точно неизвестно начиная с какой версии psimedia будет собираться без ошибок).
Плагины: speex, v4l, v4l2, theora, ogg, alsa, jpeg.
==== Процесс сборки ====
Скрипт сборки (при условии, что перечисленные выше компоненты уже скачаны и установлены) можно найти [[http://psi-dev.googlecode.com/svn/trunk/scripts/posix/psimediabuild.sh|здесь]].
Перед сборкой необходимо уточнить путь установки 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**.
{{:psiplus_account_props.png}}
===== Проблемы и способы их решения при работе голосовых вызовов в Psi/Psi+ =====
==== Шаг первый: Использование свежей версии Psi/Psi+ ====
Psi 0.14 имеет ряд известных проблем совместимости с голосовыми вызовами. Для обеспечения стабильной работы голосовых вызовов необходимо использовать свежие версии Psi/Psi+.
==== Шаг второй: Убедиться, что в системе доступен протокол IPv6 ====
Многие системы поддерживают по умолчанию только протокол IPv4, что делает невозможным установление прямого соединения. Самым простым решением этой проблемы является включение и использование протокола IPv6. Даже если поставщик услуг Интернета не предлагает подключение по протоколу IPv6, вы можете использовать туннелирование для получения поддержки IPv6. Если вы можете получить доступ к [[http://ipv6.whatismyv6.com/|этому сайту]], то это означает, что IPv6 работает правильно и вы можете перейти к следующему шагу. Посмотрите на приведённые ниже инструкции, чтобы получить подключение по протоколу IPv6.
=== Включение поддержки протокола IPv6 ===
На старых системах, таких как MS Windows XP, поддержка протокола IPv6 не включена по умолчанию. В MS Windows XP, следующая команда позволяет включить поддержку IPv6:
netsh interface ipv6 install
Если ваш провайдер предлагает встроенную поддержку IPv6, то вы можете уже иметь доступ к [[http://ipv6.whatismyv6.com/|тестовой странице]]. В остальных случаях рассмотрим следующие варианты получения поддержки IPv6.
=== Настройка туннеля IPv6 с помощью Teredo ===
Что такое [[http://en.wikipedia.org/wiki/Teredo_tunneling|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 в репозитории.
Теперь попробуйте открыть [[http://ipv6.whatismyv6.com/|тестовую странцу]] ещё раз.
=== Настройка туннеля IPv6 с использованием Freenet6 ===
Если Teredo не работает, то вы можете также использовать Freenet6 для создания туннеля IPv6. Скачайте один из следующих вариантов для MS Windows:
* [[http://api.ning.com/files/eTQek6oePnyKxo4A4xnjAqlL--jue7OrZTywOyNFUEkGLmLsqQLT7dmVedGNEPUmRvEyVbcm-Bq0T1Q-fyLhWi-ctbx52DSn/gogoc1.2RELEASEwin32.exe|gogoCLIENT 1.2 Windows Installer 32-bit]]
* [[http://api.ning.com/files/eTQek6oePnyf09jlLkAAW4a-kmGIPcck3HM13gtCQib3eoGx9KaoLLlm5DuufWnrx5b1irL5pXkT0feqbBiA2aPjgUwoSrUS/gogoc1.2RELEASEwin64.exe|gogoCLIENT 1.2 Windows Installer 64-bit]]
Установите и разрешите клиенту подключение. Это должно дать вам подключение по протоколу IPv6. Вы можете проверить это ещё раз, используя [[http://ipv6.whatismyv6.com/|тестовую страницу]].
Существует также gw6c, доступный в Debian и Ubuntu.
Если обе стороны могут получить доступ к [[http://ipv6.whatismyv6.com/|тестовой странице]], то это означает, что у них всегда есть возможность установить соединение для разговора друг с другом. Если это всё же не работает, то проверьте настройки брандмауэра.
==== Шаг третий и заключительный: Проверка громкоговорителей и микрофона ====
Проверьте свои колонки и микрофон.
В GNU/Linux с ALSA простой тест можно сделать командой:
arecord | aplay
В MS Windows для проверки работы микрофона можно использовать инструмент Звукозапись (sound recorder).
Для проверки колонок и микрофона непосредственно из Psi/Psi+ можно использовать тестовый голосовой звонок (Collabora), подробнее -- [[http://code.google.com/p/psi-dev/wiki/jingle_bots|здесь]].
Обратите внимание, что эти тесты не являются проверкой поддержки 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, пропатченные патчами из [[http://psi-dev.googlecode.com/svn/|Psi+ SVN]].
Поскольку они не имеют общего кодека, то прямой голосовой вызов между ними всегда обречён на провал. Однако оба телефона могут соединиться с сервисом Asterisk и участвовать в голосовой конференции, в этом случае сам сервис Asterisk будет заниматься перекодированием.
Причина, по которой Psimedia поддерживает только перечисленные кодеки, состоит в том, что в настоящее время нет поддержки в какой-либо форме codec negotiation. В дальнейшем поддержка codec negotiation будет добавлена в Psimedia с использованием библиотеки Farsight. Это принесёт поддержку многих распространённых кодеков, включая PCMA и PCMU, которая, в свою очередь, позволит совершать голосовые звонки на телефоны Nokia N900.
==== А как насчёт видеозвонков? ====
Существует недокументированная переменная окружения, позволяющая передавать видео. Подтверждения успешности осуществления видеозвонка не так давно были получены. Если Вы хотите протестировать данную возможность, то можете установить переменную окружения **PSI_ENABLE_VIDEO=1** перед запуском [[downloads|Psi+]].
__**Примечания**__:
* В свежий версиях Psi+ (начиная с версии 0.15.3106 и выше) появилась опция включения приёма/передачи видео.
* В Linux всегда используйте V4L2 для камеры. V4L1, скорее всего, не будет работать.
* В Linux показали успешные результаты камеры с модулем gspca, а камера с модулем uvcvideo не заработала по неизвестным причинам.
* В MS Windows должна работать любая камера с установленными для неё драйверами.
===== Прочее =====
==== TODO by Justin ====
Что осталось сделать:
* Сделать calldlg красивее.
* Создать новый звуковой сигнал для входящих звонков.
* Согласовать с существующим кодом VoiceCallManager/Dlg (если это имеет смысл).
==== Дополнительная информация ====
[[http://lists.affinix.com/pipermail/psi-devel-affinix.com/2009-May/008622.html Voice call howto]]