[feat] enable TURN for answer peer by default

This commit is contained in:
dijunkun
2024-09-03 10:43:13 +08:00
parent fd392922d7
commit d78dc4585f
3 changed files with 33 additions and 28 deletions

View File

@@ -16,6 +16,7 @@ enum DATA_TYPE { VIDEO = 0, AUDIO, DATA };
enum ConnectionStatus { enum ConnectionStatus {
Connecting = 0, Connecting = 0,
Connected, Connected,
Gathering,
Disconnected, Disconnected,
Failed, Failed,
Closed, Closed,

View File

@@ -169,6 +169,8 @@ int PeerConnection::Init(PeerConnectionParams params,
on_ice_status_change_ = [this](std::string ice_status) { on_ice_status_change_ = [this](std::string ice_status) {
if ("connecting" == ice_status) { if ("connecting" == ice_status) {
on_connection_status_(ConnectionStatus::Connecting, user_data_); on_connection_status_(ConnectionStatus::Connecting, user_data_);
} else if ("gathering" == ice_status) {
on_connection_status_(ConnectionStatus::Gathering, user_data_);
} else if ("disconnected" == ice_status) { } else if ("disconnected" == ice_status) {
on_connection_status_(ConnectionStatus::Disconnected, user_data_); on_connection_status_(ConnectionStatus::Disconnected, user_data_);
} else if ("connected" == ice_status) { } else if ("connected" == ice_status) {
@@ -179,17 +181,13 @@ int PeerConnection::Init(PeerConnectionParams params,
} else if ("ready" == ice_status) { } else if ("ready" == ice_status) {
ice_ready_ = true; ice_ready_ = true;
on_connection_status_(ConnectionStatus::Connected, user_data_); on_connection_status_(ConnectionStatus::Connected, user_data_);
LOG_INFO("Ice finish");
} else if ("closed" == ice_status) { } else if ("closed" == ice_status) {
ice_ready_ = false; ice_ready_ = false;
if (!try_rejoin_with_turn_) {
on_connection_status_(ConnectionStatus::Closed, user_data_);
LOG_INFO("Ice closed"); LOG_INFO("Ice closed");
} on_connection_status_(ConnectionStatus::Closed, user_data_);
} else if ("failed" == ice_status) { } else if ("failed" == ice_status) {
ice_ready_ = false; ice_ready_ = false;
try_rejoin_with_turn_ = true; if (offer_peer_ && try_rejoin_with_turn_) {
if (try_rejoin_with_turn_) {
enable_turn_ = true; enable_turn_ = true;
LOG_INFO( LOG_INFO(
"Ice failed, destroy ice agent and rereate it with TURN enabled"); "Ice failed, destroy ice agent and rereate it with TURN enabled");
@@ -205,10 +203,12 @@ int PeerConnection::Init(PeerConnectionParams params,
PushIceWorkMsg(msg); PushIceWorkMsg(msg);
} }
} else { } else {
LOG_INFO("Unknown ice state"); LOG_INFO("Ice failed");
on_connection_status_(ConnectionStatus::Failed, user_data_);
} }
} else { } else {
ice_ready_ = false; ice_ready_ = false;
LOG_INFO("Unknown ice state [{}]", ice_status);
} }
}; };
@@ -770,9 +770,12 @@ void PeerConnection::ProcessIceWorkMsg(const IceWorkMsg &msg) {
case IceWorkMsg::Type::Offer: { case IceWorkMsg::Type::Offer: {
std::string transmission_id = msg.transmission_id; std::string transmission_id = msg.transmission_id;
std::string remote_user_id = msg.remote_user_id; std::string remote_user_id = msg.remote_user_id;
if (ice_transmission_list_.end() ==
ice_transmission_list_.find(remote_user_id)) {
// Enable TURN for answer peer by default
ice_transmission_list_[remote_user_id] = ice_transmission_list_[remote_user_id] =
std::make_unique<IceTransmission>( std::make_unique<IceTransmission>(
enable_turn_, trickle_ice_, false, transmission_id, user_id_, true, trickle_ice_, false, transmission_id, user_id_,
remote_user_id, ws_transport_, on_ice_status_change_); remote_user_id, ws_transport_, on_ice_status_change_);
ice_transmission_list_[remote_user_id]->SetOnReceiveVideoFunc( ice_transmission_list_[remote_user_id]->SetOnReceiveVideoFunc(
@@ -791,6 +794,7 @@ void PeerConnection::ProcessIceWorkMsg(const IceWorkMsg &msg) {
av1_encoding_ ? RtpPacket::AV1 : RtpPacket::H264); av1_encoding_ ? RtpPacket::AV1 : RtpPacket::H264);
ice_transmission_list_[remote_user_id]->SetTransmissionId( ice_transmission_list_[remote_user_id]->SetTransmissionId(
transmission_id); transmission_id);
}
std::string remote_sdp = msg.remote_sdp; std::string remote_sdp = msg.remote_sdp;
ice_transmission_list_[remote_user_id]->SetRemoteSdp(remote_sdp); ice_transmission_list_[remote_user_id]->SetRemoteSdp(remote_sdp);

View File

@@ -129,7 +129,7 @@ class PeerConnection {
bool enable_turn_ = false; bool enable_turn_ = false;
bool trickle_ice_ = true; bool trickle_ice_ = true;
TraversalMode mode_ = TraversalMode::P2P; TraversalMode mode_ = TraversalMode::P2P;
bool try_rejoin_with_turn_ = false; bool try_rejoin_with_turn_ = true;
private: private:
std::shared_ptr<WsTransmission> ws_transport_ = nullptr; std::shared_ptr<WsTransmission> ws_transport_ = nullptr;