// This class contains information about // an RTPSender, used for things like looking it up by SSRC. struct RtpSenderInfo {
RtpSenderInfo() : first_ssrc(0) {}
RtpSenderInfo(absl::string_view stream_id,
absl::string_view sender_id,
uint32_t ssrc)
: stream_id(stream_id), sender_id(sender_id), first_ssrc(ssrc) {} booloperator==(const RtpSenderInfo& other) { returnthis->stream_id == other.stream_id && this->sender_id == other.sender_id && this->first_ssrc == other.first_ssrc;
}
std::string stream_id;
std::string sender_id; // An RtpSender can have many SSRCs. The first one is used as a sort of ID // for communicating with the lower layers.
uint32_t first_ssrc;
};
// The RtpTransmissionManager class is responsible for managing the lifetime // and relationships between objects of type RtpSender, RtpReceiver and // RtpTransceiver. class RtpTransmissionManager : public RtpSenderBase::SetStreamsObserver { public:
RtpTransmissionManager(const Environment& env,
Call* call, bool is_unified_plan,
ConnectionContext* context,
CodecLookupHelper* codec_lookup_helper,
UsagePattern* usage_pattern,
PeerConnectionObserver* observer,
LegacyStatsCollectorInterface* legacy_stats,
absl::AnyInvocable<void()> on_negotiation_needed);
// No move or copy permitted.
RtpTransmissionManager(const RtpTransmissionManager&) = delete;
RtpTransmissionManager& operator=(const RtpTransmissionManager&) = delete;
// Stop activity. In particular, don't call observer_ any more. void Close();
// Returns the list of senders currently associated with some // registered transceiver
std::vector<scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>>>
GetSendersInternal() const;
// Returns the list of receivers currently associated with a transceiver
std::vector<scoped_refptr<RtpReceiverProxyWithInternal<RtpReceiverInternal>>>
GetReceiversInternal() const;
// Plan B: Get the transceiver containing all audio senders and receivers
PLAN_B_ONLY scoped_refptr<RtpTransceiverProxyWithInternal<RtpTransceiver>>
GetAudioTransceiver() const; // Plan B: Get the transceiver containing all video senders and receivers
PLAN_B_ONLY scoped_refptr<RtpTransceiverProxyWithInternal<RtpTransceiver>>
GetVideoTransceiver() const;
// Plan B: Add an audio/video track, reusing or creating the sender.
PLAN_B_ONLY void AddTrackPlanB(MediaStreamTrackInterface* track,
MediaStreamInterface* stream); // Plan B: Remove an audio/video track, removing the sender.
PLAN_B_ONLY void RemoveTrackPlanB(MediaStreamTrackInterface* track,
MediaStreamInterface* stream);
// Triggered when a remote sender has been seen for the first time in a remote // session description. It creates a remote MediaStreamTrackInterface // implementation and triggers CreateAudioReceiverPlanB or // CreateVideoReceiverPlanB.
PLAN_B_ONLY void OnRemoteSenderAddedPlanB(const RtpSenderInfo& sender_info,
MediaStreamInterface* stream,
MediaType media_type);
// Triggered when a remote sender has been removed from a remote session // description. It removes the remote sender with id `sender_id` from a remote // MediaStream and triggers DestroyAudioReceiver or DestroyVideoReceiver.
PLAN_B_ONLY void OnRemoteSenderRemovedPlanB(const RtpSenderInfo& sender_info,
MediaStreamInterface* stream,
MediaType media_type);
// Triggered when a local sender has been seen for the first time in a local // session description. // This method triggers CreateAudioSender or CreateVideoSender if the rtp // streams in the local SessionDescription can be mapped to a MediaStreamTrack // in a MediaStream in `local_streams_`
PLAN_B_ONLY void OnLocalSenderAdded(const RtpSenderInfo& sender_info,
MediaType media_type);
// Triggered when a local sender has been removed from a local session // description. // This method triggers DestroyAudioSender or DestroyVideoSender if a stream // has been removed from the local SessionDescription and the stream can be // mapped to a MediaStreamTrack in a MediaStream in `local_streams_`.
PLAN_B_ONLY void OnLocalSenderRemoved(const RtpSenderInfo& sender_info,
MediaType media_type);
// Return the RtpSender with the given track attached.
scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>>
FindSenderForTrack(MediaStreamTrackInterface* track) const;
// Return the RtpSender with the given id, or null if none exists.
scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>> FindSenderById(
absl::string_view sender_id) const;
// Return the RtpReceiver with the given id, or null if none exists.
PLAN_B_ONLY scoped_refptr<RtpReceiverProxyWithInternal<RtpReceiverInternal>>
FindReceiverById(absl::string_view receiver_id) const;
// Plan B helpers for getting the voice/video media channels for the single // audio/video transceiver, if it exists.
PLAN_B_ONLY VoiceMediaSendChannelInterface* voice_media_send_channel() const;
PLAN_B_ONLY VideoMediaSendChannelInterface* video_media_send_channel() const;
PLAN_B_ONLY VoiceMediaReceiveChannelInterface* voice_media_receive_channel() const;
PLAN_B_ONLY VideoMediaReceiveChannelInterface* video_media_receive_channel() const;
// Returns the first RtpTransceiver suitable for a newly added track, if such // transceiver is available.
scoped_refptr<RtpTransceiverProxyWithInternal<RtpTransceiver>>
FindFirstTransceiverForAddedTrack(
scoped_refptr<MediaStreamTrackInterface> track, const std::vector<RtpEncodingParameters>* init_send_encodings);
// Create an RtpReceiver that sources an audio track.
PLAN_B_ONLY void CreateAudioReceiverPlanB(
MediaStreamInterface* stream, const RtpSenderInfo& remote_sender_info) RTC_RUN_ON(signaling_thread());
// Create an RtpReceiver that sources a video track.
PLAN_B_ONLY void CreateVideoReceiverPlanB(
MediaStreamInterface* stream, const RtpSenderInfo& remote_sender_info) RTC_RUN_ON(signaling_thread());
PLAN_B_ONLY scoped_refptr<RtpReceiverInterface> RemoveAndStopReceiver( const RtpSenderInfo& remote_sender_info) RTC_RUN_ON(signaling_thread());
// These lists store sender info seen in local/remote descriptions.
std::vector<RtpSenderInfo> remote_audio_sender_infos_
RTC_GUARDED_BY(signaling_thread());
std::vector<RtpSenderInfo> remote_video_sender_infos_
RTC_GUARDED_BY(signaling_thread());
std::vector<RtpSenderInfo> local_audio_sender_infos_
RTC_GUARDED_BY(signaling_thread());
std::vector<RtpSenderInfo> local_video_sender_infos_
RTC_GUARDED_BY(signaling_thread());
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.