Roc Toolkit internal modules
Roc Toolkit: real-time audio streaming
Toggle main menu visibility
Loading...
Searching...
No Matches
packetizer.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2015 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_audio/packetizer.h
10
//! @brief Packetizer.
11
12
#ifndef ROC_AUDIO_PACKETIZER_H_
13
#define ROC_AUDIO_PACKETIZER_H_
14
15
#include "
roc_audio/iframe_encoder.h
"
16
#include "
roc_audio/iframe_writer.h
"
17
#include "
roc_audio/sample.h
"
18
#include "
roc_audio/sample_spec.h
"
19
#include "
roc_core/noncopyable.h
"
20
#include "
roc_core/time.h
"
21
#include "
roc_packet/icomposer.h
"
22
#include "
roc_packet/isequencer.h
"
23
#include "
roc_packet/iwriter.h
"
24
#include "
roc_packet/packet_factory.h
"
25
#include "
roc_packet/units.h
"
26
27
namespace
roc
{
28
namespace
audio
{
29
30
//! Metrics of packetizer.
31
struct
PacketizerMetrics {
32
//! Cumulative count of produced packets.
33
uint64_t
packet_count
;
34
35
//! Cumulative count of produced payload bytes.
36
//! This excludes packet headers and padding.
37
uint64_t
payload_count
;
38
39
PacketizerMetrics()
40
:
packet_count
(0)
41
,
payload_count
(0) {
42
}
43
};
44
45
//! Packetizer.
46
//! @remarks
47
//! Gets an audio stream, encodes samples to packets using an encoder, and
48
//! writes packets to a packet writer.
49
class
Packetizer
:
public
IFrameWriter
,
public
core::NonCopyable
<> {
50
public
:
51
//! Initialization.
52
//!
53
//! @b Parameters
54
//! - @p writer is used to write generated packets
55
//! - @p composer is used to initialize new packets
56
//! - @p sequencer is used to put packets in sequence
57
//! - @p payload_encoder is used to write samples to packets
58
//! - @p packet_factory is used to allocate packets
59
//! - @p buffer_factory is used to allocate buffers for packets
60
//! - @p packet_length defines packet length in nanoseconds
61
//! - @p sample_spec describes input frames
62
Packetizer
(
packet::IWriter
& writer,
63
packet::IComposer
& composer,
64
packet::ISequencer
& sequencer,
65
IFrameEncoder
& payload_encoder,
66
packet::PacketFactory
& packet_factory,
67
core::nanoseconds_t
packet_length,
68
const
SampleSpec
& sample_spec);
69
70
//! Check if object is successfully constructed.
71
bool
is_valid
()
const
;
72
73
//! Get sample rate.
74
size_t
sample_rate
()
const
;
75
76
//! Get metrics.
77
const
PacketizerMetrics
&
metrics
()
const
;
78
79
//! Write audio frame.
80
virtual
void
write
(
Frame
& frame);
81
82
//! Flush buffered packet, if any.
83
//! @remarks
84
//! Packet is padded to match fixed size.
85
void
flush
();
86
87
private
:
88
bool
begin_packet_();
89
void
end_packet_();
90
91
void
pad_packet_(
size_t
written_payload_size);
92
93
packet::PacketPtr
create_packet_();
94
95
packet::IWriter
& writer_;
96
packet::IComposer
& composer_;
97
packet::ISequencer
& sequencer_;
98
IFrameEncoder
& payload_encoder_;
99
100
packet::PacketFactory
& packet_factory_;
101
102
const
SampleSpec
sample_spec_;
103
size_t
samples_per_packet_;
104
size_t
payload_size_;
105
106
packet::PacketPtr
packet_;
107
size_t
packet_pos_;
108
core::nanoseconds_t
packet_cts_;
109
110
core::nanoseconds_t
capture_ts_;
111
112
PacketizerMetrics
metrics_;
113
114
bool
valid_;
115
};
116
117
}
// namespace audio
118
}
// namespace roc
119
120
#endif
// ROC_AUDIO_PACKETIZER_H_
roc::audio::Frame
Audio frame.
Definition
frame.h:25
roc::audio::IFrameEncoder
Audio frame encoder interface.
Definition
iframe_encoder.h:24
roc::audio::IFrameWriter
Frame writer interface.
Definition
iframe_writer.h:22
roc::audio::Packetizer::sample_rate
size_t sample_rate() const
Get sample rate.
roc::audio::Packetizer::metrics
const PacketizerMetrics & metrics() const
Get metrics.
roc::audio::Packetizer::is_valid
bool is_valid() const
Check if object is successfully constructed.
roc::audio::Packetizer::Packetizer
Packetizer(packet::IWriter &writer, packet::IComposer &composer, packet::ISequencer &sequencer, IFrameEncoder &payload_encoder, packet::PacketFactory &packet_factory, core::nanoseconds_t packet_length, const SampleSpec &sample_spec)
Initialization.
roc::audio::Packetizer::write
virtual void write(Frame &frame)
Write audio frame.
roc::audio::Packetizer::flush
void flush()
Flush buffered packet, if any.
roc::audio::SampleSpec
Sample specification. Describes sample rate and channels.
Definition
sample_spec.h:30
roc::core::NonCopyable
Base class for non-copyable objects.
Definition
noncopyable.h:23
roc::packet::IComposer
Packet composer interface.
Definition
icomposer.h:22
roc::packet::ISequencer
Packet sequencer. Fills protocol-specific packet headers to form a continous sequence....
Definition
isequencer.h:24
roc::packet::IWriter
Packet writer interface.
Definition
iwriter.h:23
roc::packet::PacketFactory
Packet factory.
Definition
packet_factory.h:36
icomposer.h
Packet composer interface.
iframe_encoder.h
Audio frame encoder interface.
iframe_writer.h
Frame writer interface.
isequencer.h
Packet sequencer.
iwriter.h
Packet writer interface.
roc::audio
Audio frames and audio processing.
roc::core::nanoseconds_t
int64_t nanoseconds_t
Nanoseconds.
Definition
time.h:58
roc::packet::PacketPtr
core::SharedPtr< Packet > PacketPtr
Packet smart pointer.
Definition
packet.h:34
roc
Root namespace.
noncopyable.h
Non-copyable object.
packet_factory.h
Packet factory.
sample.h
Audio sample.
sample_spec.h
Sample specifications.
roc::audio::PacketizerMetrics
Metrics of packetizer.
Definition
packetizer.h:31
roc::audio::PacketizerMetrics::payload_count
uint64_t payload_count
Cumulative count of produced payload bytes. This excludes packet headers and padding.
Definition
packetizer.h:37
roc::audio::PacketizerMetrics::packet_count
uint64_t packet_count
Cumulative count of produced packets.
Definition
packetizer.h:33
time.h
Time definitions.
units.h
Various units used in packets.
roc_audio
packetizer.h
Generated by
1.17.0