RTCPeerConnectionFactory
sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm
webrtc peer connection 객체를 생성하는 factory 클래스,
init 시에 비디오 encoder, decoder factory 를 설정하고, audio device module 을 생성한다.
아래 함수를 통해 audio device module을 설정하게 된다.
#if defined(WEBRTC_IOS)
#import "sdk/objc/native/api/audio_device_module.h"
#endif
- (rtc::scoped_refptr<webrtc::AudioDeviceModule>)audioDevicdeModule {
#if defined(WEBRTC_IOS)
return webrtc::CreateAudioDeviceModule();
#else
return nullptr;
#endif
}
webrtc::CreateAudioDeviceModule 메쏘드는 sdk/objc/native/api/audio_device_module.mm
단순하게 AudioDeviceModuleIOS 를 생성해서 리턴.
rtc::scoped_refptr<AudioDeviceModule> CreateAudioDeviceModule() {
#if defined(WEBRTC_IOS)
return new rtc::RefCountedObject<ios_adm::AudioDeviceModuleIOS>();
#else
RTC_LOG(LERROR)
<< "current platform is not supported => this module will self destruct!";
return nullptr;
#endif
}
AudioDeviceModuleIOS
sdk/objc/native/src/audio/audio_device_module_ios.mm
Audio Device 랩핑 클래스. 대부분의 메쏘들은 실제 device와의 인터페이스 용도의 함수들이다.
헤더에 보면 실제 Audio Device 관련 클래스들이 선언되어 있다.
std::unique_ptr<AudioDeviceIOS> audio_device_;
std::unique_ptr<AudioDeviceBuffer> audio_device_buffer_;
Init() 메쏘드에서 위 객체들을 생성한다.
audio_device_buffer_.reset(new webrtc::AudioDeviceBuffer(task_queue_factory_.get()));
audio_device_.reset(new ios_adm::AudioDeviceIOS());
AudioDeviceIOS
sdk/objc/native/src/audio/audio_device_ios.mm
iOS의 audio session 과 audio component, audio unit을 관리하는 클래스.
AudioDeviceBuffer* audio_device_buffer_;
AudioParameters playout_parameters_;
AudioParameters record_parameters_;
std::unique_ptr<VoiceProcessingAudioUnit> audio_unit_;
std::unique_ptr<FineAudioBuffer> fine_audio_buffer_;
std::BufferT<int16_t> record_audio_buffer_;
RTCNativeAudioSessionDelegateAdapter* audio_session_observer_;
생성시 RTCAudioSessionDelegate 설정
audio_session_observer_ = [[RTCNativeAudioSessionDelegateAdapter alloc] initWithObserver:this];
오디오 디바이스 버퍼 설정
AttachAudioBuffer(AudioDeviceBuffer* audioBuffer)
audio_device_buffer_ = audioBuffer;
Init()
RTCAudioSessionConfiguration 을 가져와 파라미터들을 설정, 오디오 버퍼 설정.
RTCAudioSessionConfiguration을 가져오므로, 이전에 해당 값이 설정되어 있어야 한다.
RTCAudioSessionConfiguration* config = [RTCAudioSessionConfiguration webRTCConfiguration];
playout_parameters_.reset( config.sampleRate, config.outputNumberOfChannels );
record_parameters_.reset(config.sampleRate, config.inputNumberOfChannels);
audio_device_buffer_->SetPlayoutSampleRate( playout_parameters_.sample_rate());
audio_device_buffer_->SetPlayoutChannels( playout_parameters_.channels());
audio_device_buffer_->SetRecordingSampleRate( record_parameters_.sample_rate());
audio_device_buffer_->SetRecordingChannels(record_parameters_.channels());
오디오유닛 관련 메쏘드
CreateAudioUnit()
InitPlayout()
InitRecording()
StartPlayout()
StopPlayout()
StartRecording()
StopRecording()
//AudioUnit Callback
OnDeliverRecordedData()
OnGetPlayoutData()
VoiceProcessingAudioUnit
sdk/objc/native/src/audio/voice_processing_audio_unit.mm
오디오유닛 관련 클래스
오디오 코어가 제공되는 부분 : 오디오 관련 처리가 이루어진다. 믹싱이나 EQ등 커스텀이 필요할때 수정이 필요한 부분
'프로그래밍 > WebRTC' 카테고리의 다른 글
[WebRTC] peerConnection.statistics() 중 자주 확인하는 데이터 (0) | 2022.06.20 |
---|---|
[WebRTC] 안드로이드 I420 Buffer관련 클래스 (0) | 2020.04.22 |
[WebRTC] android camera 관련 (2) | 2020.02.29 |
[WebRTC] 사이멀캐스트? 네이티브를 위한 레거시 simulcast (0) | 2020.01.01 |
[WebRTC] Android SurfaceTextureHelper (21) | 2019.07.16 |
WebRTC iOS 기본 플로우 코드 (5) | 2019.06.07 |
WebRTC native build (0) | 2019.05.22 |