8000 dispose streams and connections (#1103) · nader-nagy/flutter-webrtc@61a65a8 · GitHub
[go: up one dir, main page]

Skip to content

Commit 61a65a8

Browse files
authored
dispose streams and connections (flutter-webrtc#1103)
1 parent 61d05ad commit 61a65a8

File tree

1 file changed

+47
-19
lines changed

1 file changed

+47
-19
lines changed

android/src/main/java/com/cloudwebrtc/webrtc/MethodCallHandlerImpl.java

Lines changed: 47 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,18 @@ static private void resultError(String method, String error, Result result) {
126126
}
127127

128128
void dispose() {
129+
for (final MediaStream mediaStream : localStreams.values()) {
130+
streamDispose(mediaStream);
131+
mediaStream.dispose();
132+
}
133+
localStreams.clear();
134+
for (final MediaStreamTrack track : localTracks.values()) {
135+
track.dispose();
136+
}
137+
localTracks.clear();
138+
for (final PeerConnectionObserver connection : mPeerConnectionObservers.values()) {
139+
peerConnectionDispose(connection);
140+
}
129141
mPeerConnectionObservers.clear();
130142
}
131143

@@ -959,7 +971,7 @@ private RTCConfiguration parseRTCConfiguration(ConstraintsMap map) {
959971
}
960972
// cryptoOptions
961973
if (map.hasKey("cryptoOptions")
962-
&& map.getType("cryptoOptions") == ObjectType.Map) {
974+
&& map.getType("cryptoOptions") == ObjectType.Map) {
963975
final ConstraintsMap cryptoOptions = map.getMap("cryptoOptions");
964976
conf.cryptoOptions = CryptoOptions.builder()
965977
.setEnableGcmCryptoSuites(cryptoOptions.hasKey("enableGcmCryptoSuites") && cryptoOptions.getBoolean("enableGcmCryptoSuites"))
@@ -1142,7 +1154,7 @@ public void getSources(Result result) {
11421154
array.pushMap(audio);
11431155
} else {
11441156
android.media.AudioManager audioManager = ((android.media.AudioManager) context
1145-
.getSystemService(Context.AUDIO_SERVICE));
1157+
.getSystemService(Context.AUDIO_SERVICE));
11461158
final AudioDeviceInfo[] devices = audioManager.getDevices(android.media.AudioManager.GET_DEVICES_INPUTS);
11471159
for (int i = 0; i < devices.length; i++) {
11481160
AudioDeviceInfo device = devices[i];
@@ -1547,38 +1559,54 @@ public void peerConnectionClose(final String id) {
15471559

15481560
public void peerConnectionDispose(final String id) {
15491561
PeerConnectionObserver pco = mPeerConnectionObservers.get(id);
1550-
if (pco == null || pco.getPeerConnection() == null) {
1551-
Log.d(TAG, "peerConnectionDispose() peerConnection is null");
1562+
if (pco != null) {
1563+
if (peerConnectionDispose(pco)) {
1564+
1565+
mPeerConnectionObservers.remove(id);
1566+
}
15521567
} else {
1553-
pco.dispose();
1554-
mPeerConnectionObservers.remove(id);
1568+
Log.d(TAG, "peerConnectionDispose() peerConnectionObserver is null");
15551569
}
15561570
if (mPeerConnectionObservers.size() == 0) {
15571571
audioSwitchManager.stop();
15581572
}
15591573
}
15601574

1575+
public boolean peerConnectionDispose(final PeerConnectionObserver pco) {
1576+
if (pco.getPeerConnection() == null) {
1577+
Log.d(TAG, "peerConnectionDispose() peerConnection is null");
1578+
} else {
1579+
pco.dispose();
1580+
return true;
1581+
}
1582+
return false;
1583+
}
1584+
15611585
public void streamDispose(final String streamId) {
15621586
MediaStream stream = localStreams.get(streamId);
15631587
if (stream != null) {
1564-
List<VideoTrack> videoTracks = stream.videoTracks;
1565-
for (VideoTrack track : videoTracks) {
1566-
localTracks.remove(track.id());
1567-
getUserMediaImpl.removeVideoCapturer(track.id());
1568-
stream.removeTrack(track);
1569-
}
1570-
List<AudioTrack> audioTracks = stream.audioTracks;
1571-
for (AudioTrack track : audioTracks) {
1572-
localTracks.remove(track.id());
1573-
stream.removeTrack(track);
1574-
}
1588+
streamDispose(stream);
15751589
localStreams.remove(streamId);
15761590
removeStreamForRendererById(streamId);
15771591
} else {
15781592
Log.d(TAG, "streamDispose() mediaStream is null");
15791593
}
15801594
}
15811595

1596+
public void streamDispose(final MediaStream stream) {
1597+
List<VideoTrack> videoTracks = stream.videoTracks;
1598+
for (VideoTrack track : videoTracks) {
1599+
localTracks.remove(track.id());
1600+
getUserMediaImpl.removeVideoCapturer(track.id());
1601+
stream.removeTrack(track);
1602+
}
1603+
List<AudioTrack> audioTracks = stream.audioTracks;
1604+
for (AudioTrack track : audioTracks) {
1605+
localTracks.remove(track.id());
1606+
stream.removeTrack(track);
1607+
}
1608+
}
1609+
15821610
private void removeStreamForRendererById(String streamId) {
15831611
for (int i = 0; i < renders.size(); i++) {
15841612
FlutterRTCVideoRenderer renderer = renders.valueAt(i);
@@ -1772,7 +1800,7 @@ public void rtpSenderSetTrack(String peerConnectionId, String rtpSenderId, Strin
17721800
PeerConnectionObserver pco = mPeerConnectionObservers.get(peerConnectionId);
17731801
if (pco == null || pco.getPeerConnection() == null) {
17741802
resultError("rtpSenderSetTrack", "peerConnection is null", result);
1775-
} else {
1803+
} else {
17761804
MediaStreamTrack track = null;
17771805
if (trackId.length() > 0) {
17781806
track = localTracks.get(trackId);
@@ -1842,4 +1870,4 @@ void requestPermissions(
18421870
activity,
18431871
permissions.toArray(new String[permissions.size()]), callback);
18441872
}
1845-
}
1873+
}

0 commit comments

Comments
 (0)
0