Java-шлюз для webrtc ‹--› sip-коммуникации

Я реализую Java-шлюз для совместимости между webrtc и sip. Я сделал часть обмена sdp. Но теперь я застрял в медиа-части. Пока я предполагаю, что мне нужно реализовать рукопожатие dtls-srtp, а затем часть шифрования и дешифрования. Так может ли кто-нибудь предложить любую java-библиотеку для

  1. Рукопожатие DTLS
  2. SRTP ‹--> преобразование RTP

Или конкретный способ сделать это.
Изменить: я использую JsSIP для webrtc для sip end. И Pangolin для sip-клиента.


person Rashed    schedule 05.03.2018    source источник
comment
Прежде чем вы перейдете к DTLS / SRTP, вам сначала нужно будет реализовать (или найти библиотеку) Interactive Connectivity Establishment, механизм, с помощью которого обе стороны пытаются найти пару (хост, порт) кандидатов, которые они могут использовать для связи.   -  person Jeremy    schedule 08.03.2018
comment
@jeremy: Спасибо. Не могли бы вы предложить любую библиотеку.   -  person Rashed    schedule 10.03.2018
comment
Я нашел библиотеку jstun и использовал ее. но он не может проанализировать все атрибуты и выбросить исключение. Теперь я пытаюсь использовать библиотеку stun pjnath, используя jna (собственный доступ java). Не могли бы вы дать какой-нибудь совет?   -  person Rashed    schedule 11.03.2018


Ответы (1)


Я делал это раньше. Посмотрите мой проект jPhoneLite. Он использует BouncyCastle для части DTLS.

https://github.com/pquiring/javaforce/blob/master/src/javaforce/voip/SRTPChannel.java

Но я хочу преобразовать его в Java9, который теперь включает DTLS, но я не уверен, что это сработает.

DTLS на самом деле НЕ используется для передачи каких-либо данных. Клиент / сервер подключается, согласовывает ключи, а затем использует ключи для кодирования данных в обычном канале RTP. DTLS-соединение разрывается, как только происходит обмен ключами.

См. RFC 5705, где DTLS используется только для получения ключа, который поддерживает мой код.

См. RFC 5764, где DTLS «используется» для отправки / получения фактических данных. В настоящее время мой код НЕ поддерживает этот метод.

person Peter Quiring    schedule 30.03.2018
comment
Спасибо за ваш ответ. Я запутался в одном. Перед DTLS мне нужно обрабатывать запрос / ответ P2P STUN. Какова причина и как это сделать? Вы можете мне помочь, пожалуйста? - person Rashed; 01.04.2018
comment
Это тоже сделал. github.com/pquiring/javaforce/blob/master/src/ javaforce / - person Peter Quiring; 01.04.2018
comment
К вашему сведению - STUN используется для обхода брандмауэров, из-за которых пользователи Интернета практически не могут напрямую подключаться друг к другу. - person Peter Quiring; 03.04.2018
comment
Привет. Я прошел через часть DTLS из SRTPChannel, используемого в jPhoneLite. Я реализовал часть рукопожатия DTLS-SRTP. Но я не могу понять, что такое шифрование и дешифрование, используя обменный ключ. Я только что нашел функцию шифрования и дешифрования в SRTPChannel. Которая не использует ключ DTLS. Вы можете мне помочь, где вы реализовали SRTP ‹--› RTP (шифрование и дешифрование). - person Rashed; 24.04.2018
comment
Примечание. Существует два разных RFC, относящихся к DTLS и SRTP. Я обновил свой пост, чтобы отразить это. - person Peter Quiring; 27.04.2018
comment
Ok. Я понимаю. Вы проделали отличную работу. Это мне очень помогло. - person Rashed; 28.04.2018