瀏覽代碼

Magic

Signed-off-by: Mario Danic <mario@lovelyhq.com>
Mario Danic 7 年之前
父節點
當前提交
17aa050669

+ 50 - 43
app/src/main/java/com/nextcloud/talk/activities/CallActivity.java

@@ -113,6 +113,10 @@ public class CallActivity extends AppCompatActivity {
     @BindView(R.id.pip_video_view)
     SurfaceViewRenderer pipVideoView;
 
+    @BindView(R.id.full_screen_surface_view)
+    SurfaceViewRenderer fullScreenVideoView;
+
+
     @BindView(R.id.remote_renderers_layout)
     LinearLayout remoteRenderersLayout;
 
@@ -233,6 +237,13 @@ public class CallActivity extends AppCompatActivity {
         pipVideoView.setZOrderMediaOverlay(true);
         pipVideoView.setEnableHardwareScaler(true);
         pipVideoView.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT);
+
+        fullScreenVideoView.setMirror(true);
+        fullScreenVideoView.init(rootEglBase.getEglBaseContext(), null);
+        fullScreenVideoView.setZOrderMediaOverlay(true);
+        fullScreenVideoView.setEnableHardwareScaler(true);
+        fullScreenVideoView.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FILL);
+
     }
 
     public void start() {
@@ -283,7 +294,7 @@ public class CallActivity extends AppCompatActivity {
         videoCapturerAndroid.startCapture(px, px, 30);
 
         //create a videoRenderer based on SurfaceViewRenderer instance
-        localRenderer = new VideoRenderer(pipVideoView);
+        localRenderer = new VideoRenderer(fullScreenVideoView);
         // And finally, with our VideoRenderer ready, we
         // can add our renderer to the VideoTrack.
         localVideoTrack.addRenderer(localRenderer);
@@ -311,8 +322,8 @@ public class CallActivity extends AppCompatActivity {
                     @Override
                     public void onNext(SignalingSettingsOverall signalingSettingsOverall) {
                         IceServer iceServer;
-                        for(int i = 0; i < signalingSettingsOverall.getOcs().getSettings().getStunServers().size();
-                            i++) {
+                        for (int i = 0; i < signalingSettingsOverall.getOcs().getSettings().getStunServers().size();
+                             i++) {
                             iceServer = signalingSettingsOverall.getOcs().getSettings().getStunServers().get(i);
                             if (TextUtils.isEmpty(iceServer.getUsername()) || TextUtils.isEmpty(iceServer
                                     .getCredential())) {
@@ -528,9 +539,9 @@ public class CallActivity extends AppCompatActivity {
 
         for (HashMap<String, String> participant : users) {
             Object inCallObject = participant.get("inCall");
-            if (!participant.get("sessionId").equals(callSession) && (boolean)inCallObject) {
+            if (!participant.get("sessionId").equals(callSession) && (boolean) inCallObject) {
                 newSessions.add(participant.get("sessionId"));
-            } else if (!participant.get("sessionId").equals(callSession) && !(boolean)inCallObject) {
+            } else if (!participant.get("sessionId").equals(callSession) && !(boolean) inCallObject) {
                 oldSesssions.add(participant.get("sessionId"));
             }
         }
@@ -684,47 +695,43 @@ public class CallActivity extends AppCompatActivity {
     }
 
     private void gotRemoteStream(MediaStream stream, String session) {
-        //we have remote video stream. add to the renderer.
-        removeMediaStream(session);
-        if (stream.videoTracks.size() < 2 && stream.audioTracks.size() < 2) {
-            if (stream.videoTracks.size() == 1) {
+        if (fullScreenVideoView.getVisibility() != View.GONE) {
+            fullScreenVideoView.setVisibility(View.GONE);
+            remoteRenderersLayout.setVisibility(View.VISIBLE);
+            pipVideoView.setVisibility(View.VISIBLE);
+            localRenderer = new VideoRenderer(pipVideoView);
+            localVideoTrack.removeRenderer(localRenderer);
+            localRenderer = new VideoRenderer(pipVideoView);
+            localVideoTrack.addRenderer(localRenderer);
+            fullScreenVideoView.setVisibility(View.GONE);
 
-                VideoTrack videoTrack = stream.videoTracks.get(0);
-                runOnUiThread(new Runnable() {
-                    @Override
-                    public void run() {
-                        if (stream.videoTracks.size() == 1) {
-                            try {
-                                RelativeLayout relativeLayout = (RelativeLayout)
-                                        getLayoutInflater().inflate(R.layout.surface_renderer, remoteRenderersLayout,
-                                                false);
-                                relativeLayout.setTag(session);
-                                SurfaceViewRenderer surfaceViewRenderer = relativeLayout.findViewById(R.id
-                                        .surface_view);
-                                surfaceViewRenderer.setMirror(false);
-                                surfaceViewRenderer.init(rootEglBase.getEglBaseContext(), null);
-                                surfaceViewRenderer.setZOrderMediaOverlay(true);
-                                surfaceViewRenderer.setEnableHardwareScaler(true);
-                                surfaceViewRenderer.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT);
-                                VideoRenderer remoteRenderer = new VideoRenderer(surfaceViewRenderer);
-                                videoTrack.addRenderer(remoteRenderer);
-                                remoteRenderersLayout.addView(relativeLayout);
-                                relativeLayout.invalidate();
-                                gotNick(session, getPeerConnectionWrapperForSessionId(session).getNick());
-                            } catch (Exception e) {
-                                e.printStackTrace();
-                            }
-                        }
-                    }
-                });
+        }
 
-            }
+        removeMediaStream(session);
 
-            if (stream.audioTracks.size() == 1) {
-                AudioTrack audioTrack = stream.audioTracks.get(0);
+        if (stream.videoTracks.size() == 1) {
+            VideoTrack videoTrack = stream.videoTracks.get(0);
+            try {
+                RelativeLayout relativeLayout = (RelativeLayout)
+                        getLayoutInflater().inflate(R.layout.surface_renderer, remoteRenderersLayout,
+                                false);
+                relativeLayout.setTag(session);
+                SurfaceViewRenderer surfaceViewRenderer = relativeLayout.findViewById(R.id
+                        .surface_view);
+                surfaceViewRenderer.setMirror(false);
+                surfaceViewRenderer.init(rootEglBase.getEglBaseContext(), null);
+                surfaceViewRenderer.setZOrderMediaOverlay(true);
+                surfaceViewRenderer.setEnableHardwareScaler(true);
+                surfaceViewRenderer.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT);
+                VideoRenderer remoteRenderer = new VideoRenderer(surfaceViewRenderer);
+                videoTrack.addRenderer(remoteRenderer);
+                remoteRenderersLayout.addView(relativeLayout);
+                relativeLayout.invalidate();
+                gotNick(session, getPeerConnectionWrapperForSessionId(session).getNick());
+            } catch (Exception e) {
+                Log.d(TAG, "Failed to create a new video view");
             }
         }
-
     }
 
     @Override
@@ -787,7 +794,7 @@ public class CallActivity extends AppCompatActivity {
         }
     }
 
-    @Subscribe(threadMode = ThreadMode.BACKGROUND)
+    @Subscribe(threadMode = ThreadMode.MAIN)
     public void onMessageEvent(MediaStreamEvent mediaStreamEvent) {
         if (mediaStreamEvent.getMediaStream() != null) {
             gotRemoteStream(mediaStreamEvent.getMediaStream(), mediaStreamEvent.getSession());
@@ -878,7 +885,7 @@ public class CallActivity extends AppCompatActivity {
         // Checks the orientation of the screen
         if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
             remoteRenderersLayout.setOrientation(LinearLayout.HORIZONTAL);
-        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
+        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
             remoteRenderersLayout.setOrientation(LinearLayout.VERTICAL);
         }
 

+ 9 - 2
app/src/main/res/layout/activity_call.xml

@@ -27,12 +27,18 @@
                 android:fitsSystemWindows="true"
                 tools:context=".activities.CallActivity">
 
+    <org.webrtc.SurfaceViewRenderer
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:id="@+id/full_screen_surface_view"/>
+
     <LinearLayout
         android:id="@+id/remote_renderers_layout"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:animateLayoutChanges="true"
-        android:orientation="vertical">
+        android:orientation="vertical"
+        android:visibility="invisible">
     </LinearLayout>
 
     <org.webrtc.SurfaceViewRenderer
@@ -41,6 +47,7 @@
         android:layout_height="120dp"
         android:layout_alignParentBottom="true"
         android:layout_alignParentEnd="true"
-        android:layout_margin="16dp"/>
+        android:layout_margin="16dp"
+        android:visibility="invisible"/>
 
 </RelativeLayout>