diff --git a/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/api/IWebRTCClient.java b/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/api/IWebRTCClient.java index 78362306..8a7b7b42 100644 --- a/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/api/IWebRTCClient.java +++ b/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/api/IWebRTCClient.java @@ -54,9 +54,10 @@ static WebRTCClientBuilder builder() { * @param subscriberCode: code of the subscriber * @param streamName: name of the stream * @param mainTrackId: id of the main track + * @param metaData: metaData of the stream */ void publish(String streamId, String token, boolean videoCallEnabled, boolean audioCallEnabled, - String subscriberId, String subscriberCode, String streamName, String mainTrackId); + String subscriberId, String subscriberCode, String streamName, String mainTrackId, String metaData); /** @@ -112,8 +113,9 @@ void publish(String streamId, String token, boolean videoCallEnabled, boolean au * @param subscriberId: id of the subscriber * @param subscriberCode: code of the subscriber * @param streamName: name of the stream + * @param metaData: metaData of the stream */ - void joinToConferenceRoom(String roomId, String streamId, boolean videoCallEnabled, boolean audioCallEnabled, String token, String subscriberId, String subscriberCode, String streamName); + void joinToConferenceRoom(String roomId, String streamId, boolean videoCallEnabled, boolean audioCallEnabled, String token, String subscriberId, String subscriberCode, String streamName, String metaData); /** * This is used to join a conference room as player diff --git a/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/core/WebRTCClient.java b/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/core/WebRTCClient.java index 872f0241..876635ba 100644 --- a/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/core/WebRTCClient.java +++ b/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/core/WebRTCClient.java @@ -283,7 +283,7 @@ public void createReconnectorRunnables() { Log.d(TAG, "Reconnect attempt for publish"); wsHandler.stop(peerInfo.id); - wsHandler.startPublish(peerInfo.id, peerInfo.token, peerInfo.videoCallEnabled, peerInfo.audioCallEnabled, peerInfo.subscriberId, peerInfo.subscriberCode, peerInfo.streamName, peerInfo.mainTrackId); + wsHandler.startPublish(peerInfo.id, peerInfo.token, peerInfo.videoCallEnabled, peerInfo.audioCallEnabled, peerInfo.subscriberId, peerInfo.subscriberCode, peerInfo.streamName, peerInfo.mainTrackId, peerInfo.metaData); } @@ -360,7 +360,7 @@ public void createReconnectorRunnables() { Log.d(TAG, "Reconnect attempt for publish"); wsHandler.stop(peerInfo.id); - wsHandler.startPublish(peerInfo.id, peerInfo.token, peerInfo.videoCallEnabled, peerInfo.audioCallEnabled, peerInfo.subscriberId, peerInfo.subscriberCode, peerInfo.streamName, peerInfo.mainTrackId); + wsHandler.startPublish(peerInfo.id, peerInfo.token, peerInfo.videoCallEnabled, peerInfo.audioCallEnabled, peerInfo.subscriberId, peerInfo.subscriberCode, peerInfo.streamName, peerInfo.mainTrackId, peerInfo.metaData); } else if (peerInfo.mode.equals(Mode.PLAY)) { @@ -431,10 +431,11 @@ public void joinToConferenceRoom(String roomId, String streamId) { "", "", "", - roomId); + roomId, + null); } - public void joinToConferenceRoom(String roomId, String streamId, boolean videoCallEnabled, boolean audioCallEnabled, String token, String subscriberId, String subscriberCode, String streamName) { + public void joinToConferenceRoom(String roomId, String streamId, boolean videoCallEnabled, boolean audioCallEnabled, String token, String subscriberId, String subscriberCode, String streamName, String metaData) { this.roomId = roomId; @@ -443,7 +444,8 @@ public void joinToConferenceRoom(String roomId, String streamId, boolean videoCa subscriberId, subscriberCode, streamName, - roomId); + roomId, + metaData); } public void joinToConferenceRoom(String roomId) { @@ -978,7 +980,7 @@ private void publishPlayIfRequested() { Mode peerMode = peerInfo.mode; if (peerMode == Mode.PUBLISH && peerInfo.peerConnection == null) { Log.i(TAG, "Processing publish request for peer streamId: " + peerInfo.id); - wsHandler.startPublish(peerInfo.id, peerInfo.token, peerInfo.videoCallEnabled, peerInfo.audioCallEnabled, peerInfo.subscriberId, peerInfo.subscriberCode, peerInfo.streamName, peerInfo.mainTrackId); + wsHandler.startPublish(peerInfo.id, peerInfo.token, peerInfo.videoCallEnabled, peerInfo.audioCallEnabled, peerInfo.subscriberId, peerInfo.subscriberCode, peerInfo.streamName, peerInfo.mainTrackId, peerInfo.metaData); } if (peerMode == Mode.PLAY && peerInfo.peerConnection == null) { @@ -990,12 +992,12 @@ private void publishPlayIfRequested() { public void publish(String streamId) { publish(streamId, null, true, true, - null, null, streamId, null); + null, null, streamId, null, null); } public void publish(String streamId, String token, boolean videoCallEnabled, boolean audioCallEnabled, - String subscriberId, String subscriberCode, String streamName, String mainTrackId) { + String subscriberId, String subscriberCode, String streamName, String mainTrackId, String metaData) { Log.i(TAG, "Publish: " + streamId); this.handler.post(() -> { @@ -1004,7 +1006,7 @@ public void publish(String streamId, String token, boolean videoCallEnabled, boo } }); - createPeerInfo(streamId, token, videoCallEnabled, audioCallEnabled, subscriberId, subscriberCode, streamName, mainTrackId, null, Mode.PUBLISH); + createPeerInfo(streamId, token, videoCallEnabled, audioCallEnabled, subscriberId, subscriberCode, streamName, mainTrackId, metaData, Mode.PUBLISH); init(); if(!PermissionHandler.checkPublishPermissions(config.activity, config.bluetoothEnabled)){ @@ -1017,7 +1019,7 @@ public void publish(String streamId, String token, boolean videoCallEnabled, boo if (isWebSocketConnected()) { Log.i(TAG, "Publish request sent through ws for stream: " + streamId); - wsHandler.startPublish(streamId, token, videoCallEnabled, audioCallEnabled, subscriberId, subscriberCode, streamName, mainTrackId); + wsHandler.startPublish(streamId, token, videoCallEnabled, audioCallEnabled, subscriberId, subscriberCode, streamName, mainTrackId, metaData); } else { Log.w(TAG, "Websocket is not connected. Set publish requested. It will be processed when ws is connected."); } diff --git a/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketConstants.java b/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketConstants.java index b8a30604..a0376636 100644 --- a/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketConstants.java +++ b/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketConstants.java @@ -451,4 +451,9 @@ private WebSocketConstants() { public static final int WEBSOCKET_CONNECTION_TIMEOUT = 10000; //10 sec + /** + * It can be used to add metaData to a broadcast + */ + public static final String META_DATA = "metaData"; + } diff --git a/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketHandler.java b/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketHandler.java index 19c5fcad..76dd54a5 100644 --- a/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketHandler.java +++ b/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketHandler.java @@ -338,7 +338,7 @@ public void onBinaryMessage(byte[] bytes) { } - public void startPublish(String streamId, String token, boolean videoEnabled, boolean audioEnabled, String subscriberId, String subscriberCode, String streamName, String mainTrackId){ + public void startPublish(String streamId, String token, boolean videoEnabled, boolean audioEnabled, String subscriberId, String subscriberCode, String streamName, String mainTrackId, String metaData){ checkIfCalledOnValidThread(); JSONObject json = new JSONObject(); try { @@ -351,6 +351,7 @@ public void startPublish(String streamId, String token, boolean videoEnabled, bo json.put(WebSocketConstants.VIDEO, videoEnabled); json.put(WebSocketConstants.AUDIO, audioEnabled); json.put(WebSocketConstants.MAIN_TRACK, mainTrackId); + json.put(WebSocketConstants.META_DATA, metaData); sendTextMessage(json.toString()); } catch (JSONException e) { diff --git a/webrtc-android-framework/src/test/java/io/antmedia/webrtcandroidframework/WebRTCClientTest.java b/webrtc-android-framework/src/test/java/io/antmedia/webrtcandroidframework/WebRTCClientTest.java index 36dfefa7..be840a45 100644 --- a/webrtc-android-framework/src/test/java/io/antmedia/webrtcandroidframework/WebRTCClientTest.java +++ b/webrtc-android-framework/src/test/java/io/antmedia/webrtcandroidframework/WebRTCClientTest.java @@ -163,9 +163,9 @@ public void testStreamPublishParameters() { webRTCClient.setAudioEnabled(audioCallEnabled); webRTCClient.setVideoEnabled(videoCallEnabled); - webRTCClient.publish(streamId, token, videoCallEnabled, audioCallEnabled, subscriberId, subscriberCode, streamName, null); + webRTCClient.publish(streamId, token, videoCallEnabled, audioCallEnabled, subscriberId, subscriberCode, streamName, null, null); - verify(wsHandler, times(1)).startPublish(streamId, token, videoCallEnabled, audioCallEnabled, subscriberId, subscriberCode, streamName, null); + verify(wsHandler, times(1)).startPublish(streamId, token, videoCallEnabled, audioCallEnabled, subscriberId, subscriberCode, streamName, null, null); ArgumentCaptor jsonCaptor = ArgumentCaptor.forClass(String.class); verify(wsHandler, times(1)).sendTextMessage(jsonCaptor.capture()); @@ -321,7 +321,7 @@ public void testJoinRoomParameters() { verify(wsHandler, timeout(1000)).startPublish(streamId, "" , true, true - , "", "", "", roomName); + , "", "", "", roomName, null); webRTCClient.joinToConferenceRoom(roomName); verify(wsHandler, timeout(1000)).startPlay(roomName, "", null, "", "", ""); @@ -678,7 +678,7 @@ public void testReconnection() { webRTCClient.play(playStreamId, "", null, "", "", ""); String publishStreamId = "publishStreamId"; - webRTCClient.publish(publishStreamId, "", true, true, "","", "", ""); + webRTCClient.publish(publishStreamId, "", true, true, "","", "", "", null); webRTCClient.onIceDisconnected(playStreamId); webRTCClient.onIceDisconnected(publishStreamId); @@ -690,7 +690,7 @@ public void testReconnection() { verify(webRTCClient, timeout(WebRTCClient.PEER_RECONNECTION_DELAY_MS + 1000).atLeast(2)).play(anyString(), anyString(), any(), anyString(), anyString(), anyString()); - verify(wsHandler, timeout(WebRTCClient.PEER_RECONNECTION_DELAY_MS + 1000).atLeast(1)).startPublish(anyString(),anyString(),anyBoolean(),anyBoolean(),anyString(),anyString(),anyString(),anyString()); + verify(wsHandler, timeout(WebRTCClient.PEER_RECONNECTION_DELAY_MS + 1000).atLeast(1)).startPublish(anyString(),anyString(),anyBoolean(),anyBoolean(),anyString(),anyString(),anyString(),anyString(),anyString()); } @@ -703,7 +703,7 @@ public void testWSAndListenerMessages() { webRTCClient.joinToConferenceRoom(room, streamId); verify(wsHandler, timeout(1000)).startPublish(streamId, "" , true, true - , "", "", "", room); + , "", "", "", room, null); webRTCClient.joinToConferenceRoom(room); verify(wsHandler, timeout(1000)).startPlay(room, "", null, "", "", ""); @@ -1154,7 +1154,7 @@ public void tesHandlePublishPlayRequestWhenWSNotConnected() { String publisher1 = "publisher1"; webRTCClient.publish(publisher1); - verify(wsHandler, never()).startPublish(anyString(), anyString(), anyBoolean(), anyBoolean(), anyString(), anyString(), anyString(), anyString()); + verify(wsHandler, never()).startPublish(anyString(), anyString(), anyBoolean(), anyBoolean(), anyString(), anyString(), anyString(), anyString(), anyString()); assertEquals(1, webRTCClient.getPeersForTest().size()); WebRTCClient.PeerInfo publishPeer = webRTCClient.getPeersForTest().get(publisher1); @@ -1169,7 +1169,7 @@ public void tesHandlePublishPlayRequestWhenWSNotConnected() { assertEquals(player1, playPeer.id); webRTCClient.onWebSocketConnected(); - verify(wsHandler, times(1)).startPublish(eq(publishPeer.id), anyString(), anyBoolean(), anyBoolean(), anyString(), anyString(), anyString(), anyString()); + verify(wsHandler, times(1)).startPublish(eq(publishPeer.id), anyString(), anyBoolean(), anyBoolean(), anyString(), anyString(), anyString(), anyString(), anyString()); verify(wsHandler, times(1)).startPlay(eq(playPeer.id), anyString(), any(String[].class), anyString(), anyString(), anyString()); } diff --git a/webrtc-android-framework/src/test/java/io/antmedia/webrtcandroidframework/WebSocketHandlerTest.java b/webrtc-android-framework/src/test/java/io/antmedia/webrtcandroidframework/WebSocketHandlerTest.java index 079b2c23..609be17b 100644 --- a/webrtc-android-framework/src/test/java/io/antmedia/webrtcandroidframework/WebSocketHandlerTest.java +++ b/webrtc-android-framework/src/test/java/io/antmedia/webrtcandroidframework/WebSocketHandlerTest.java @@ -147,7 +147,7 @@ public void testStartPublish() { String streamName = "testStream"; String mainTrackId = "track123"; - webSocketHandler.startPublish(streamId, token, videoEnabled, audioEnabled, subscriberId, subscriberCode, streamName, mainTrackId); + webSocketHandler.startPublish(streamId, token, videoEnabled, audioEnabled, subscriberId, subscriberCode, streamName, mainTrackId, null); ArgumentCaptor jsonCaptor = ArgumentCaptor.forClass(String.class); verify(webSocketHandler, times(1)).sendTextMessage(jsonCaptor.capture()); @@ -163,6 +163,7 @@ public void testStartPublish() { json.put(WebSocketConstants.VIDEO, videoEnabled); json.put(WebSocketConstants.AUDIO, audioEnabled); json.put(WebSocketConstants.MAIN_TRACK, mainTrackId); + json.put(WebSocketConstants.META_DATA, null); } catch (JSONException e) { e.printStackTrace(); } diff --git a/webrtc-android-sample-app/src/main/java/io/antmedia/webrtc_android_sample_app/basic/ConferenceActivity.java b/webrtc-android-sample-app/src/main/java/io/antmedia/webrtc_android_sample_app/basic/ConferenceActivity.java index 4eb82de2..7629585a 100644 --- a/webrtc-android-sample-app/src/main/java/io/antmedia/webrtc_android_sample_app/basic/ConferenceActivity.java +++ b/webrtc-android-sample-app/src/main/java/io/antmedia/webrtc_android_sample_app/basic/ConferenceActivity.java @@ -201,7 +201,7 @@ public void joinLeaveRoom() { webRTCClient.joinToConferenceRoom(roomId); } else { - webRTCClient.joinToConferenceRoom(roomId, streamId, videoCallEnabled, audioCallEnabled, "", "", "", ""); + webRTCClient.joinToConferenceRoom(roomId, streamId, videoCallEnabled, audioCallEnabled, "", "", "", "", null); } } diff --git a/webrtc-android-sample-app/src/main/java/io/antmedia/webrtc_android_sample_app/basic/DynamicConferenceActivity.java b/webrtc-android-sample-app/src/main/java/io/antmedia/webrtc_android_sample_app/basic/DynamicConferenceActivity.java index 1c9f2646..4f81e3cf 100644 --- a/webrtc-android-sample-app/src/main/java/io/antmedia/webrtc_android_sample_app/basic/DynamicConferenceActivity.java +++ b/webrtc-android-sample-app/src/main/java/io/antmedia/webrtc_android_sample_app/basic/DynamicConferenceActivity.java @@ -201,7 +201,7 @@ public void joinLeaveRoom() { webRTCClient.joinToConferenceRoom(roomId); } else { - webRTCClient.joinToConferenceRoom(roomId, streamId, videoCallEnabled, audioCallEnabled, "", "", "", ""); + webRTCClient.joinToConferenceRoom(roomId, streamId, videoCallEnabled, audioCallEnabled, "", "", "", "", null); } }