and some example from webrtc dll library:
bool WebRTCMain::init() {
// Using Google's STUN server.
webrtc::PeerConnectionInterface::IceServer ice_server;
ice_server.uri = "stun:stun.l.google.com:19302";
configuration.servers.push_back(ice_server);
network_thread = rtc::Thread::CreateWithSocketServer();
network_thread->Start();
worker_thread = rtc::Thread::Create();
worker_thread->Start();
signaling_thread = rtc::Thread::Create();
signaling_thread->Start();
webrtc::PeerConnectionFactoryDependencies dependencies;
dependencies.network_thread = network_thread.get();
dependencies.worker_thread = worker_thread.get();
dependencies.signaling_thread = signaling_thread.get();
peer_connection_factory = webrtc::CreateModularPeerConnectionFactory(std::move(dependencies));
set_session_desc_observer = new rtc::RefCountedObject<SetSessionDescObserver>(on_set_session_desc_success, on_set_session_desc_fail);
if (peer_connection_factory.get() == nullptr) {
std::cout <<std::this_thread::get_id() << ":"
<< "Error on CreateModularPeerConnectionFactory." << std::endl;
return false;
}
peer_conn_observer = std::shared_ptr<PeerConnObserver>(new PeerConnObserver(on_pc_ice_candidate, on_peer_connection_state_changed, on_data_channel_created));
return true;
}
//; webrtc.lib; WinMM.Lib; dmoguids.lib; AdvAPI32.Lib; Secur32.lib; amstrmid.lib; strmiids.lib; Crypt32.Lib; wmcodecdspuuid.lib; iphlpapi.lib; msdmo.lib;
bool WebRTCMain::create_offer() {
std::cout << std::this_thread::get_id() << ":"
<< "create_offer" << std::endl;
peer_connection =
peer_connection_factory->CreatePeerConnection(configuration, nullptr, nullptr, peer_conn_observer.get());
if (peer_connection.get() == nullptr) {
peer_connection_factory = nullptr;
std::cout << std::this_thread::get_id() << ":"
<< "Error on CreatePeerConnection." << std::endl;
return false;
}
data_chann_observer = std::shared_ptr<DataChannObserver>(new DataChannObserver(on_data_chn_status_changed, on_message_received));
create_session_desc_observer = new rtc::RefCountedObject<CreateSessionDescObserver>(on_create_session_desc_success, on_create_session_desc_fail);
//for udp (from https://jameshfisher.com/2017/01/17/webrtc-datachannel-reliability/ )
webrtc::DataChannelInit config = { .reliable = false, .ordered = false, .maxRetransmits = 0 };
// Configuring DataChannel.
data_channel = peer_connection->CreateDataChannel("data_channel", &config);
data_channel->RegisterObserver(data_chann_observer.get());
peer_connection->CreateOffer(create_session_desc_observer.get(), webrtc::PeerConnectionInterface::RTCOfferAnswerOptions());
}
bool WebRTCMain::on_create_answer_required(std::string sdp) {
std::cout << std::this_thread::get_id() << ":"
<< "create_answer_sdp" << std::endl;
peer_connection =
peer_connection_factory->CreatePeerConnection(configuration, nullptr, nullptr, peer_conn_observer.get());
if (peer_connection.get() == nullptr) {
//peer_connection_factory = nullptr;
std::cout << std::this_thread::get_id() << ":"
<< "Error on CreatePeerConnection." << std::endl;
//exit(EXIT_FAILURE);
//tbd
}
webrtc::SdpParseError error;
webrtc::SessionDescriptionInterface* session_description(
webrtc::CreateSessionDescription("offer", sdp, &error));
if (session_description == nullptr) {
std::cout << std::this_thread::get_id() << ":"
<< "Error on CreateSessionDescription." << std::endl
<< error.line << std::endl
<< error.description << std::endl;
std::cout << std::this_thread::get_id() << ":"
<< "Offer SDP:begin" << std::endl
<< sdp << std::endl
<< "Offer SDP:end" << std::endl;
// exit(EXIT_FAILURE);
//tbd
}
peer_connection->SetRemoteDescription(set_session_desc_observer.get(), session_description);
peer_connection->CreateAnswer(create_session_desc_observer.get(), webrtc::PeerConnectionInterface::RTCOfferAnswerOptions());
return true;
}
bool WebRTCMain::on_answered(std::string sdp) {
std::cout << std::this_thread::get_id() << ":"
<< "on_answered" << std::endl;
webrtc::SdpParseError error;
webrtc::SessionDescriptionInterface* session_description(
webrtc::CreateSessionDescription("answer", sdp, &error));
if (session_description == nullptr) {
std::cout << std::this_thread::get_id() << ":"
<< "Error on CreateSessionDescription." << std::endl
<< error.line << std::endl
<< error.description << std::endl;
std::cout << std::this_thread::get_id() << ":"
<< "Answer SDP:begin" << std::endl
<< sdp << std::endl
<< "Answer SDP:end" << std::endl;
// exit(EXIT_FAILURE);
//tbd
}
peer_connection->SetRemoteDescription(set_session_desc_observer.get(), session_description);
return true;
}
Yorumlar
Yorum Gönder