зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
82aaa61421
Коммит
357ca1db92
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче