Roc Toolkit internal modules
Roc Toolkit: real-time audio streaming
Loading...
Searching...
No Matches
receiver_session_group.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2020 Roc Streaming authors
3 *
4 * This Source Code Form is subject to the terms of the Mozilla Public
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 */
8
9//! @file roc_pipeline/receiver_session_group.h
10//! @brief Receiver session group.
11
12#ifndef ROC_PIPELINE_RECEIVER_SESSION_GROUP_H_
13#define ROC_PIPELINE_RECEIVER_SESSION_GROUP_H_
14
15#include "roc_audio/mixer.h"
16#include "roc_core/iallocator.h"
17#include "roc_core/list.h"
21#include "roc_rtcp/composer.h"
22#include "roc_rtcp/session.h"
23
24namespace roc {
25namespace pipeline {
26
27//! Receiver session group.
28//!
29//! Contains:
30//! - a set of related receiver sessions
32public:
33 //! Initialize.
34 ReceiverSessionGroup(const ReceiverConfig& receiver_config,
35 ReceiverState& receiver_state,
36 audio::Mixer& mixer,
37 const rtp::FormatMap& format_map,
38 packet::PacketFactory& packet_factory,
39 core::BufferFactory<uint8_t>& byte_buffer_factory,
40 core::BufferFactory<audio::sample_t>& sample_buffer_factory,
41 core::IAllocator& allocator);
42
43 //! Route packet to session.
44 void route_packet(const packet::PacketPtr& packet);
45
46 //! Advance session timestamp.
48
49 //! Adjust session clock to match consumer clock.
51
52 //! Get number of alive sessions.
53 size_t num_sessions() const;
54
55private:
56 // Implementation of rtcp::IReceiverHooks interface.
57 // These methods are invoked by rtcp::Session.
58 virtual void on_update_source(packet::source_t ssrc, const char* cname);
59 virtual void on_remove_source(packet::source_t ssrc);
60 virtual size_t on_get_num_sources();
61 virtual rtcp::ReceptionMetrics on_get_reception_metrics(size_t source_index);
62 virtual void on_add_sending_metrics(const rtcp::SendingMetrics& metrics);
63 virtual void on_add_link_metrics(const rtcp::LinkMetrics& metrics);
64
65 void route_transport_packet_(const packet::PacketPtr& packet);
66 void route_control_packet_(const packet::PacketPtr& packet);
67
68 bool can_create_session_(const packet::PacketPtr& packet);
69
70 void create_session_(const packet::PacketPtr& packet);
71 void remove_session_(ReceiverSession& sess);
72
73 ReceiverSessionConfig make_session_config_(const packet::PacketPtr& packet) const;
74
75 core::IAllocator& allocator_;
76
77 packet::PacketFactory& packet_factory_;
78 core::BufferFactory<uint8_t>& byte_buffer_factory_;
79 core::BufferFactory<audio::sample_t>& sample_buffer_factory_;
80
81 const rtp::FormatMap& format_map_;
82
83 audio::Mixer& mixer_;
84
85 ReceiverState& receiver_state_;
86 const ReceiverConfig& receiver_config_;
87
88 core::Optional<rtcp::Composer> rtcp_composer_;
90
92};
93
94} // namespace pipeline
95} // namespace roc
96
97#endif // ROC_PIPELINE_RECEIVER_SESSION_GROUP_H_
Mixer. Mixes multiple input streams into one output stream.
Definition: mixer.h:41
Memory allocator interface.
Definition: iallocator.h:23
Intrusive doubly-linked list.
Definition: list.h:35
Base class for non-copyable objects.
Definition: noncopyable.h:23
Optionally constructed object.
Definition: optional.h:25
void route_packet(const packet::PacketPtr &packet)
Route packet to session.
size_t num_sessions() const
Get number of alive sessions.
void advance_sessions(packet::timestamp_t timestamp)
Advance session timestamp.
void reclock_sessions(packet::ntp_timestamp_t timestamp)
Adjust session clock to match consumer clock.
ReceiverSessionGroup(const ReceiverConfig &receiver_config, ReceiverState &receiver_state, audio::Mixer &mixer, const rtp::FormatMap &format_map, packet::PacketFactory &packet_factory, core::BufferFactory< uint8_t > &byte_buffer_factory, core::BufferFactory< audio::sample_t > &sample_buffer_factory, core::IAllocator &allocator)
Initialize.
Receiver session sub-pipeline.
Receiver pipeline state. Thread-safe.
Receiver hooks interface.
RTP payload format map.
Definition: format_map.h:22
Memory allocator interface.
Intrusive doubly-linked list.
Mixer.
uint32_t source_t
Packet source ID identifying packet stream.
Definition: units.h:22
uint32_t timestamp_t
Audio packet timestamp.
Definition: units.h:25
uint64_t ntp_timestamp_t
NTP timestamp.
Definition: units.h:91
Root namespace.
Non-copyable object.
Receiver session pipeline.
Receiver pipeline state.
RTCP packet composer.
RTCP session.
Receiver parameters.
Definition: config.h:247
Receiver session parameters.
Definition: config.h:165
Metrics for network link. Calculated independently on both sender and receiver.
Definition: metrics.h:52
Metrics sent from receiver to sender per source.
Definition: metrics.h:37
Metrics sent from sender to receiver.
Definition: metrics.h:23