MillicastSDK 2.2.0
Loading...
Searching...
No Matches
track.h
Go to the documentation of this file.
1#ifndef MILLICAST_API_TRACK_H
2#define MILLICAST_API_TRACK_H
3
16
17#include <optional>
18#include <string>
19#include <vector>
20
21namespace millicast {
22
23// Forward declarations ///////////////////////////////////////////////////////
24class VideoRenderer;
25class AudioRenderer;
26
27// Track //////////////////////////////////////////////////////////////////////
28
34 public:
35 Track() = default;
36 virtual ~Track() = default;
37
43 [[nodiscard]] virtual const std::string& id() const = 0;
44
50 [[nodiscard]] virtual const std::string& kind() const = 0;
51
57 [[nodiscard]] virtual bool is_enabled() const = 0;
58
66 virtual void enable(bool e) = 0;
67};
68
69// VideoTrack /////////////////////////////////////////////////////////////////
70
76 public:
81 enum class ContentHint { NONE, FLUID, DETAILED, TEXT };
82
83 VideoTrack() = default;
84 ~VideoTrack() override = default;
85
93 virtual void add_renderer(VideoRenderer* renderer) = 0;
94
100 virtual void remove_renderer(VideoRenderer* renderer) = 0;
101
107 virtual void set_content_hint(ContentHint hint) noexcept = 0;
108
113 [[nodiscard]] virtual ContentHint content_hint() const noexcept = 0;
114};
115
116// AudioTrack /////////////////////////////////////////////////////////////////
117
123 public:
124 AudioTrack() = default;
125 ~AudioTrack() override = default;
126
134 virtual void add_renderer(AudioRenderer* renderer) = 0;
135
141 virtual void remove_renderer(AudioRenderer* renderer) = 0;
142
148 virtual void set_volume(double volume) = 0;
149};
150
151#ifndef MC_DISABLE_COPY_AND_ASSIGN
152#define MC_DISABLE_COPY_AND_ASSIGN(Klass) \
153 Klass(Klass&&) = delete; \
154 Klass(const Klass&) = delete; \
155 Klass& operator=(Klass&&) = delete; \
156 Klass& operator=(const Klass&) = delete
157#endif // !defined(MC_DISABLE_COPY_AND_ASSIGN)
158
159class RtsRemoteTrack;
160class RtsRemoteVideoTrack;
161class RtsRemoteAudioTrack;
162class WebrtcRemoteAudioTrack;
163class WebrtcRemoteVideoTrack;
164
177 public:
178 WebrtcRemoteTrack() = default;
180
184 enum Kind {
186 VIDEO
187 };
188
198 struct Disabled {};
199
215 struct MidUpdated {
216 std::optional<std::string> mid;
217 };
218
223 [[nodiscard]] virtual Kind kind() const = 0;
224
232
245 virtual std::optional<std::string> get_current_mid() const = 0;
246
247 virtual const std::string& get_cname() const = 0;
248
255
262
269 EventHandler<Disabled>&& handler) = 0;
270
277 EventHandler<MidUpdated>&& handler) = 0;
278
285 EventHandler<FrameMetadata>&& handler) = 0;
286};
287
300 public:
301 RtsRemoteTrack() = default;
303
322 struct Active {};
323
341 struct Inactive {};
342
351 const std::shared_ptr<const RtsTrackStats> track_stats;
352 };
353
359
367 struct Layers {
369 struct Resolution {
370 int width;
371 int height;
372 };
373
378 struct Layer {
379 std::string encoding_id;
380 int bitrate = 0;
381 std::optional<int>
382 target_bitrate{};
383 std::optional<int> target_fps{};
384 std::optional<int>
385 target_height{};
386 std::optional<int> target_width{};
387 std::optional<int> temporal_layer_id;
388 std::optional<int> spatial_layer_id;
390 std::optional<Resolution> layer_resolution;
393 std::optional<int> max_temporal_layer_id;
396 std::optional<int> max_spatial_layer_id;
397 };
398
399 std::vector<Layer> active;
400 std::vector<std::string> inactive;
401 };
402
404
411 EventHandler<Active>&& handler) = 0;
412
419 EventHandler<Inactive>&& handler) = 0;
420
427 EventHandler<Layers>&& handler) = 0;
428
435 EventHandler<MidUpdated>&& handler) = 0;
436
443 EventHandler<FrameMetadata>&& handler) = 0;
444
454 EventHandler<RtsStatsEvent>&& handler) = 0;
455
465 [[nodiscard]] virtual const std::optional<std::string>& source_id() const = 0;
466
471 [[nodiscard]] virtual Kind kind() const = 0;
472
480 [[nodiscard]] virtual bool is_active() const = 0;
481
494 virtual std::optional<std::string> get_current_mid() const = 0;
495
504 virtual Promise<void> disable() = 0;
505
512
519};
520
525 public:
531 struct Layer {
532 std::optional<std::string> encodingId;
533 std::optional<int> spatialLayerId;
534 std::optional<int> temporalLayerId;
535 std::optional<int> maxSpatialLayerId;
536 std::optional<int> maxTemporalLayerId;
537
538 operator bool() const noexcept {
539 return encodingId || spatialLayerId || temporalLayerId ||
540 maxSpatialLayerId || maxTemporalLayerId;
541 }
542 };
543
553
573 virtual Promise<void> enable(const std::shared_ptr<VideoRenderer>& renderer,
574 const Layer& layer = {},
575 bool promote = false) = 0;
576};
577
582 public:
585
591 virtual Promise<void> enable() = 0;
592
603 virtual Promise<void> set_volume(double volume) = 0;
604};
605
610 public:
613
623
648 const RtsRemoteVideoTrack::Layer& layer = {},
649 bool promote = false) = 0;
650
660 const std::shared_ptr<VideoRenderer>& renderer) = 0;
661
668 virtual Promise<void> remove_renderer(const VideoRenderer* renderer) = 0;
669
680};
681
730
731} // namespace millicast
732
733#endif /* TRACK_H */
The AudioRenderer class is responsible for rendering audio in a specific way in your application.
Definition renderer.h:70
The AudioTrack class.
Definition track.h:122
virtual void set_volume(double volume)=0
Set the track's volume.
~AudioTrack() override=default
virtual void add_renderer(AudioRenderer *renderer)=0
Add an audio renderer to render this track. Several renderers can be added to the track....
virtual void remove_renderer(AudioRenderer *renderer)=0
Remove a renderer from the renderer list.
Definition promise.h:45
Definition track.h:581
MC_DISABLE_COPY_AND_ASSIGN(RtsRemoteAudioTrack)
virtual Promise< void > set_volume(double volume)=0
virtual Promise< void > enable()=0
Definition track.h:299
virtual Promise< void > disable()=0
virtual EventConnectionPtr add_event_handler(EventHandler< Inactive > &&handler)=0
virtual Kind kind() const =0
virtual EventConnectionPtr add_event_handler(EventHandler< Active > &&handler)=0
virtual const std::optional< std::string > & source_id() const =0
MC_DISABLE_COPY_AND_ASSIGN(RtsRemoteTrack)
virtual EventConnectionPtr add_event_handler(EventHandler< FrameMetadata > &&handler)=0
virtual EventConnectionPtr add_event_handler(EventHandler< Layers > &&handler)=0
virtual EventConnectionPtr add_event_handler(EventHandler< RtsStatsEvent > &&handler)=0
virtual EventConnectionPtr add_event_handler(EventHandler< MidUpdated > &&handler)=0
virtual RtsRemoteVideoTrack * as_video()=0
virtual bool is_active() const =0
virtual std::optional< std::string > get_current_mid() const =0
virtual RtsRemoteAudioTrack * as_audio()=0
Definition track.h:524
virtual millicast::Promise< void > enable_frame_metadata(bool enabled)=0
MC_DISABLE_COPY_AND_ASSIGN(RtsRemoteVideoTrack)
virtual Promise< void > enable(const std::shared_ptr< VideoRenderer > &renderer, const Layer &layer={}, bool promote=false)=0
The Track class represent a media sources.
Definition track.h:33
virtual const std::string & kind() const =0
Get the track's kind.
virtual const std::string & id() const =0
Get the track's id.
virtual void enable(bool e)=0
enable or disable the track. A disabled track will produce silence (if audio) or black frames (if vid...
virtual ~Track()=default
virtual bool is_enabled() const =0
Tell whether the track is enabled or not.
The VideoRenderer class Inherits this class to receive video frames and render them in your applicati...
Definition renderer.h:46
The VideoTrack class.
Definition track.h:75
~VideoTrack() override=default
virtual void remove_renderer(VideoRenderer *renderer)=0
Remove a renderer from the renderer list.
virtual ContentHint content_hint() const noexcept=0
Get the current content hint for this track.
ContentHint
Video track content hint, used to override the source is_screencast property.
Definition track.h:81
virtual void set_content_hint(ContentHint hint) noexcept=0
Set the content hint for this track.
virtual void add_renderer(VideoRenderer *renderer)=0
Add a VideoRenderer to render this video track. Several renderers can be added to the track....
Definition track.h:685
MC_DISABLE_COPY_AND_ASSIGN(WebrtcRemoteAudioTrack)
virtual Promise< void > set_volume(double volume)=0
virtual Promise< RtsRemoteAudioTrack * > current_projection()=0
virtual Promise< void > project(RtsRemoteAudioTrack &rts_track)=0
Definition track.h:176
Kind
Definition track.h:184
@ AUDIO
audio
Definition track.h:185
virtual EventConnectionPtr add_event_handler(EventHandler< MidUpdated > &&handler)=0
virtual EventConnectionPtr add_event_handler(EventHandler< Disabled > &&handler)=0
MC_DISABLE_COPY_AND_ASSIGN(WebrtcRemoteTrack)
virtual WebrtcRemoteAudioTrack * as_audio()=0
virtual Promise< void > unproject()=0
virtual WebrtcRemoteVideoTrack * as_video()=0
virtual std::optional< std::string > get_current_mid() const =0
virtual EventConnectionPtr add_event_handler(EventHandler< FrameMetadata > &&handler)=0
virtual const std::string & get_cname() const =0
virtual Kind kind() const =0
Definition track.h:609
virtual Promise< void > project(RtsRemoteVideoTrack &rts_track, const RtsRemoteVideoTrack::Layer &layer={}, bool promote=false)=0
virtual Promise< void > add_renderer(const std::shared_ptr< VideoRenderer > &renderer)=0
virtual Promise< void > remove_renderer(const VideoRenderer *renderer)=0
virtual Promise< RtsRemoteVideoTrack * > current_projection()=0
virtual millicast::Promise< void > enable_frame_metadata(bool enabled)=0
MC_DISABLE_COPY_AND_ASSIGN(WebrtcRemoteVideoTrack)
#define MILLICAST_API
Definition exports.h:51
Definition capabilities.h:15
std::function< void(const EventTypes &...)> EventHandler
Definition event_handling.h:10
std::unique_ptr< EventConnection > EventConnectionPtr
Definition event_handling.h:31
Definition track.h:322
The layer data is used to select a simulcast/svc layer. by sending a command to the server using the ...
Definition track.h:378
std::optional< int > temporal_layer_id
Definition track.h:387
std::string encoding_id
Definition track.h:379
std::optional< Resolution > layer_resolution
The resolution of the frame for simulcast / SVC layer.
Definition track.h:390
std::optional< int > max_spatial_layer_id
Definition track.h:396
std::optional< int > max_temporal_layer_id
Definition track.h:393
std::optional< int > spatial_layer_id
Definition track.h:388
Represents resolution of a video frame.
Definition track.h:369
Definition track.h:367
std::vector< Layer > active
Definition track.h:399
std::vector< std::string > inactive
Definition track.h:400
const std::shared_ptr< const RtsTrackStats > track_stats
Definition track.h:351
std::optional< int > maxTemporalLayerId
Definition track.h:536
std::optional< int > temporalLayerId
Definition track.h:534
std::optional< std::string > encodingId
Definition track.h:532
std::optional< int > maxSpatialLayerId
Definition track.h:535
std::optional< int > spatialLayerId
Definition track.h:533
std::optional< std::string > mid
Definition track.h:216