// Checks if video source can be restarted - simulate app goes to // background and back to foreground. @SmallTest public void testVideoSourceRestart() throws InterruptedException { Log.d(TAG, "testVideoSourceRestart"); loopback = true; MockRenderer localRenderer = new MockRenderer(EXPECTED_VIDEO_FRAMES, LOCAL_RENDERER_NAME); MockRenderer remoteRenderer = new MockRenderer(EXPECTED_VIDEO_FRAMES, REMOTE_RENDERER_NAME); pcClient = createPeerConnectionClient( localRenderer, remoteRenderer, createParametersForVideoCall(VIDEO_CODEC_VP8, false), null); // Wait for local SDP, rename it to answer and set as remote SDP. assertTrue("Local SDP was not set.", waitForLocalSDP(WAIT_TIMEOUT)); SessionDescription remoteSdp = new SessionDescription( SessionDescription.Type.fromCanonicalForm("answer"), localSdp.description); pcClient.setRemoteDescription(remoteSdp); // Wait for ICE connection. assertTrue("ICE connection failure.", waitForIceConnected(ICE_CONNECTION_WAIT_TIMEOUT)); // Check that local and remote video frames were rendered. assertTrue( "Local video frames were not rendered before video restart.", localRenderer.waitForFramesRendered(WAIT_TIMEOUT)); assertTrue( "Remote video frames were not rendered before video restart.", remoteRenderer.waitForFramesRendered(WAIT_TIMEOUT)); // Stop and then start video source a few times. for (int i = 0; i < VIDEO_RESTART_ATTEMPTS; i++) { pcClient.stopVideoSource(); Thread.sleep(VIDEO_RESTART_TIMEOUT); pcClient.startVideoSource(); // Reset video renders and check that local and remote video frames // were rendered after video restart. localRenderer.reset(EXPECTED_VIDEO_FRAMES); remoteRenderer.reset(EXPECTED_VIDEO_FRAMES); assertTrue( "Local video frames were not rendered after video restart.", localRenderer.waitForFramesRendered(WAIT_TIMEOUT)); assertTrue( "Remote video frames were not rendered after video restart.", remoteRenderer.waitForFramesRendered(WAIT_TIMEOUT)); } pcClient.close(); assertTrue(waitForPeerConnectionClosed(WAIT_TIMEOUT)); Log.d(TAG, "testVideoSourceRestart done."); }