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 std::optional<unsigned int> maxWidth;
542 std::optional<unsigned int> maxHeight;
544 operator bool() const noexcept {
545 return encodingId || spatialLayerId || temporalLayerId ||
546 maxSpatialLayerId || maxTemporalLayerId || maxWidth || maxHeight;
558 virtual millicast::Promise<void> enable_frame_metadata(
bool enabled) = 0;
579 virtual Promise<void> enable(
const std::shared_ptr<VideoRenderer>& renderer,
580 const Layer& layer = {},
581 bool promote =
false) = 0;
587class MILLICAST_API RtsRemoteAudioTrack :
public virtual RtsRemoteTrack {
589 RtsRemoteAudioTrack() =
default;
590 MC_DISABLE_COPY_AND_ASSIGN(RtsRemoteAudioTrack);
597 virtual Promise<void> enable() = 0;
609 virtual Promise<void> set_volume(
double volume) = 0;
615class MILLICAST_API WebrtcRemoteVideoTrack :
public virtual WebrtcRemoteTrack {
617 WebrtcRemoteVideoTrack() =
default;
618 MC_DISABLE_COPY_AND_ASSIGN(WebrtcRemoteVideoTrack);
628 virtual millicast::Promise<void> enable_frame_metadata(
bool enabled) = 0;
653 virtual Promise<void> project(RtsRemoteVideoTrack& rts_track,
654 const RtsRemoteVideoTrack::Layer& layer = {},
655 bool promote =
false) = 0;
665 virtual Promise<void> add_renderer(
666 const std::shared_ptr<VideoRenderer>& renderer) = 0;
674 virtual Promise<void> remove_renderer(
const VideoRenderer* renderer) = 0;
685 virtual Promise<RtsRemoteVideoTrack*> current_projection() = 0;
691class MILLICAST_API WebrtcRemoteAudioTrack :
public virtual WebrtcRemoteTrack {
693 WebrtcRemoteAudioTrack() =
default;
694 MC_DISABLE_COPY_AND_ASSIGN(WebrtcRemoteAudioTrack);
711 virtual Promise<void> project(RtsRemoteAudioTrack& rts_track) = 0;
723 virtual Promise<void> set_volume(
double volume) = 0;
734 virtual Promise<RtsRemoteAudioTrack*> current_projection() = 0;
#define MILLICAST_API
Definition exports.h:51