AddAudioTrack
作者:LanPZzzz
本章我们简单讲述下pc->AddAudioTrack
文章目录
-
-
-
-
- 1. 如下代码\examples\peerconnection\client\conductor.cc(528行)
- 2. CreateAudioTrack,需要先CreateAudioSource
- 3. CreateAudioTrack (pc\audiotrack.h ),AudioTrack 就是MediaTrack,也继承了AudioTrackInterface
- 4. 这里简单的介绍下AudioTrack,正好代码也不多
- 5. 上面CreateAudioTrack 已经完成,下面是AddTrack (pc\peerconnection.cc 1160行)
- 6. AddTrackUnifiedPlan(pc\peerconnection.cc 1233 行)
- 7. CreateSender (pc\peerconnection.cc 1427 行)
- 8. CreateReceiver(pc\peerconnection.cc 1456 行)
- 9. CreateAndAddTransceiver(pc\peerconnection.cc 1476 行)
- 总结
- sender 和 receiver 请看学习六
-
-
-
1. 如下代码\examples\peerconnection\client\conductor.cc(528行)
kAudioLabel = "xxxxxxxx"
rtc::scoped_refptr<webrtc::AudioTrackInterface> audio_track(
peer_connection_factory_->CreateAudioTrack(
kAudioLabel, peer_connection_factory_->CreateAudioSource(
cricket::AudioOptions())));
auto result_or_error = peer_connection_->AddTrack(audio_track, {kStreamId});
2. CreateAudioTrack,需要先CreateAudioSource
rtc::scoped_refptr<AudioSourceInterface>
PeerConnectionFactory::CreateAudioSource(const cricket::AudioOptions& options) {
RTC_DCHECK(signaling_thread_->IsCurrent());
rtc::scoped_refptr<LocalAudioSource> source(
LocalAudioSource::Create(&options));
return source;
}
最后创建的是LocalAudioSource(pc\localaudiosource.cc),这是在options 上进行赋值
3. CreateAudioTrack (pc\audiotrack.h ),AudioTrack 就是MediaTrack,也继承了AudioTrackInterface
返回AudioTrackInterface
T = AudioTrackInterface
class AudioTrack : public MediaStreamTrack<AudioTrackInterface>,
public ObserverInterface
template <typename T>
class MediaStreamTrack : public Notifier<T>
template <class T>
class Notifier : public T
这样层层继承,返回就是AudioTrackInterface,他们太优秀了,整的我代码看着好难受
4. 这里简单的介绍下AudioTrack,正好代码也不多
void AudioTrack::AddSink(AudioTrackSinkInterface* sink) {
RTC_DCHECK(thread_checker_.CalledOnValidThread());
if (audio_source_)
audio_source_->AddSink(sink);
}
void AudioTrack::RemoveSink(AudioTrackSinkInterface* sink) {
RTC_DCHECK(thread_checker_.CalledOnValidThread());
if (audio_source_)
audio_source_->RemoveSink(sink);
}
AddSink + RemoveSink 都是加入到audio_source中,但是我们的audio_source 是LocalAudioSource,木有用,空方法