【问题标题】:How to disable audio in webrtc mobile app(ios) without changing in framework如何在 webrtc 移动应用程序(ios)中禁用音频而不更改框架
【发布时间】:2017-10-23 04:59:48
【问题描述】:

我正在使用 webrtc mobile(ios)。我无法在 webrtc(ios) 中禁用音频。我没有禁用音频的标志。通过更改框架/库,它可以轻松完成。我的目的是我必须在不更改框架/库的情况下禁用音频。谁能帮帮我。

【问题讨论】:

  • @Ved 请不要进行这样的格式编辑;它不会使帖子更易于阅读,并且代码格式只能用于代码。见How do I make a good edit?谢谢!

标签: ios audio webrtc apprtc


【解决方案1】:

使用代码 sn-p 更新您的问题,即如何创建 mediaStrem 或轨道(音频/视频)。

一般使用默认的 Native 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];
    }
  }
}

【讨论】:

    【解决方案2】:

    在我的情况下,我没有使用流,而是直接将音轨添加到对等连接。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 2019-09-27
      • 2020-04-29
      • 2016-12-02
      相关资源
      最近更新 更多