From 0f64ad7a62da8eae06a41fb8844f623de17aaf61 Mon Sep 17 00:00:00 2001 From: Juan Navarro Date: Fri, 5 Nov 2021 15:45:22 +0100 Subject: [PATCH] android: do NOT mix addTrack() and addTransceiver() APIs The PeerConnection API went through a transition from Track-based to Transceiver-based API. Nowadays, it's a very common mistake to mix them inconsistently, especially caused by Google- or StackOverflow-based development, because examples online tend to be old and BAD. Corresponds to equivalent code in OpenVidu-Browser: https://github.com/OpenVidu/openvidu/blob/v2.20.0/openvidu-browser/src/OpenViduInternal/WebRtcPeer/WebRtcPeer.ts#L187-L248 --- .../openvidu_android/openvidu/Session.java | 20 ++++++++++++------- .../websocket/CustomWebSocket.java | 11 ++-------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/openvidu-android/app/src/main/java/io/openvidu/openvidu_android/openvidu/Session.java b/openvidu-android/app/src/main/java/io/openvidu/openvidu_android/openvidu/Session.java index b1f232fb..c068af67 100644 --- a/openvidu-android/app/src/main/java/io/openvidu/openvidu_android/openvidu/Session.java +++ b/openvidu-android/app/src/main/java/io/openvidu/openvidu_android/openvidu/Session.java @@ -90,6 +90,15 @@ public class Session { } }); + if (localParticipant.getAudioTrack() != null) { + peerConnection.addTransceiver(localParticipant.getAudioTrack(), + new RtpTransceiver.RtpTransceiverInit(RtpTransceiver.RtpTransceiverDirection.SEND_ONLY)); + } + if (localParticipant.getVideoTrack() != null) { + peerConnection.addTransceiver(localParticipant.getVideoTrack(), + new RtpTransceiver.RtpTransceiverInit(RtpTransceiver.RtpTransceiverDirection.SEND_ONLY)); + } + return peerConnection; } @@ -134,13 +143,10 @@ public class Session { } }); - peerConnection.addTrack(localParticipant.getAudioTrack());//Add audio track to create transReceiver - peerConnection.addTrack(localParticipant.getVideoTrack());//Add video track to create transReceiver - - for (RtpTransceiver transceiver : peerConnection.getTransceivers()) { - //We set both audio and video in receive only mode - transceiver.setDirection(RtpTransceiver.RtpTransceiverDirection.RECV_ONLY); - } + peerConnection.addTransceiver(MediaStreamTrack.MediaType.MEDIA_TYPE_AUDIO, + new RtpTransceiver.RtpTransceiverInit(RtpTransceiver.RtpTransceiverDirection.RECV_ONLY)); + peerConnection.addTransceiver(MediaStreamTrack.MediaType.MEDIA_TYPE_VIDEO, + new RtpTransceiver.RtpTransceiverInit(RtpTransceiver.RtpTransceiverDirection.RECV_ONLY)); this.remoteParticipants.get(connectionId).setPeerConnection(peerConnection); } diff --git a/openvidu-android/app/src/main/java/io/openvidu/openvidu_android/websocket/CustomWebSocket.java b/openvidu-android/app/src/main/java/io/openvidu/openvidu_android/websocket/CustomWebSocket.java index 9c6a932b..a7735fd4 100644 --- a/openvidu-android/app/src/main/java/io/openvidu/openvidu_android/websocket/CustomWebSocket.java +++ b/openvidu-android/app/src/main/java/io/openvidu/openvidu_android/websocket/CustomWebSocket.java @@ -126,18 +126,11 @@ public class CustomWebSocket extends AsyncTask impl PeerConnection localPeerConnection = session.createLocalPeerConnection(); - localPeerConnection.addTrack(localParticipant.getAudioTrack()); - localPeerConnection.addTrack(localParticipant.getVideoTrack()); - - for (RtpTransceiver transceiver : localPeerConnection.getTransceivers()) { - transceiver.setDirection(RtpTransceiver.RtpTransceiverDirection.SEND_ONLY); - } - localParticipant.setPeerConnection(localPeerConnection); MediaConstraints sdpConstraints = new MediaConstraints(); - sdpConstraints.mandatory.add(new MediaConstraints.KeyValuePair("offerToReceiveAudio", "true")); - sdpConstraints.mandatory.add(new MediaConstraints.KeyValuePair("offerToReceiveVideo", "true")); + sdpConstraints.mandatory.add(new MediaConstraints.KeyValuePair("offerToReceiveAudio", "false")); + sdpConstraints.mandatory.add(new MediaConstraints.KeyValuePair("offerToReceiveVideo", "false")); session.createOfferForPublishing(sdpConstraints); if (result.getJSONArray(JsonConstants.VALUE).length() > 0) {