WEBRTC 候选地址收集


#include "webrtc/base/thread.h"
#include "webrtc/base/asyncinvoker.h"
#include "webrtc/p2p/base/basicpacketsocketfactory.h"
#include "webrtc/p2p/client/basicportallocator.h"
#include "webrtc/p2p/client/basicportallocator.h"
#include "webrtc/base/socketaddress.h"
#include "webrtc/base/physicalsocketserver.h"
#include <iostream>


using namespace rtc;
using namespace cricket;

std::unique_ptr<BasicPortAllocator> allocator_;

class TestGatheringCandidate :public sigslot::has_slots<>
{
public:
void OnReadEvent(AsyncSocket* socket) 
{
char buf[1024] = {0};
int r = socket->Recv(buf,sizeof(buf),0);
printf("recv=%s r=%d!\n",buf,r);
}
void OnPortReady(PortAllocatorSession* ses, PortInterface* port) 
{
printf("OnPortReady\n");//通信端口
}
void OnCandidatesReady(PortAllocatorSession* ses,const std::vector<Candidate>& candidates) 

{

//候选地址,用于信令交换用

printf("OnCandidatesReady=%s\n", candidates.back().ToString().c_str());
//std::cout<<"============OnCandidatesReady type="<<candidates.back().type() <<" ip="<<candidates.back().address().ToString()
// <<" protocal="<< candidates.back().protocol()<<std::endl;
}
void OnCandidatesAllocationDone(PortAllocatorSession* session)

{

//收集结束

printf("OnCandidatesAllocationDone\n");
}
std::unique_ptr<PortAllocatorSession> CreateSession(
const std::string& sid,
const std::string& content_name,
int component,
const std::string& ice_ufrag,
const std::string& ice_pwd) {
std::unique_ptr<PortAllocatorSession> session = allocator_->CreateSession(
sid, content_name, component, ice_ufrag, ice_pwd);
session->SignalPortReady.connect(this,
&TestGatheringCandidate::OnPortReady);
session->SignalCandidatesReady.connect(
this, &TestGatheringCandidate::OnCandidatesReady);
session->SignalCandidatesAllocationDone.connect(
this, &TestGatheringCandidate::OnCandidatesAllocationDone);
return session;
}


};


int main()
{
TestGatheringCandidate ObjTestGatheringCandidate;
rtc::Thread* thread_(rtc::Thread::Current());
std::unique_ptr<rtc::BasicNetworkManager> default_network_manager_;
std::unique_ptr<rtc::BasicPacketSocketFactory> default_socket_factory_;
default_network_manager_.reset(new rtc::BasicNetworkManager());
if (!default_network_manager_) {
return -1;
}


default_socket_factory_.reset(
new rtc::BasicPacketSocketFactory(thread_));
if (!default_socket_factory_) {
return -1;
}


std::unique_ptr<PortAllocatorSession> session_;
ServerAddresses stun_servers;
static const SocketAddress kStunAddr("120.76.159.62", 3478);


stun_servers.insert(kStunAddr);


allocator_.reset(new BasicPortAllocator(
default_network_manager_.get(), default_socket_factory_.get(), stun_servers));
RelayServerConfig config("120.76.159.62",3478,"sjz","111111", PROTO_TCP,false);
allocator_->AddTurnServer(config);
allocator_->set_step_delay(kMinimumStepDelay);


session_ = ObjTestGatheringCandidate.CreateSession("session","video",1,"abc","abc");


session_->StartGettingPorts();
while (true)
{
rtc::Thread::Current()->ProcessMessages(100);
//Thread::SleepMs(50);
}


    return 0;

}


运行结果:

(basicportallocator.cc:850): Jingle:Net[Broadcom:192.168.1.4/32:Unknown]: Allocation Phase=Udp
(port.cc:200): Jingle:Port[00208178::1:0:local:Net[Broadcom:192.168.1.4/32:Unknown]]: Port created with network cost 50
(basicportallocator.cc:520): Adding allocated port for video
(basicportallocator.cc:540): Jingle:Port[00208178:video:1:0:local:Net[Broadcom:192.168.1.4/32:Unknown]]: Added port to allocator
OnPortReady
(port.cc:200): Jingle:Port[0020AF60::1:0:local:Net[Broadcom:192.168.1.4/32:Unknown]]: Port created with network cost 50
(basicportallocator.cc:520): Adding allocated port for video
(basicportallocator.cc:540): Jingle:Port[0020AF60:video:1:0:stun:Net[Broadcom:192.168.1.4/32:Unknown]]: Added port to allocator
OnCandidatesReady=Cand[:3022624816:1:udp:2122260223:192.168.1.4:60106:local::0:abc:abc:3:50:0]
OnCandidatesReady=Cand[:494278629:1:udp:1686052607:183.39.199.47:41826:stun:192.168.1.4:62732:abc:abc:3:50:0]

OnPortReady
(basicportallocator.cc:850): Jingle:Net[Broadcom:192.168.1.4/32:Unknown]: Allocation Phase=Relay
(port.cc:200): Jingle:Port[00204818::1:0:relay:Net[Broadcom:192.168.1.4/32:Unknown]]: Port created with network cost 50
(basicportallocator.cc:520): Adding allocated port for video
(basicportallocator.cc:540): Jingle:Port[00204818:video:1:0:relay:Net[Broadcom:192.168.1.4/32:Unknown]]: Added port to allocator
(turnport.cc:302): Jingle:Port[00204818:video:1:0:relay:Net[Broadcom:192.168.1.4/32:Unknown]]: Trying to connect to TURN server via tcp @ 120.76.159.62:3478
(turnport.cc:406): TurnPort connected to 120.76.159.62:3478 using tcp.
(turnport.cc:1068): Jingle:Port[00204818:video:1:0:relay:Net[Broadcom:192.168.1.4/32:Unknown]]: TURN allocate request sent, id=763779575669746648566273
(turnport.cc:1115): Jingle:Port[00204818:video:1:0:relay:Net[Broadcom:192.168.1.4/32:Unknown]]: Received TURN allocate error response, id=763779575669746648566273, code=401, rtt=14
(turnport.cc:1068): Jingle:Port[00204818:video:1:0:relay:Net[Broadcom:192.168.1.4/32:Unknown]]: TURN allocate request sent, id=74476947614e43796c2b664b
(turnport.cc:1074): Jingle:Port[00204818:video:1:0:relay:Net[Broadcom:192.168.1.4/32:Unknown]]: TURN allocate requested successfully, id=74476947614e43796c2b664b, code=0, rtt=8
OnCandidatesReady=Cand[:2669682621:1:udp:25108223:120.76.159.62:53860:relay:183.39.199.47:41335:abc:abc:3:50:0]
OnPortReady
(turnport.cc:896): Jingle:Port[00204818:video:1:0:relay:Net[Broadcom:192.168.1.4/32:Unknown]]: Scheduled refresh in 540000ms.
(basicportallocator.cc:850): Jingle:Net[Broadcom:192.168.1.4/32:Unknown]: Allocation Phase=Tcp
(port.cc:200): Jingle:Port[0025BE28::1:0:local:Net[Broadcom:192.168.1.4/32:Unknown]]: Port created with network cost 50
(basicportallocator.cc:520): Adding allocated port for video
(basicportallocator.cc:540): Jingle:Port[0025BE28:video:1:0:local:Net[Broadcom:192.168.1.4/32:Unknown]]: Added port to allocator
OnPortReady
OnCandidatesReady=Cand[:4205470912:1:tcp:1518280447:192.168.1.4:58062:local::0:abc:abc:3:50:0]
(basicportallocator.cc:850): Jingle:Net[Broadcom:192.168.1.4/32:Unknown]: Allocation Phase=SslTcp
(basicportallocator.cc:713): All candidates gathered for video:1:0
OnCandidatesAllocationDone
(turnport.cc:1241): Jingle:Port[00203450:video:1:0:relay:Net[Broadcom:192.168.1.4/32:Unknown]]: TURN refresh request sent, id=5059704271474f5239535962
(turnport.cc:1241): Jingle:Port[00203450:video:1:0:relay:Net[Broadcom:192.168.1.4/32:Unknown]]: TURN refresh request sent, id=5059704271474f5239535962
(turnport.cc:1241): Jingle:Port[00203450:video:1:0:relay:Net[Broadcom:192.168.1.4/32:Unknown]]: TURN refresh request sent, id=5059704271474f5239535962
(turnport.cc:1285): Jingle:Port[00203450:video:1:0:relay:Net[Broadcom:192.168.1.4/32:Unknown]]: TURN refresh timeout 5059704271474f5239535962
(physicalsocketserver.cc:1610): PhysicalSocketServer got FD_CLOSE_BIT error 10053
(turnport.cc:412): Jingle:Port[00203450:video:1:0:relay:Net[Broadcom:192.168.1.4/32:Unknown]]: Connection with server failed, error=10053


猜你喜欢

转载自blog.csdn.net/doitsjz/article/details/73429060
今日推荐