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!)
}
}
}