Skip to content

Commit

Permalink
clean up, modify sample activities
Browse files Browse the repository at this point in the history
  • Loading branch information
lastpeony committed Jun 6, 2024
1 parent ce3823b commit 278d0d8
Show file tree
Hide file tree
Showing 19 changed files with 442 additions and 137 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -272,11 +272,15 @@ void publish(String streamId, String token, boolean videoCallEnabled, boolean au
boolean isConnected();

/**
* Destroy webrtc client. Stops reconnection runnable. Ideally call this when you are done with streaming.
* Stops reconnection runnable. If called reconnection mechanism will be stopped.
* Ideally call this when you are done with streaming.
*/
void destroy();

void stopReconnector();

/**
* Close websocket connection to Ant Media Server.
*/
void closeWebsocket();

StatsCollector getStatsCollector();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -768,7 +768,6 @@ public void connectWebSocket() {
wsHandler = new WebSocketHandler(this, handler);
wsHandler.connect(config.serverUrl);
}

}

public DisplayMetrics getDisplayMetrics() {
Expand Down Expand Up @@ -2562,23 +2561,32 @@ public boolean isConnected(){
return wsHandler.isConnected();
}

public void destroy(){
private void releaseRemoteRenderers(){
for (SurfaceViewRenderer remoteVideoRenderer : config.remoteVideoRenderers) {
if(remoteVideoRenderer.getTag() != null) {
releaseRenderer(remoteVideoRenderer);
}
}
}

public void closeWebsocket(){
if(wsHandler == null){
return;
}
wsHandler.disconnect(true);
wsHandler.stopReconnector();
wsHandler = null;
}

public void stopReconnector(){
if(peerReconnectionHandler != null){
peerReconnectionHandler.removeCallbacksAndMessages(null);
}

wsHandler.stopReconnector();
}

private void releaseRemoteRenderers(){
for (SurfaceViewRenderer remoteVideoRenderer : config.remoteVideoRenderers) {
if(remoteVideoRenderer.getTag() != null) {
releaseRenderer(remoteVideoRenderer);
}
if(wsHandler == null){
return;
}

wsHandler.stopReconnector();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import java.util.Arrays;
import java.util.List;

import io.antmedia.webrtcandroidframework.core.PermissionsHandler;

public class PermissionHandler {

Expand Down Expand Up @@ -44,7 +43,6 @@ public static boolean checkCameraPermissions(Activity activity){
requestPermissions(activity, permissions, CAMERA_PERMISSION_REQUEST_CODE);
return false;
}

}

public static boolean checkPublishPermissions(Activity activity, boolean bluetoothEnabled){
Expand Down Expand Up @@ -90,7 +88,7 @@ public static boolean hasPermissions(Activity activity, List<String> permissions
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(activity, permission)
!= PackageManager.PERMISSION_GRANTED) {
Log.w(PermissionsHandler.class.getSimpleName(), "Permission required:"+permission);
Log.w(PermissionHandler.class.getSimpleName(), "Permission required:"+permission);
return false;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.antmedia.webrtc_android_sample_app.advanced;

import android.content.Context;
import android.content.pm.PackageManager;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Bundle;
Expand All @@ -9,7 +10,9 @@
import android.widget.Button;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;

import org.json.JSONException;
Expand All @@ -24,6 +27,7 @@
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

import io.antmedia.webrtc_android_sample_app.PermissionHandler;
import io.antmedia.webrtc_android_sample_app.R;
import io.antmedia.webrtc_android_sample_app.TestableActivity;
import io.antmedia.webrtc_android_sample_app.basic.SettingsActivity;
Expand All @@ -35,7 +39,7 @@

public class ConferenceActivityWithSpeakerIndicator extends TestableActivity {
private TextView broadcastingView;
private View joinButton;
private Button joinButton;
private String streamId;
private IWebRTCClient webRTCClient;
private String roomId;
Expand All @@ -59,18 +63,28 @@ public class ConferenceActivityWithSpeakerIndicator extends TestableActivity {
private ScheduledFuture localAudioCheckerFuture;
private ScheduledExecutorService localAudioCheckerExecutor;

String serverUrl = "";

SurfaceViewRenderer publisherRenderer;
SurfaceViewRenderer player1Renderer;
SurfaceViewRenderer player2Renderer;
SurfaceViewRenderer player3Renderer;
SurfaceViewRenderer player4Renderer;
boolean bluetoothEnabled = false;


@RequiresApi(api = Build.VERSION_CODES.M)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_conference_with_speaker_indicators);

SurfaceViewRenderer publisherRenderer = findViewById(R.id.publish_view_renderer);
publisherRenderer = findViewById(R.id.publish_view_renderer);

SurfaceViewRenderer player1Renderer = findViewById(R.id.play_view_renderer1);
SurfaceViewRenderer player2Renderer = findViewById(R.id.play_view_renderer2);
SurfaceViewRenderer player3Renderer = findViewById(R.id.play_view_renderer3);
SurfaceViewRenderer player4Renderer = findViewById(R.id.play_view_renderer4);
player1Renderer = findViewById(R.id.play_view_renderer1);
player2Renderer = findViewById(R.id.play_view_renderer2);
player3Renderer = findViewById(R.id.play_view_renderer3);
player4Renderer = findViewById(R.id.play_view_renderer4);

publisherSpeakingIndicatorText = findViewById(R.id.publisher_speaking_indicator_text);
player1SpeakingIndicatorText = findViewById(R.id.player1_speaking_indicator_text);
Expand All @@ -85,7 +99,7 @@ protected void onCreate(Bundle savedInstanceState) {
audioButton = findViewById(R.id.control_audio_button);
videoButton = findViewById(R.id.control_video_button);

String serverUrl = sharedPreferences.getString(getString(R.string.serverAddress), SettingsActivity.DEFAULT_WEBSOCKET_URL);
serverUrl = sharedPreferences.getString(getString(R.string.serverAddress), SettingsActivity.DEFAULT_WEBSOCKET_URL);
roomId = sharedPreferences.getString(getString(R.string.roomId), SettingsActivity.DEFAULT_ROOM_NAME);
streamId = "streamId" + (int)(Math.random()*9999);

Expand All @@ -98,38 +112,52 @@ protected void onCreate(Bundle savedInstanceState) {
publisherRenderer.setVisibility(b ? View.GONE : View.VISIBLE);
});

if(PermissionHandler.checkCameraPermissions(this)){
createWebRTCClient();

joinButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
joinLeaveRoom();
}
});
}


}

public void createWebRTCClient(){
DefaultConferenceWebRTCListener defaultConferenceListener = createWebRTCListener(roomId, streamId);

webRTCClient = IWebRTCClient.builder()
.addRemoteVideoRenderer(player1Renderer, player2Renderer, player3Renderer, player4Renderer)
.setLocalVideoRenderer(publisherRenderer)
.setServerUrl(serverUrl)
.setBluetoothEnabled(bluetoothEnabled)
.setActivity(this)
.setWebRTCListener(defaultConferenceListener)
.setDataChannelObserver(createDatachannelObserver())
.build();

joinButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
joinLeaveRoom(v);
}
});
}

public void joinLeaveRoom(View v) {

public void joinLeaveRoom() {
incrementIdle();
if (!webRTCClient.isStreaming(streamId)) {
((Button) v).setText("Leave");
joinButton.setText("Leave");
Log.i(getClass().getSimpleName(), "Calling join");

if(playOnly) {
webRTCClient.joinToConferenceRoom(roomId);
}
else {
webRTCClient.joinToConferenceRoom(roomId, streamId);
if(PermissionHandler.checkPublishPermissions(this, bluetoothEnabled)) {
webRTCClient.joinToConferenceRoom(roomId, streamId);
}
}
}
else {
((Button) v).setText("Join");
joinButton.setText("Join");
Log.i(getClass().getSimpleName(), "Calling leave");
if(localAudioCheckerFuture != null){
localAudioCheckerFuture.cancel(true);
Expand Down Expand Up @@ -251,12 +279,55 @@ public void startLocalAudioChecker() {
@Override
protected void onDestroy() {
super.onDestroy();

if(localAudioCheckerFuture != null){
localAudioCheckerFuture.cancel(true);
}

if(localAudioCheckerExecutor != null){
localAudioCheckerExecutor.shutdown();
}

if(webRTCClient != null){
webRTCClient.stopReconnector();
}
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);

if(requestCode == PermissionHandler.CAMERA_PERMISSION_REQUEST_CODE){
boolean allPermissionsGranted = true;
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
allPermissionsGranted = false;
break;
}
}
if (allPermissionsGranted) {
createWebRTCClient();
} else {
Toast.makeText(this,"Camera permissions are not granted. Cannot initialize.", Toast.LENGTH_LONG).show();
}


}else if(requestCode == PermissionHandler.PUBLISH_PERMISSION_REQUEST_CODE){

boolean allPermissionsGranted = true;
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
allPermissionsGranted = false;
break;
}
}

if (allPermissionsGranted) {
joinLeaveRoom();
} else {
Toast.makeText(this,"Publish permissions are not granted.", Toast.LENGTH_LONG).show();
}
}
}

public void controlAudio(View view) {
Expand Down
Loading

0 comments on commit 278d0d8

Please sign in to comment.