Bug 1400363 - Part 2: Unmute webrtc receive tracks when RTP is received. r=drno

MozReview-Commit-ID: IQrCOzBQmqu

--HG--
extra : rebase_source : 2db6b0ca785ffb13dd6345a6e201c13766d0b742
This commit is contained in:
Byron Campen [:bwc] 2017-11-29 13:36:41 -06:00
Родитель 82aaa61421
Коммит 357ca1db92
2 изменённых файлов: 44 добавлений и 1 удалений

Просмотреть файл

@ -1101,6 +1101,7 @@ void MediaPipeline::RtpPacketReceived(TransportLayer *layer,
}
CSFLogDebug(LOGTAG, "%s received RTP packet.", description_.c_str());
increment_rtp_packets_received(out_len);
OnRtpPacketReceived();
RtpLogger::LogPacket(inner_data.get(), out_len, true, true, header.headerLength,
description_);
@ -1896,7 +1897,8 @@ class GenericReceiveListener : public MediaStreamListener
played_ticks_(0),
last_log_(0),
principal_handle_(PRINCIPAL_HANDLE_NONE),
listening_(false)
listening_(false),
maybe_track_needs_unmute_(true)
{
MOZ_ASSERT(track->GetInputStream()->AsSourceStream());
}
@ -1912,6 +1914,7 @@ class GenericReceiveListener : public MediaStreamListener
if (!listening_) {
listening_ = true;
track_->GetInputStream()->AddListener(this);
maybe_track_needs_unmute_ = true;
}
}
@ -1923,6 +1926,24 @@ class GenericReceiveListener : public MediaStreamListener
}
}
void OnRtpReceived()
{
if (maybe_track_needs_unmute_) {
maybe_track_needs_unmute_ = false;
NS_DispatchToMainThread(NewRunnableMethod(
"GenericReceiveListener::OnRtpReceived_m",
this,
&GenericReceiveListener::OnRtpReceived_m));
}
}
void OnRtpReceived_m()
{
if (listening_ && track_->Muted()) {
track_->MutedChanged(false);
}
}
void EndTrack()
{
CSFLogDebug(LOGTAG, "GenericReceiveListener ending track");
@ -1984,6 +2005,7 @@ class GenericReceiveListener : public MediaStreamListener
TrackTicks last_log_; // played_ticks_ when we last logged
PrincipalHandle principal_handle_;
bool listening_;
Atomic<bool> maybe_track_needs_unmute_;
};
MediaPipelineReceive::MediaPipelineReceive(
@ -2169,6 +2191,14 @@ MediaPipelineReceiveAudio::Stop()
conduit_->StopReceiving();
}
void
MediaPipelineReceiveAudio::OnRtpPacketReceived()
{
if (listener_) {
listener_->OnRtpReceived();
}
}
class MediaPipelineReceiveVideo::PipelineListener
: public GenericReceiveListener {
public:
@ -2353,6 +2383,14 @@ MediaPipelineReceiveVideo::Stop()
conduit_->StopReceiving();
}
void
MediaPipelineReceiveVideo::OnRtpPacketReceived()
{
if (listener_) {
listener_->OnRtpReceived();
}
}
DOMHighResTimeStamp MediaPipeline::GetNow() {
return webrtc::Clock::GetRealTimeClock()->TimeInMilliseconds();
}

Просмотреть файл

@ -241,6 +241,7 @@ class MediaPipeline : public sigslot::has_slots<> {
void increment_rtp_packets_sent(int bytes);
void increment_rtcp_packets_sent();
void increment_rtp_packets_received(int bytes);
virtual void OnRtpPacketReceived() {};
void increment_rtcp_packets_received();
virtual nsresult SendPacket(TransportFlow *flow, const void *data, int len);
@ -416,6 +417,8 @@ class MediaPipelineReceiveAudio : public MediaPipelineReceive {
void Start() override;
void Stop() override;
void OnRtpPacketReceived() override;
private:
// Separate class to allow ref counting
class PipelineListener;
@ -444,6 +447,8 @@ class MediaPipelineReceiveVideo : public MediaPipelineReceive {
void Start() override;
void Stop() override;
void OnRtpPacketReceived() override;
private:
class PipelineRenderer;
friend class PipelineRenderer;