我試圖在NAT之後的兩臺計算機之間建立連接。我有第三臺可以通過這兩臺計算機訪問的計算機。如何使用ICE協議
我想使用ICE(互動連接建立)協議,但我找不到Python中的任何示例。我聽說pjsip
,其中包括一個名爲pjnath
的C庫,但也用C編寫。
是否有任何工具可以在Python中生成它?如果沒有,是否有另一種方法來做我描述的?如果不是,如何在Python中啓動ICE協議?
我試圖在NAT之後的兩臺計算機之間建立連接。我有第三臺可以通過這兩臺計算機訪問的計算機。如何使用ICE協議
我想使用ICE(互動連接建立)協議,但我找不到Python中的任何示例。我聽說pjsip
,其中包括一個名爲pjnath
的C庫,但也用C編寫。
是否有任何工具可以在Python中生成它?如果沒有,是否有另一種方法來做我描述的?如果不是,如何在Python中啓動ICE協議?
PjSIP有一個可以使用的python模塊。
你可以找到詳細信息和鏈接到需要的教程here。
您可以使用下面的Python-只有庫建立您的ICE連接:
https://github.com/jlaine/aioice
這裏是在同一過程中的兩個端點ICE的一個例子。在現實生活中,你需要一些信令方法來交換候選人,用戶名(「ufrag」)和密碼(「pwd」)。
import asyncio
import aioice
async def connect_using_ice():
conn_a = aioice.Connection(ice_controlling=True)
conn_b = aioice.Connection(ice_controlling=False)
# invite
await conn_a.gather_candidates()
conn_b.remote_candidates = conn_a.local_candidates
conn_b.remote_username = conn_a.local_username
conn_b.remote_password = conn_a.local_password
# accept
await conn_b.gather_candidates()
conn_a.remote_candidates = conn_b.local_candidates
conn_a.remote_username = conn_b.local_username
conn_a.remote_password = conn_b.local_password
# connect
await asyncio.gather(conn_a.connect(), conn_b.connect())
# send data a -> b
await conn_a.send(b'howdee')
data = await conn_b.recv()
print('B got', data)
# send data b -> a
await conn_b.send(b'gotcha')
data = await conn_a.recv()
print('A got', data)
# close
await asyncio.gather(conn_a.close(), conn_b.close())
asyncio.get_event_loop().run_until_complete(connect_using_ice())