Index: webrtc/api/rtpreceiver.cc |
diff --git a/webrtc/api/rtpreceiver.cc b/webrtc/api/rtpreceiver.cc |
index 1b52ce27def13f255c245d353aa239f4d64d1078..923350c06ec50bcd430f960aae21c63f52c326ad 100644 |
--- a/webrtc/api/rtpreceiver.cc |
+++ b/webrtc/api/rtpreceiver.cc |
@@ -29,12 +29,15 @@ AudioRtpReceiver::AudioRtpReceiver(MediaStreamInterface* stream, |
rtc::Thread::Current(), |
AudioTrack::Create(track_id, |
RemoteAudioSource::Create(ssrc, provider)))), |
- cached_track_enabled_(track_->enabled()) { |
+ cached_track_enabled_(track_->enabled()), |
+ observer_(nullptr) { |
pthatcher1
2016/06/08 17:35:55
You don't need this if you use "= nullptr" in the
|
RTC_DCHECK(track_->GetSource()->remote()); |
track_->RegisterObserver(this); |
track_->GetSource()->RegisterAudioObserver(this); |
Reconfigure(); |
stream->AddTrack(track_); |
+ provider_->SignalFirstAudioPacketReceived.connect( |
+ this, &AudioRtpReceiver::OnFirstAudioPacketReceived); |
} |
AudioRtpReceiver::~AudioRtpReceiver() { |
@@ -83,6 +86,22 @@ void AudioRtpReceiver::Reconfigure() { |
provider_->SetAudioPlayout(ssrc_, track_->enabled()); |
} |
+void AudioRtpReceiver::SetObserver(RtpReceiverObserverInterface* observer) { |
+ observer_ = observer; |
+ // If received the first packet before setting the observer, call the |
+ // observer. |
+ if (received_first_packet_) { |
+ observer_->OnFirstPacketReceived(cricket::MEDIA_TYPE_AUDIO); |
+ } |
+} |
+ |
+void AudioRtpReceiver::OnFirstAudioPacketReceived() { |
+ if (observer_) { |
+ observer_->OnFirstPacketReceived(cricket::MEDIA_TYPE_AUDIO); |
+ } |
+ received_first_packet_ = true; |
pthatcher1
2016/06/08 17:35:55
Do you have a unit test that covers setting the ob
|
+} |
+ |
VideoRtpReceiver::VideoRtpReceiver(MediaStreamInterface* stream, |
const std::string& track_id, |
rtc::Thread* worker_thread, |
@@ -100,10 +119,13 @@ VideoRtpReceiver::VideoRtpReceiver(MediaStreamInterface* stream, |
track_id, |
VideoTrackSourceProxy::Create(rtc::Thread::Current(), |
worker_thread, |
- source_)))) { |
+ source_)))), |
+ observer_(nullptr) { |
source_->SetState(MediaSourceInterface::kLive); |
provider_->SetVideoPlayout(ssrc_, true, &broadcaster_); |
stream->AddTrack(track_); |
+ provider_->SignalFirstVideoPacketReceived.connect( |
+ this, &VideoRtpReceiver::OnFirstVideoPacketReceived); |
} |
VideoRtpReceiver::~VideoRtpReceiver() { |
@@ -132,4 +154,20 @@ bool VideoRtpReceiver::SetParameters(const RtpParameters& parameters) { |
return provider_->SetVideoRtpReceiveParameters(ssrc_, parameters); |
} |
+void VideoRtpReceiver::SetObserver(RtpReceiverObserverInterface* observer) { |
+ observer_ = observer; |
+ // If received the first packet before setting the observer, call the |
+ // observer. |
+ if (received_first_packet_) { |
+ observer_->OnFirstPacketReceived(cricket::MEDIA_TYPE_VIDEO); |
+ } |
+} |
+ |
+void VideoRtpReceiver::OnFirstVideoPacketReceived() { |
+ if (observer_) { |
+ observer_->OnFirstPacketReceived(cricket::MEDIA_TYPE_VIDEO); |
pthatcher1
2016/06/08 17:35:55
Might as well add a media_type() getter to the Rtp
Zhi Huang
2016/06/09 00:37:36
Done.
|
+ } |
+ received_first_packet_ = true; |
+} |
+ |
} // namespace webrtc |