webRTC - правильно использовать SIP и искать библиотеку Python
Я пытаюсь завершить рукопожатие, используя DTLS и SIP. Этот веб-сайт [0] сообщает мне, что мне нужно отправить ответ SIP на входящий запрос, который содержит мой файл SDP и отпечатки пальцев, использованные для завершения рукопожатия DTLS. Я использую модель клиента <-> на данный момент. Клиент запрашивает вызов, и у меня уже есть пакеты RTP, но мне нужно отправить их обратно клиенту, когда соединение установлено. У меня возникли трудности с установлением связи.
Для справки о рукопожатии DTLS у меня есть скриншот пакетов, которые я имею в виду, которые я нашел, используя wireshark во время вызова браузера-браузера с использованием библиотеки webRTC. https://imgur.com/a/00bi7
Где я могу найти хорошую библиотеку Python, которая используется для этих целей?
1 ) Setup the DTLS handshake and encrypt my RTP packets to SRTP?
1 ответ
Для фактического шифрования / дешифрования SRTP вы можете использовать pylibsrtp:
https://pypi.python.org/pypi/pylibsrtp
Рукопожатие DTLS (которое генерирует главный ключ SRTP) сложнее, но вскоре pyOpenSSL должен иметь необходимые привязки для включения расширения SRTP:
https://github.com/pyca/pyopenssl/pull/734
Как только это станет доступно, вы сможете извлечь генерирующий ключевой материал как:
SRTP_KEY_LEN = 16
SRTP_SALT_LEN = 14
def get_srtp_key_salt(src, idx):
key_start = idx * SRTP_KEY_LEN
salt_start = 2 * SRTP_KEY_LEN + idx * SRTP_SALT_LEN
return (
src[key_start:key_start + SRTP_KEY_LEN] +
src[salt_start:salt_start + SRTP_SALT_LEN]
)
material = connection.export_keying_material(
b'EXTRACTOR-dtls_srtp',
2 * (SRTP_KEY_LEN + SRTP_SALT_LEN))
if is_server:
srtp_tx_key = get_srtp_key_salt(material, 1)
srtp_rx_key = get_srtp_key_salt(material, 0)
else:
srtp_tx_key = get_srtp_key_salt(material, 0)
srtp_rx_key = get_srtp_key_salt(material, 1)