Add path for recovered packets from internal::Call to RtpStreamReceiver.
When the FlexfecReceiver recovers media packets, it inserts these into internal::Call, which then distributes them to the appropriate VideoReceiveStream/RtpStreamReceiver. BUG=webrtc:5654 Review-Url: https://codereview.webrtc.org/2390823009 Cr-Commit-Position: refs/heads/master@{#14642}
This commit is contained in:
parent
e5ddf52b97
commit
9c4b4b47f4
@ -18,6 +18,7 @@
|
||||
#include "webrtc/audio/audio_send_stream.h"
|
||||
#include "webrtc/audio/audio_state.h"
|
||||
#include "webrtc/audio/scoped_voe_interface.h"
|
||||
#include "webrtc/base/basictypes.h"
|
||||
#include "webrtc/base/checks.h"
|
||||
#include "webrtc/base/constructormagic.h"
|
||||
#include "webrtc/base/logging.h"
|
||||
@ -32,6 +33,7 @@
|
||||
#include "webrtc/modules/bitrate_controller/include/bitrate_controller.h"
|
||||
#include "webrtc/modules/congestion_controller/include/congestion_controller.h"
|
||||
#include "webrtc/modules/pacing/paced_sender.h"
|
||||
#include "webrtc/modules/rtp_rtcp/include/flexfec_receiver.h"
|
||||
#include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h"
|
||||
#include "webrtc/modules/rtp_rtcp/source/byte_io.h"
|
||||
#include "webrtc/modules/utility/include/process_thread.h"
|
||||
@ -57,6 +59,7 @@ namespace internal {
|
||||
|
||||
class Call : public webrtc::Call,
|
||||
public PacketReceiver,
|
||||
public RecoveredPacketReceiver,
|
||||
public CongestionController::Observer,
|
||||
public BitrateAllocator::LimitObserver {
|
||||
public:
|
||||
@ -91,6 +94,9 @@ class Call : public webrtc::Call,
|
||||
size_t length,
|
||||
const PacketTime& packet_time) override;
|
||||
|
||||
// Implements RecoveredPacketReceiver.
|
||||
bool OnRecoveredPacket(const uint8_t* packet, size_t length) override;
|
||||
|
||||
void SetBitrateConfig(
|
||||
const webrtc::Call::Config::BitrateConfig& bitrate_config) override;
|
||||
|
||||
@ -940,5 +946,16 @@ PacketReceiver::DeliveryStatus Call::DeliverPacket(
|
||||
return DeliverRtp(media_type, packet, length, packet_time);
|
||||
}
|
||||
|
||||
// TODO(brandtr): Update this member function when we support protecting
|
||||
// audio packets with FlexFEC.
|
||||
bool Call::OnRecoveredPacket(const uint8_t* packet, size_t length) {
|
||||
uint32_t ssrc = ByteReader<uint32_t>::ReadBigEndian(&packet[8]);
|
||||
ReadLockScoped read_lock(*receive_crit_);
|
||||
auto it = video_receive_ssrcs_.find(ssrc);
|
||||
if (it == video_receive_ssrcs_.end())
|
||||
return false;
|
||||
return it->second->OnRecoveredPacket(packet, length);
|
||||
}
|
||||
|
||||
} // namespace internal
|
||||
} // namespace webrtc
|
||||
|
||||
@ -18,7 +18,8 @@
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
// Callback interface for packets recovered by FlexFEC.
|
||||
// Callback interface for packets recovered by FlexFEC. The implementation
|
||||
// should be able to demultiplex the recovered RTP packets based on SSRC.
|
||||
class RecoveredPacketReceiver {
|
||||
public:
|
||||
virtual bool OnRecoveredPacket(const uint8_t* packet, size_t length) = 0;
|
||||
|
||||
@ -259,6 +259,11 @@ bool VideoReceiveStream::DeliverRtp(const uint8_t* packet,
|
||||
return rtp_stream_receiver_.DeliverRtp(packet, length, packet_time);
|
||||
}
|
||||
|
||||
bool VideoReceiveStream::OnRecoveredPacket(const uint8_t* packet,
|
||||
size_t length) {
|
||||
return rtp_stream_receiver_.OnRecoveredPacket(packet, length);
|
||||
}
|
||||
|
||||
void VideoReceiveStream::Start() {
|
||||
if (decode_thread_.IsRunning())
|
||||
return;
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
#include "webrtc/call/transport_adapter.h"
|
||||
#include "webrtc/common_video/include/incoming_video_stream.h"
|
||||
#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
|
||||
#include "webrtc/modules/rtp_rtcp/include/flexfec_receiver.h"
|
||||
#include "webrtc/modules/video_coding/video_coding_impl.h"
|
||||
#include "webrtc/system_wrappers/include/clock.h"
|
||||
#include "webrtc/video/receive_statistics_proxy.h"
|
||||
@ -59,6 +60,8 @@ class VideoReceiveStream : public webrtc::VideoReceiveStream,
|
||||
size_t length,
|
||||
const PacketTime& packet_time);
|
||||
|
||||
bool OnRecoveredPacket(const uint8_t* packet, size_t length);
|
||||
|
||||
// webrtc::VideoReceiveStream implementation.
|
||||
void Start() override;
|
||||
void Stop() override;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user