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

Bu blogdaki popüler yayınlar

disgusting terrsts of foreign gypsies foreign terrorst grp/cult