fetch local description on its own executor
This commit is contained in:
parent
0dca7f8a5a
commit
09993b8319
|
@ -2354,7 +2354,7 @@ public class JingleRtpConnection extends AbstractJingleConnection
|
||||||
|
|
||||||
private void restartIce() {
|
private void restartIce() {
|
||||||
this.stateHistory.clear();
|
this.stateHistory.clear();
|
||||||
this.webRTCWrapper.restartIce();
|
this.webRTCWrapper.restartIceAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -14,6 +14,10 @@ import com.google.common.util.concurrent.ListenableFuture;
|
||||||
import com.google.common.util.concurrent.MoreExecutors;
|
import com.google.common.util.concurrent.MoreExecutors;
|
||||||
import com.google.common.util.concurrent.SettableFuture;
|
import com.google.common.util.concurrent.SettableFuture;
|
||||||
|
|
||||||
|
import eu.siacs.conversations.Config;
|
||||||
|
import eu.siacs.conversations.services.AppRTCAudioManager;
|
||||||
|
import eu.siacs.conversations.services.XmppConnectionService;
|
||||||
|
|
||||||
import org.webrtc.AudioSource;
|
import org.webrtc.AudioSource;
|
||||||
import org.webrtc.AudioTrack;
|
import org.webrtc.AudioTrack;
|
||||||
import org.webrtc.CandidatePairChangeEvent;
|
import org.webrtc.CandidatePairChangeEvent;
|
||||||
|
@ -38,7 +42,6 @@ import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.Callable;
|
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
@ -46,16 +49,14 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import eu.siacs.conversations.Config;
|
|
||||||
import eu.siacs.conversations.services.AppRTCAudioManager;
|
|
||||||
import eu.siacs.conversations.services.XmppConnectionService;
|
|
||||||
|
|
||||||
@SuppressWarnings("UnstableApiUsage")
|
@SuppressWarnings("UnstableApiUsage")
|
||||||
public class WebRTCWrapper {
|
public class WebRTCWrapper {
|
||||||
|
|
||||||
private static final String EXTENDED_LOGGING_TAG = WebRTCWrapper.class.getSimpleName();
|
private static final String EXTENDED_LOGGING_TAG = WebRTCWrapper.class.getSimpleName();
|
||||||
|
|
||||||
private final ExecutorService executorService = Executors.newSingleThreadExecutor();
|
private final ExecutorService executorService = Executors.newSingleThreadExecutor();
|
||||||
|
private final ExecutorService localDescriptionExecutorService =
|
||||||
|
Executors.newSingleThreadExecutor();
|
||||||
|
|
||||||
private static final Set<String> HARDWARE_AEC_BLACKLIST =
|
private static final Set<String> HARDWARE_AEC_BLACKLIST =
|
||||||
new ImmutableSet.Builder<String>()
|
new ImmutableSet.Builder<String>()
|
||||||
|
@ -260,7 +261,8 @@ public class WebRTCWrapper {
|
||||||
Preconditions.checkNotNull(media);
|
Preconditions.checkNotNull(media);
|
||||||
Preconditions.checkArgument(
|
Preconditions.checkArgument(
|
||||||
media.size() > 0, "media can not be empty when initializing peer connection");
|
media.size() > 0, "media can not be empty when initializing peer connection");
|
||||||
final boolean setUseHardwareAcousticEchoCanceler = !HARDWARE_AEC_BLACKLIST.contains(Build.MODEL);
|
final boolean setUseHardwareAcousticEchoCanceler =
|
||||||
|
!HARDWARE_AEC_BLACKLIST.contains(Build.MODEL);
|
||||||
Log.d(
|
Log.d(
|
||||||
Config.LOGTAG,
|
Config.LOGTAG,
|
||||||
String.format(
|
String.format(
|
||||||
|
@ -412,21 +414,20 @@ public class WebRTCWrapper {
|
||||||
requirePeerConnection().setConfiguration(buildConfiguration(iceServers));
|
requirePeerConnection().setConfiguration(buildConfiguration(iceServers));
|
||||||
}
|
}
|
||||||
|
|
||||||
void restartIce() {
|
void restartIceAsync() {
|
||||||
executorService.execute(
|
this.execute(this::restartIce);
|
||||||
() -> {
|
}
|
||||||
final PeerConnection peerConnection;
|
|
||||||
try {
|
private void restartIce() {
|
||||||
peerConnection = requirePeerConnection();
|
final PeerConnection peerConnection;
|
||||||
} catch (final PeerConnectionNotInitialized e) {
|
try {
|
||||||
Log.w(
|
peerConnection = requirePeerConnection();
|
||||||
EXTENDED_LOGGING_TAG,
|
} catch (final PeerConnectionNotInitialized e) {
|
||||||
"PeerConnection vanished before we could execute restart");
|
Log.w(EXTENDED_LOGGING_TAG, "PeerConnection vanished before we could execute restart");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setIsReadyToReceiveIceCandidates(false);
|
setIsReadyToReceiveIceCandidates(false);
|
||||||
peerConnection.restartIce();
|
peerConnection.restartIce();
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setIsReadyToReceiveIceCandidates(final boolean ready) {
|
public void setIsReadyToReceiveIceCandidates(final boolean ready) {
|
||||||
|
@ -587,12 +588,15 @@ public class WebRTCWrapper {
|
||||||
}
|
}
|
||||||
|
|
||||||
private ListenableFuture<SessionDescription> getLocalDescriptionFuture() {
|
private ListenableFuture<SessionDescription> getLocalDescriptionFuture() {
|
||||||
return Futures.submit(() -> {
|
return Futures.submit(
|
||||||
final SessionDescription description = requirePeerConnection().getLocalDescription();
|
() -> {
|
||||||
Log.d(EXTENDED_LOGGING_TAG, "local description:");
|
final SessionDescription description =
|
||||||
logDescription(description);
|
requirePeerConnection().getLocalDescription();
|
||||||
return description;
|
Log.d(EXTENDED_LOGGING_TAG, "local description:");
|
||||||
},executorService);
|
logDescription(description);
|
||||||
|
return description;
|
||||||
|
},
|
||||||
|
localDescriptionExecutorService);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void logDescription(final SessionDescription sessionDescription) {
|
public static void logDescription(final SessionDescription sessionDescription) {
|
||||||
|
@ -703,7 +707,7 @@ public class WebRTCWrapper {
|
||||||
}
|
}
|
||||||
|
|
||||||
void execute(final Runnable command) {
|
void execute(final Runnable command) {
|
||||||
executorService.execute(command);
|
this.executorService.execute(command);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void switchSpeakerPhonePreference(AppRTCAudioManager.SpeakerPhonePreference preference) {
|
public void switchSpeakerPhonePreference(AppRTCAudioManager.SpeakerPhonePreference preference) {
|
||||||
|
|
Loading…
Reference in a new issue