2

I've configured WebRTC in IOS native app, but faced with a problem: When I'm talking I hear myself. I tried to turn off all RTCEAGLVideoView and I still hear myself. And only when I comment the next peace of code I stoped hearing myself:

            let audioTrack = pcFactory?.audioTrack(withTrackId: "localAudioTrack")
            localStream?.addAudioTrack(audioTrack!)

Also, I've tried to use audioTrack?.isEnabled = false, and it work, but the opposite site of conversation does not hear me to when I do that.

So, is there any way to mute audio track locally, but to let it be unmuted for the remote RTCMediaStream? Thanks. My PeerConnection setup is listed bellow:

     init(peerId:String, sender:RtcDataSender, isPublisher:Bool, isVideo:Bool = true, isAudio:Bool = true) {
        super.init()
        self.audio = isAudio
        self.video = isVideo
        self.rtcDataSender = sender
        self.peerId = peerId
        let decoderFactory = ARDVideoDecoderFactory.init()
        let encoderFactory = ARDVideoEncoderFactory.init()
        rtcDictionaryFactory = RtcDictionaryFactory()
//        pcFactory = RTCPeerConnectionFactory.init(encoderFactory: encoderFactory, decoderFactory: decoderFactory)
        pcFactory = RTCPeerConnectionFactory.init()

        let config = RTCConfiguration.init()
        config.iceServers = servers
        let constraints:[String:String] = ["OfferToReceiveAudio":"\(isAudio)", "OfferToReceiveVideo":"\(isVideo)"]
        let constraintsConnection:[String:String] = ["kRTCMediaConstraintsMinWidth"     : "640",
                                                     "kRTCMediaConstraintsMinHeight"    : "480",
                                                     "kRTCMediaConstraintsMinFrameRate" : "15",
                                                     "kRTCMediaConstraintsMaxWidth"     : "1280",
                                                     "kRTCMediaConstraintsMaxHeight"    : "720",
                                                     "kRTCMediaConstraintsMaxFrameRate" : "30"]
        let mediaConnectionConstraints = RTCMediaConstraints.init(mandatoryConstraints: constraintsConnection, optionalConstraints: nil)
        rtcMediaConstaints = RTCMediaConstraints.init(mandatoryConstraints: constraints, optionalConstraints: nil)
        peerConnection = pcFactory?.peerConnection(with: config, constraints: rtcMediaConstaints!, delegate: self)
        if (isPublisher) {
            localStream = pcFactory?.mediaStream(withStreamId: "localStream")
            if isVideo {
                let track = self.createLocalVideoTrack()
                localStream?.addVideoTrack(track!)
            }
            if isAudio {
                let audioTrack = pcFactory?.audioTrack(withTrackId: "localAudioTrack")
                localStream?.addAudioTrack(audioTrack!)
                audioTrack?.isEnabled = false
//                audioTrack?.isEnabled = false
//                audioTrack?.source.volume = 0
            }
            rtcDataSender?.localStreamAdded(peerId: peerId, stream: localStream!, isVideo: isVideo)
            peerConnection?.add(localStream!)
            if isVideo {
                didCreateCapturer(capturer: capturer!)
            }
        }
    }
WorieN
  • 1,276
  • 1
  • 11
  • 30
  • Hello, were you able to find a solution to this issue because I am also facing this issue myself and not able to understand it, thanks. – Moeez Akram Jan 25 '21 at 09:05

0 Answers0