Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
Mario Danic 2017-12-08 10:05:52 +01:00
parent 9f8d60fce8
commit 17aa050669
2 changed files with 61 additions and 47 deletions

View File

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

View File

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