1#ifndef MILLICAST_API_TRACK_H
2#define MILLICAST_API_TRACK_H
38 virtual ~Track() =
default;
45 [[nodiscard]]
virtual const std::string& id()
const = 0;
52 [[nodiscard]]
virtual const std::string& kind()
const = 0;
59 [[nodiscard]]
virtual bool is_enabled()
const = 0;
68 virtual void enable(
bool e) = 0;
83 enum class ContentHint { NONE, FLUID, DETAILED, TEXT };
85 VideoTrack() =
default;
86 ~VideoTrack()
override =
default;
95 virtual void add_renderer(VideoRenderer* renderer) = 0;
102 virtual void remove_renderer(VideoRenderer* renderer) = 0;
109 virtual void set_content_hint(ContentHint hint)
noexcept = 0;
115 [[nodiscard]]
virtual ContentHint content_hint() const noexcept = 0;
126 AudioTrack() =
default;
127 ~AudioTrack()
override =
default;
136 virtual void add_renderer(AudioRenderer* renderer) = 0;
143 virtual void remove_renderer(AudioRenderer* renderer) = 0;
150 virtual void set_volume(
double volume) = 0;
153#ifndef MC_DISABLE_COPY_AND_ASSIGN
154#define MC_DISABLE_COPY_AND_ASSIGN(Klass) \
155 Klass(Klass&&) = delete; \
156 Klass(const Klass&) = delete; \
157 Klass& operator=(Klass&&) = delete; \
158 Klass& operator=(const Klass&) = delete
162class RtsRemoteVideoTrack;
163class RtsRemoteAudioTrack;
164class WebrtcRemoteAudioTrack;
165class WebrtcRemoteVideoTrack;
180 WebrtcRemoteTrack() =
default;
181 MC_DISABLE_COPY_AND_ASSIGN(WebrtcRemoteTrack);
218 std::optional<std::string> mid;
225 [[nodiscard]]
virtual Kind kind()
const = 0;
233 virtual Promise<void> unproject() = 0;
247 virtual std::optional<std::string> get_current_mid()
const = 0;
249 virtual const std::string& get_cname()
const = 0;
256 virtual WebrtcRemoteVideoTrack* as_video() = 0;
263 virtual WebrtcRemoteAudioTrack* as_audio() = 0;
270 virtual EventConnectionPtr add_event_handler(
271 EventHandler<Disabled>&& handler) = 0;
278 virtual EventConnectionPtr add_event_handler(
279 EventHandler<MidUpdated>&& handler) = 0;
286 virtual EventConnectionPtr add_event_handler(
287 EventHandler<FrameMetadata>&& handler) = 0;
303 RtsRemoteTrack() =
default;
304 MC_DISABLE_COPY_AND_ASSIGN(RtsRemoteTrack);
352 struct RtsStatsEvent {
353 const std::shared_ptr<const RtsTrackStats> track_stats;
360 using MidUpdated = WebrtcRemoteTrack::MidUpdated;
381 std::string encoding_id;
385 std::optional<int> target_fps{};
388 std::optional<int> target_width{};
389 std::optional<int> temporal_layer_id;
390 std::optional<int> spatial_layer_id;
392 std::optional<Resolution> layer_resolution;
395 std::optional<int> max_temporal_layer_id;
398 std::optional<int> max_spatial_layer_id;
401 std::vector<Layer> active;
402 std::vector<std::string> inactive;
405 using Kind = WebrtcRemoteTrack::Kind;
412 virtual EventConnectionPtr add_event_handler(
413 EventHandler<Active>&& handler) = 0;
420 virtual EventConnectionPtr add_event_handler(
421 EventHandler<Inactive>&& handler) = 0;
428 virtual EventConnectionPtr add_event_handler(
429 EventHandler<Layers>&& handler) = 0;
436 virtual EventConnectionPtr add_event_handler(
437 EventHandler<MidUpdated>&& handler) = 0;
444 virtual EventConnectionPtr add_event_handler(
445 EventHandler<FrameMetadata>&& handler) = 0;
455 virtual EventConnectionPtr add_event_handler(
456 EventHandler<RtsStatsEvent>&& handler) = 0;
467 [[nodiscard]]
virtual const std::optional<std::string>& source_id()
const = 0;
473 [[nodiscard]]
virtual Kind kind()
const = 0;
482 [[nodiscard]]
virtual bool is_active()
const = 0;
496 virtual std::optional<std::string> get_current_mid()
const = 0;
506 virtual Promise<void> disable() = 0;
513 virtual RtsRemoteVideoTrack* as_video() = 0;
520 virtual RtsRemoteAudioTrack* as_audio() = 0;
526class MILLICAST_API RtsRemoteVideoTrack :
public virtual RtsRemoteTrack {
528 RtsRemoteVideoTrack() =
default;
529 MC_DISABLE_COPY_AND_ASSIGN(RtsRemoteVideoTrack);
534 std::optional<std::string> encodingId;
535 std::optional<int> spatialLayerId;
536 std::optional<int> temporalLayerId;
537 std::optional<int> maxSpatialLayerId;
538 std::optional<int> maxTemporalLayerId;
540 operator bool() const noexcept {
541 return encodingId || spatialLayerId || temporalLayerId ||
542 maxSpatialLayerId || maxTemporalLayerId;
554 virtual millicast::Promise<void> enable_frame_metadata(
bool enabled) = 0;
575 virtual Promise<void> enable(
const std::shared_ptr<VideoRenderer>& renderer,
576 const Layer& layer = {},
577 bool promote =
false) = 0;
583class MILLICAST_API RtsRemoteAudioTrack :
public virtual RtsRemoteTrack {
585 RtsRemoteAudioTrack() =
default;
586 MC_DISABLE_COPY_AND_ASSIGN(RtsRemoteAudioTrack);
593 virtual Promise<void> enable() = 0;
605 virtual Promise<void> set_volume(
double volume) = 0;
611class MILLICAST_API WebrtcRemoteVideoTrack :
public virtual WebrtcRemoteTrack {
613 WebrtcRemoteVideoTrack() =
default;
614 MC_DISABLE_COPY_AND_ASSIGN(WebrtcRemoteVideoTrack);
624 virtual millicast::Promise<void> enable_frame_metadata(
bool enabled) = 0;
649 virtual Promise<void> project(RtsRemoteVideoTrack& rts_track,
650 const RtsRemoteVideoTrack::Layer& layer = {},
651 bool promote =
false) = 0;
661 virtual Promise<void> add_renderer(
662 const std::shared_ptr<VideoRenderer>& renderer) = 0;
670 virtual Promise<void> remove_renderer(
const VideoRenderer* renderer) = 0;
681 virtual Promise<RtsRemoteVideoTrack*> current_projection() = 0;
687class MILLICAST_API WebrtcRemoteAudioTrack :
public virtual WebrtcRemoteTrack {
689 WebrtcRemoteAudioTrack() =
default;
690 MC_DISABLE_COPY_AND_ASSIGN(WebrtcRemoteAudioTrack);
707 virtual Promise<void> project(RtsRemoteAudioTrack& rts_track) = 0;
719 virtual Promise<void> set_volume(
double volume) = 0;
730 virtual Promise<RtsRemoteAudioTrack*> current_projection() = 0;
#define MILLICAST_API
Definition exports.h:51