如何在webrtc移动应用程序(ios)中禁用音频而不在框架中更改

如何在webrtc移动应用程序(ios)中禁用音频而不在框架中更改,ios,audio,webrtc,apprtc,Ios,Audio,Webrtc,Apprtc,我正在使用webrtc mobile(ios)。我无法在webrtc(ios)中禁用音频。我没有禁用音频的标志。通过在framwork/library中进行更改,可以轻松完成。我的目的是在框架/库中禁用音频而不进行更改。有人能帮我吗?用代码片段更新您的问题,您是如何创建mediaStrem或曲目(音频/视频)的 通常使用默认的本机WebRTC框架 RTCMediaStream localStream = [_factory mediaStreamWithStreamId:kARDMediaStr

我正在使用webrtc mobile(ios)。我无法在webrtc(ios)中禁用音频。我没有禁用音频的标志。通过在framwork/library中进行更改,可以轻松完成。我的目的是在框架/库中禁用音频而不进行更改。有人能帮我吗?

用代码片段更新您的问题,您是如何创建mediaStrem或曲目(音频/视频)的

通常使用默认的本机WebRTC框架

RTCMediaStream localStream = [_factory mediaStreamWithStreamId:kARDMediaStreamId];
if(audioRequired) {
  RTCAudioTrack *aTrack = [_lmStream createLocalAudioTrack];
  [localStream addAudioTrack:aTrack];
}
RTCVideoTrack *vTrack = [_lmStream createLocalVideoTrack];
[localStream addVideoTrack:vTrack];
[_peerConnection addStream:localStream];
如果您想在通话中静音,请使用以下功能

- (void)enableAudio:(NSString *)id isAudioEnabled:(BOOL) isAudioEnabled {
  NSLog(@"Auido enabled: %d streams count:%d ", id, isAudioEnabled, _peerConnection.localStreams.count);
  if(_peerConnection.localStreams.count > 0) {
    RTCMediaStream *lStream = _peerConnection.localStreams[0];
    if(lStream.audioTracks.count > 0) { // Usually we will have only one track. If you have more than one, need to traverse all.
      // isAudioEnabled == 1 -> Unmute
      // isAudioEnabled == 0 -> Mute
      [lStream.audioTracks[0] setIsEnabled:isAudioEnabled];
    }
  }
}

用代码片段更新您的问题,您如何创建mediaStrem或曲目(音频/视频)

通常使用默认的本机WebRTC框架

RTCMediaStream localStream = [_factory mediaStreamWithStreamId:kARDMediaStreamId];
if(audioRequired) {
  RTCAudioTrack *aTrack = [_lmStream createLocalAudioTrack];
  [localStream addAudioTrack:aTrack];
}
RTCVideoTrack *vTrack = [_lmStream createLocalVideoTrack];
[localStream addVideoTrack:vTrack];
[_peerConnection addStream:localStream];
如果您想在通话中静音,请使用以下功能

- (void)enableAudio:(NSString *)id isAudioEnabled:(BOOL) isAudioEnabled {
  NSLog(@"Auido enabled: %d streams count:%d ", id, isAudioEnabled, _peerConnection.localStreams.count);
  if(_peerConnection.localStreams.count > 0) {
    RTCMediaStream *lStream = _peerConnection.localStreams[0];
    if(lStream.audioTracks.count > 0) { // Usually we will have only one track. If you have more than one, need to traverse all.
      // isAudioEnabled == 1 -> Unmute
      // isAudioEnabled == 0 -> Mute
      [lStream.audioTracks[0] setIsEnabled:isAudioEnabled];
    }
  }
}

在我的例子中,我没有使用流,而是直接将音频曲目添加到peerconnection

private func createMediaSenders() {
    let streamId = "stream"
    
    // Audio
    let audioTrack = self.createAudioTrack()
    self.pc.add(audioTrack, streamIds: [streamId])
    
    // Video
  /*  let videoTrack = self.createVideoTrack()
    self.localVideoTrack = videoTrack
    self.peerConnection.add(videoTrack, streamIds: [streamId])
    self.remoteVideoTrack = self.peerConnection.transceivers.first { $0.mediaType == .video }?.receiver.track as? RTCVideoTrack
    
    // Data
    if let dataChannel = createDataChannel() {
        dataChannel.delegate = self
        self.localDataChannel = dataChannel
    }*/
}

private func createAudioTrack() -> RTCAudioTrack {
    let audioConstrains = RTCMediaConstraints(mandatoryConstraints: nil, optionalConstraints: nil)
    let audioSource = sessionFactory.audioSource(with: audioConstrains)
    let audioTrack = sessionFactory.audioTrack(with: audioSource, trackId: "audio0")
    return audioTrack
}
要使麦克风静音和取消静音,我使用此功能

public func muteMicrophone(_ mute:Bool){
    
        for sender in pc.senders{

            if (sender.track?.kind == "audio") {
                sender.track?.isEnabled = mute
            }
        }
    }

在我的例子中,我没有使用流,而是直接将音频曲目添加到peerconnection

private func createMediaSenders() {
    let streamId = "stream"
    
    // Audio
    let audioTrack = self.createAudioTrack()
    self.pc.add(audioTrack, streamIds: [streamId])
    
    // Video
  /*  let videoTrack = self.createVideoTrack()
    self.localVideoTrack = videoTrack
    self.peerConnection.add(videoTrack, streamIds: [streamId])
    self.remoteVideoTrack = self.peerConnection.transceivers.first { $0.mediaType == .video }?.receiver.track as? RTCVideoTrack
    
    // Data
    if let dataChannel = createDataChannel() {
        dataChannel.delegate = self
        self.localDataChannel = dataChannel
    }*/
}

private func createAudioTrack() -> RTCAudioTrack {
    let audioConstrains = RTCMediaConstraints(mandatoryConstraints: nil, optionalConstraints: nil)
    let audioSource = sessionFactory.audioSource(with: audioConstrains)
    let audioTrack = sessionFactory.audioTrack(with: audioSource, trackId: "audio0")
    return audioTrack
}
要使麦克风静音和取消静音,我使用此功能

public func muteMicrophone(_ mute:Bool){
    
        for sender in pc.senders{

            if (sender.track?.kind == "audio") {
                sender.track?.isEnabled = mute
            }
        }
    }

@请不要像那样进行格式编辑;这不会使文章更容易阅读,代码格式应该只用于代码。再见,谢谢@请不要像那样进行格式编辑;这不会使文章更容易阅读,代码格式应该只用于代码。再见,谢谢!