2014-10-10 136 views
-1

我試圖在NAT之後的兩臺計算機之間建立連接。我有第三臺可以通過這兩臺計算機訪問的計算機。如何使用ICE協議

我想使用ICE(互動連接建立)協議,但我找不到Python中的任何示例。我聽說pjsip,其中包括一個名爲pjnath的C庫,但也用C編寫。

是否有任何工具可以在Python中生成它?如果沒有,是否有另一種方法來做我描述的?如果不是,如何在Python中啓動ICE協議?

回答

0

PjSIP有一個可以使用的python模塊。

你可以找到詳細信息和鏈接到需要的教程here

0

您可以使用下面的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())