diff --git a/examples/androidapp/src/org/appspot/apprtc/CallActivity.java b/examples/androidapp/src/org/appspot/apprtc/CallActivity.java index 45bc26b64d..820808805f 100644 --- a/examples/androidapp/src/org/appspot/apprtc/CallActivity.java +++ b/examples/androidapp/src/org/appspot/apprtc/CallActivity.java @@ -139,9 +139,8 @@ public class CallActivity extends Activity implements AppRTCClient.SignalingEven // Peer connection statistics callback period in ms. private static final int STAT_CALLBACK_PERIOD = 1000; - private class ProxyRenderer - implements VideoRenderer.Callbacks, VideoSink { - private T target; + private static class ProxyRenderer implements VideoRenderer.Callbacks { + private VideoRenderer.Callbacks target; @Override synchronized public void renderFrame(VideoRenderer.I420Frame frame) { @@ -154,6 +153,14 @@ public class CallActivity extends Activity implements AppRTCClient.SignalingEven target.renderFrame(frame); } + synchronized public void setTarget(VideoRenderer.Callbacks target) { + this.target = target; + } + } + + private static class ProxyVideoSink implements VideoSink { + private VideoSink target; + @Override synchronized public void onFrame(VideoFrame frame) { if (target == null) { @@ -164,13 +171,13 @@ public class CallActivity extends Activity implements AppRTCClient.SignalingEven target.onFrame(frame); } - synchronized public void setTarget(T target) { + synchronized public void setTarget(VideoSink target) { this.target = target; } } private final ProxyRenderer remoteProxyRenderer = new ProxyRenderer(); - private final ProxyRenderer localProxyRenderer = new ProxyRenderer(); + private final ProxyVideoSink localProxyVideoSink = new ProxyVideoSink(); private PeerConnectionClient peerConnectionClient = null; private AppRTCClient appRtcClient; private SignalingParameters signalingParameters; @@ -211,8 +218,7 @@ public class CallActivity extends Activity implements AppRTCClient.SignalingEven // adding content. requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().addFlags(LayoutParams.FLAG_FULLSCREEN | LayoutParams.FLAG_KEEP_SCREEN_ON - | LayoutParams.FLAG_DISMISS_KEYGUARD | LayoutParams.FLAG_SHOW_WHEN_LOCKED - | LayoutParams.FLAG_TURN_SCREEN_ON); + | LayoutParams.FLAG_SHOW_WHEN_LOCKED | LayoutParams.FLAG_TURN_SCREEN_ON); getWindow().getDecorView().setSystemUiVisibility(getSystemUiVisibility()); setContentView(R.layout.activity_call); @@ -630,7 +636,7 @@ public class CallActivity extends Activity implements AppRTCClient.SignalingEven private void disconnect() { activityRunning = false; remoteProxyRenderer.setTarget(null); - localProxyRenderer.setTarget(null); + localProxyVideoSink.setTarget(null); if (appRtcClient != null) { appRtcClient.disconnectFromRoom(); appRtcClient = null; @@ -741,7 +747,7 @@ public class CallActivity extends Activity implements AppRTCClient.SignalingEven private void setSwappedFeeds(boolean isSwappedFeeds) { Logging.d(TAG, "setSwappedFeeds: " + isSwappedFeeds); this.isSwappedFeeds = isSwappedFeeds; - localProxyRenderer.setTarget(isSwappedFeeds ? fullscreenRenderer : pipRenderer); + localProxyVideoSink.setTarget(isSwappedFeeds ? fullscreenRenderer : pipRenderer); remoteProxyRenderer.setTarget(isSwappedFeeds ? pipRenderer : fullscreenRenderer); fullscreenRenderer.setMirror(isSwappedFeeds); pipRenderer.setMirror(!isSwappedFeeds); @@ -760,7 +766,7 @@ public class CallActivity extends Activity implements AppRTCClient.SignalingEven videoCapturer = createVideoCapturer(); } peerConnectionClient.createPeerConnection( - localProxyRenderer, remoteRenderers, videoCapturer, signalingParameters); + localProxyVideoSink, remoteRenderers, videoCapturer, signalingParameters); if (signalingParameters.initiator) { logAndToast("Creating OFFER..."); diff --git a/examples/androidapp/src/org/appspot/apprtc/RoomParametersFetcher.java b/examples/androidapp/src/org/appspot/apprtc/RoomParametersFetcher.java index 1556a69bc0..606987d4be 100644 --- a/examples/androidapp/src/org/appspot/apprtc/RoomParametersFetcher.java +++ b/examples/androidapp/src/org/appspot/apprtc/RoomParametersFetcher.java @@ -10,25 +10,22 @@ package org.appspot.apprtc; -import org.appspot.apprtc.AppRTCClient.SignalingParameters; -import org.appspot.apprtc.util.AsyncHttpURLConnection; -import org.appspot.apprtc.util.AsyncHttpURLConnection.AsyncHttpEvents; - import android.util.Log; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.webrtc.IceCandidate; -import org.webrtc.PeerConnection; -import org.webrtc.SessionDescription; - import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.LinkedList; import java.util.Scanner; +import org.appspot.apprtc.AppRTCClient.SignalingParameters; +import org.appspot.apprtc.util.AsyncHttpURLConnection; +import org.appspot.apprtc.util.AsyncHttpURLConnection.AsyncHttpEvents; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.webrtc.IceCandidate; +import org.webrtc.PeerConnection; +import org.webrtc.SessionDescription; /** * AsyncTask that converts an AppRTC room URL into the set of signaling @@ -133,9 +130,11 @@ public class RoomParametersFetcher { boolean isTurnPresent = false; for (PeerConnection.IceServer server : iceServers) { Log.d(TAG, "IceServer: " + server); - if (server.uri.startsWith("turn:")) { - isTurnPresent = true; - break; + for (String uri : server.urls) { + if (uri.startsWith("turn:")) { + isTurnPresent = true; + break; + } } } // Request TURN servers. diff --git a/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioTrack.java b/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioTrack.java index 148632b29b..26d83102bd 100644 --- a/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioTrack.java +++ b/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioTrack.java @@ -267,9 +267,8 @@ public class WebRtcAudioTrack { sampleRate, channelConfig, minBufferSizeInBytes); } else { // Use default constructor for API levels below 21. - // Note that, this constructor will be deprecated in API level O (25). - audioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, sampleRate, channelConfig, - AudioFormat.ENCODING_PCM_16BIT, minBufferSizeInBytes, AudioTrack.MODE_STREAM); + audioTrack = + createAudioTrackOnLowerThanLollipop(sampleRate, channelConfig, minBufferSizeInBytes); } } catch (IllegalArgumentException e) { reportWebRtcAudioTrackInitError(e.getMessage()); @@ -369,8 +368,8 @@ public class WebRtcAudioTrack { // It allows certain platforms or routing policies to use this information for more // refined volume or routing decisions. @TargetApi(21) - private AudioTrack createAudioTrackOnLollipopOrHigher( - int sampleRateInHz, int channelConfig, int bufferSizeInBytes) { + private static AudioTrack createAudioTrackOnLollipopOrHigher( + int sampleRateInHz, int channelConfig, int bufferSizeInBytes) { Logging.d(TAG, "createAudioTrackOnLollipopOrHigher"); // TODO(henrika): use setPerformanceMode(int) with PERFORMANCE_MODE_LOW_LATENCY to control // performance when Android O is supported. Add some logging in the mean time. @@ -399,6 +398,13 @@ public class WebRtcAudioTrack { AudioManager.AUDIO_SESSION_ID_GENERATE); } + @SuppressWarnings("deprecation") // Deprecated in API level 25. + private static AudioTrack createAudioTrackOnLowerThanLollipop( + int sampleRateInHz, int channelConfig, int bufferSizeInBytes) { + return new AudioTrack(AudioManager.STREAM_VOICE_CALL, sampleRateInHz, channelConfig, + AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes, AudioTrack.MODE_STREAM); + } + @TargetApi(24) private void logMainParametersExtended() { if (WebRtcAudioUtils.runningOnMarshmallowOrHigher()) { diff --git a/sdk/android/src/java/org/webrtc/MediaCodecUtils.java b/sdk/android/src/java/org/webrtc/MediaCodecUtils.java index c3134235ef..8c829b8d0b 100644 --- a/sdk/android/src/java/org/webrtc/MediaCodecUtils.java +++ b/sdk/android/src/java/org/webrtc/MediaCodecUtils.java @@ -17,6 +17,8 @@ import android.media.MediaCodecInfo.CodecCapabilities; /** Container class for static constants and helpers used with MediaCodec. */ @TargetApi(18) +// We are forced to use the old API because we want to support API level < 21. +@SuppressWarnings("deprecation") class MediaCodecUtils { private static final String TAG = "MediaCodecUtils";