====== Аудио и видео вызовы при помощи 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]]