iOS WebRTC如何使用自定义来源替换输入音频

时间:2018-12-05 23:05:15

标签: ios objective-c webrtc replaykit

我正在尝试使用本机google WebRTC替换A / V源。我正在使用 GoogleWebRTC 的最新容器,并正在使用当前的Google演示项目。

替换视频源非常简单快捷,音频输入不是很多。

像这样在ARDAppClient中设置默认麦克风输入

  RTCMediaConstraints *constraints = [self defaultMediaAudioConstraints];
  RTCAudioSource *source = [_factory audioSourceWithConstraints:constraints];
  RTCAudioTrack *track = [_factory audioTrackWithSource:source
                                            trackId:kARDAudioTrackId];
  [_peerConnection addTrack:track streamIds:@[ kARDMediaStreamId ]];

我想用任何想要的东西交换源,我想要获取任何我想要的音频源(一首歌,ReplayKit应用音频),进入需求格式,并挂接到WebRTC管道而无需一团糟。

ReplayKit Broadcast扩展似乎在音频上没有任何吸引力,

- (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer
               withType:(RPSampleBufferType)sampleBufferType {
  switch (sampleBufferType) {
    case RPSampleBufferTypeVideo:
      [self.capturer didCaptureSampleBuffer:sampleBuffer];
      break;
    case RPSampleBufferTypeAudioApp:
      break;
    case RPSampleBufferTypeAudioMic:
      break;
    default:
      break;
  }
}

似乎我应该可以在某个地方发送AudioApp或AudioMic CMSamplebuffer ...?

我要避免的是更改WebRTC库并编译自己的静态框架,但是似乎我越来越有可能要这么做。

我无法在WebRTC库中找到任何通过CMSampleBufferRef将麦克风用作CaptureDevice的库。我已经找到了AVAudioSession捕获流程,但是无法进行捕获。

最新发行说明状态

Bug
8466
Objc interface for peer connection factory does not allow external    audio device module to be used.
PeerConnection (iOS)

这似乎表明默认情况下不接受任何外部音频设备(如我想做的),因此,如果我正确理解这一点,则必须更改库。

有没有任何种方法可以轻松换出音频源?如果不是这样的话,那么关于更改WebRTC库首先要看的指南将非常有帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用专门为解决此问题而创建的 WebRTC 的这个分支:~)

https://github.com/pixiv/webrtc/blob/87.0.4280.142-pixiv0/README.pixiv.en.md