Skip to content
This repository was archived by the owner on Oct 25, 2024. It is now read-only.

Commit 3ed25c3

Browse files
authored
Invoke OnPeerConnectionClosed when ICE connection state changes to closed. (#719)
* Invoke OnPeerConnectionClosed when ICE connection state changes to closed. * Add iOS implementation.
1 parent adad03d commit 3ed25c3

9 files changed

+46
-10
lines changed

talk/owt/BUILD.gn

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,11 @@ static_library("owt_sdk_base") {
244244

245245
if (owt_ffmpeg_root != "") {
246246
include_dirs += [ owt_ffmpeg_root + "/include" ]
247+
lib_dirs = [ owt_ffmpeg_root + "/lib" ]
248+
libs = [
249+
"avcodec",
250+
"avutil",
251+
]
247252
}
248253

249254
if (rtc_use_x11) {
@@ -302,7 +307,7 @@ static_library("owt_sdk_base") {
302307
"sdk/base/win/videorendererd3d11.cc",
303308
"sdk/base/win/videorendererd3d11.h",
304309
]
305-
if (owt_msdk_header_root != "" || owt_ffmpeg_root != ""||owt_cg_server) {
310+
if (owt_msdk_header_root != "" || owt_ffmpeg_root != "" || owt_cg_server) {
306311
sources += [
307312
"sdk/base/win/externalvideodecoderfactory.cc",
308313
"sdk/base/win/externalvideodecoderfactory.h",

talk/owt/sdk/include/cpp/owt/p2p/p2pclient.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,8 @@ class OWT_EXPORT P2PClient final
260260
const std::string& message);
261261
// Triggered when a new stream is added.
262262
virtual void OnStreamAdded(std::shared_ptr<owt::base::RemoteStream> stream);
263+
// Triggered when the PeerConnection is closed.
264+
virtual void OnPeerConnectionClosed(const std::string& remote_id);
263265

264266
private:
265267
void Unpublish(const std::string& target_id,

talk/owt/sdk/p2p/objc/P2PPeerConnectionChannelObserverObjcImpl.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class P2PPeerConnectionChannelObserverObjcImpl
2222
void OnStreamAdded(
2323
std::shared_ptr<owt::base::RemoteStream> stream) override;
2424
void OnStopped(const std::string& remote_id) override;
25+
void OnPeerConnectionClosed(const std::string& remote_id) override;
2526
// Jianjun TODO: Remove OnStreamRemoved event
2627
void OnStreamRemoved(
2728
std::shared_ptr<owt::base::RemoteStream> stream);

talk/owt/sdk/p2p/objc/P2PPeerConnectionChannelObserverObjcImpl.mm

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@
3737
[_observer onStoppedFrom:[NSString stringWithUTF8String:remote_id.c_str()]];
3838
}
3939

40+
void P2PPeerConnectionChannelObserverObjcImpl::OnPeerConnectionClosed(
41+
const std::string& remote_id) {
42+
// This method is provided for CG server only. It doesn't have an iOS client,
43+
// so we leave it empty here.
44+
}
45+
4046
void P2PPeerConnectionChannelObserverObjcImpl::TriggerStreamRemoved(
4147
std::shared_ptr<owt::base::RemoteStream> stream) {
4248
if (remote_streams_.find(stream->Id()) == remote_streams_.end()) {

talk/owt/sdk/p2p/p2pclient.cc

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -453,10 +453,6 @@ void P2PClient::OnStopped(const std::string& remote_id) {
453453
pc_channels_.erase(remote_id);
454454
}
455455
}).detach();
456-
#ifdef OWT_CG_SERVER
457-
EventTrigger::OnEvent1(observers_, event_queue_,
458-
&P2PClientObserver::OnPeerConnectionClosed, remote_id);
459-
#endif
460456
}
461457
void P2PClient::OnStreamAdded(std::shared_ptr<RemoteStream> stream) {
462458
EventTrigger::OnEvent1(
@@ -465,5 +461,13 @@ void P2PClient::OnStreamAdded(std::shared_ptr<RemoteStream> stream) {
465461
&P2PClientObserver::OnStreamAdded),
466462
stream);
467463
}
464+
465+
void P2PClient::OnPeerConnectionClosed(const std::string& remote_id) {
466+
#ifdef OWT_CG_SERVER
467+
EventTrigger::OnEvent1(observers_, event_queue_,
468+
&P2PClientObserver::OnPeerConnectionClosed, remote_id);
469+
#endif
470+
}
471+
468472
} // namespace p2p
469473
} // namespace owt

talk/owt/sdk/p2p/p2ppeerconnectionchannel.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -767,6 +767,7 @@ void P2PPeerConnectionChannel::OnIceConnectionChange(
767767
}).detach();
768768
break;
769769
case webrtc::PeerConnectionInterface::kIceConnectionClosed:
770+
TriggerOnPeerConnectionClosed();
770771
TriggerOnStopped();
771772
CleanLastPeerConnection();
772773
break;
@@ -963,6 +964,14 @@ void P2PPeerConnectionChannel::TriggerOnStopped() {
963964
}
964965
}
965966

967+
void P2PPeerConnectionChannel::TriggerOnPeerConnectionClosed() {
968+
for (std::vector<P2PPeerConnectionChannelObserver*>::iterator it =
969+
observers_.begin();
970+
it != observers_.end(); it++) {
971+
(*it)->OnPeerConnectionClosed(remote_id_);
972+
}
973+
}
974+
966975
void P2PPeerConnectionChannel::CleanLastPeerConnection() {
967976
pending_remote_sdp_.reset();
968977
negotiation_needed_ = false;

talk/owt/sdk/p2p/p2ppeerconnectionchannel.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,10 @@ class P2PPeerConnectionChannelObserver {
3434
// Triggered when a new stream is added.
3535
virtual void OnStreamAdded(
3636
std::shared_ptr<RemoteStream> stream) = 0;
37-
// Triggered when the WebRTC session is ended.
37+
// Triggered when the PeerConnectionChannel is stopped.
3838
virtual void OnStopped(const std::string& remote_id) = 0;
39+
// Triggered when the PeerConnection is closed.
40+
virtual void OnPeerConnectionClosed(const std::string& remote_id) = 0;
3941
};
4042
// An instance of P2PPeerConnectionChannel manages a session for a specified
4143
// remote client.
@@ -148,6 +150,7 @@ class P2PPeerConnectionChannel : public P2PSignalingReceiverInterface,
148150
// Publish and/or unpublish all streams in pending stream list.
149151
void DrainPendingStreams();
150152
void TriggerOnStopped();
153+
void TriggerOnPeerConnectionClosed();
151154
void CheckWaitedList(); // Check pending streams and negotiation requests.
152155
void SendStop(std::function<void()> on_success,
153156
std::function<void(std::unique_ptr<Exception>)> on_failure);

talk/owt/sdk/p2p/p2ppeerconnectionchannelobservercppimpl.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,9 @@ void P2PPeerConnectionChannelObserverCppImpl::OnStopped(
1717
const std::string& remote_id) {
1818
peer_client_.OnStopped(remote_id);
1919
}
20+
void P2PPeerConnectionChannelObserverCppImpl::OnPeerConnectionClosed(
21+
const std::string& remote_id) {
22+
peer_client_.OnPeerConnectionClosed(remote_id);
23+
}
2024
}
2125
}

talk/owt/sdk/p2p/p2ppeerconnectionchannelobservercppimpl.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,14 @@ class P2PPeerConnectionChannelObserverCppImpl
2020
: peer_client_(peer_client) {}
2121
// Triggered when remote user send data via data channel.
2222
// Currently, data is string type.
23-
virtual void OnMessageReceived(const std::string& remote_id,
23+
void OnMessageReceived(const std::string& remote_id,
2424
const std::string& message) override;
2525
// Triggered when a new stream is added.
26-
virtual void OnStreamAdded(std::shared_ptr<RemoteStream> stream) override;
27-
// Triggered when the WebRTC session is ended.
28-
virtual void OnStopped(const std::string& remote_id) override;
26+
void OnStreamAdded(std::shared_ptr<RemoteStream> stream) override;
27+
// Triggered when the PeerConnectionChannel is stopped.
28+
void OnStopped(const std::string& remote_id) override;
29+
// Triggered when the PeerConnection is closed.
30+
void OnPeerConnectionClosed(const std::string& remote_id) override;
2931

3032
private:
3133
P2PClient& peer_client_;

0 commit comments

Comments
 (0)