5#ifndef SKYWAY_CORE_INTERFACE_PUBLICATION_HPP_
6#define SKYWAY_CORE_INTERFACE_PUBLICATION_HPP_
8#include "skyway/core/connection_state.hpp"
9#include "skyway/core/interface/local_media_stream.hpp"
10#include "skyway/core/interface/local_stream.hpp"
11#include "skyway/core/interface/member.hpp"
12#include "skyway/core/interface/subscription.hpp"
18using LocalStream = interface::LocalStream;
21enum class PublicationState { kEnabled, kDisabled, kCanceled };
27class Publication :
public std::enable_shared_from_this<Publication>,
28 public ConnectionStateChangeNotifiable {
38 virtual void OnSubscribed(std::shared_ptr<interface::Subscription> subscription) {}
40 virtual void OnUnsubscribed(std::shared_ptr<interface::Subscription> subscription) {}
57 class InternalListener {
59 virtual void OnEncodingsUpdated(std::shared_ptr<interface::Publication> publication,
60 std::vector<model::Encoding> encodings) {}
61 virtual void OnStreamReplaced(std::shared_ptr<interface::Publication> publication,
62 std::shared_ptr<LocalMediaStream> stream) {}
63 virtual void OnSubscribed(std::shared_ptr<interface::Subscription> subscription) {}
67 virtual const std::optional<nlohmann::json> GetStatsReport(
68 std::shared_ptr<interface::Publication> publication) = 0;
71 virtual ~Publication() =
default;
80 virtual void AddInternalListener(InternalListener* listener) = 0;
81 virtual void RemoveInternalListener(InternalListener* listener) = 0;
85 virtual std::string
Id()
const = 0;
87 virtual std::shared_ptr<interface::Member>
Publisher()
const = 0;
89 virtual std::vector<std::shared_ptr<interface::Subscription>>
Subscriptions()
const = 0;
90 virtual model::PublicationType Type()
const = 0;
94 virtual std::optional<std::string>
Metadata()
const = 0;
96 virtual std::shared_ptr<interface::Publication>
Origin()
const = 0;
100 virtual std::vector<model::Encoding>
Encodings()
const = 0;
102 virtual PublicationState
State() = 0;
106 virtual std::shared_ptr<LocalStream>
Stream()
const = 0;
116 [[deprecated]]
virtual bool Cancel()
const = 0;
124 [[deprecated]]
virtual std::optional<model::WebRTCStats>
GetStats(
125 const std::string& selector) = 0;
127 virtual void AddGetStatsCallback(
const std::string& remote_member_id, Callback* callback) = 0;
128 virtual void RemoveGetStatsCallback(
const std::string& remote_member_id) = 0;
133 virtual void SetCodecCapabilities(std::vector<model::Codec> codec_capabilities) = 0;
134 virtual void SetEncodings(std::vector<model::Encoding> encodings) = 0;
135 virtual void SetStream(std::shared_ptr<LocalStream> stream) = 0;
136 virtual bool IsEnabling() = 0;
137 virtual void Dispose() = 0;
139 virtual void OnUnpublished() = 0;
140 virtual void OnSubscribed(std::shared_ptr<interface::Subscription> subscription) = 0;
141 virtual void OnUnsubscribed(std::shared_ptr<interface::Subscription> subscription) = 0;
142 virtual void OnMetadataUpdated(
const std::string& metadata) = 0;
143 virtual void OnEnabled() = 0;
144 virtual void OnDisabled() = 0;
イベントリスナ
Definition publication.hpp:31
virtual void OnUnpublished()
このPublicationがUnpublishされた時に発火するイベント
Definition publication.hpp:35
virtual void OnDisabled()
このPublicationの通信が無効になった時に発火するイベント。 Publication.Disableが実行された時に発火します。
Definition publication.hpp:50
virtual void OnStateChanged()
このPublicationのStateが変化した時に発火するイベント
Definition publication.hpp:52
virtual void OnConnectionStateChanged(const core::ConnectionState new_state)
このPublicationのメディア通信の状態が変化した時に発火するイベント
Definition publication.hpp:54
virtual void OnSubscriptionListChanged()
このPublicationに対するSubscriptionの数が変更された時に発火するイベント
Definition publication.hpp:42
virtual void OnMetadataUpdated(const std::string &metadata)
このPublicationのMetadataが変化した時に発火するイベント
Definition publication.hpp:44
virtual void OnEnabled()
このPublicationの通信が有効になった時に発火するイベント。 Publication.Enableが実行された時に発火します。
Definition publication.hpp:47
virtual void OnUnsubscribed(std::shared_ptr< interface::Subscription > subscription)
このPublicationがUnsubscribeされた時に発火するイベント
Definition publication.hpp:40
virtual void OnSubscribed(std::shared_ptr< interface::Subscription > subscription)
このPublicationがSubscribeされた時に発火するイベント
Definition publication.hpp:38
Publicationのインターフェース
Definition publication.hpp:28
virtual void AddEventListener(EventListener *listener)=0
イベントを購読します。
virtual std::shared_ptr< LocalStream > Stream() const =0
Publisherが持つStreamを取得します。
virtual bool Disable() const =0
Publicationの公開を一時停止します。
virtual std::shared_ptr< interface::Publication > Origin() const =0
このPublicationのOriginを取得します。
virtual std::optional< model::WebRTCStats > GetStats(const std::string &selector)=0
統計情報を取得します。
virtual PublicationState State()=0
State(公開状態がEnableかDisabelかCancelか)を取得します。
virtual bool UpdateEncodings(std::vector< model::Encoding > encodings)=0
エンコーディング設定を更新します。
virtual bool Cancel() const =0
Publishを中止します。
virtual std::optional< std::string > Metadata() const =0
Metadataを取得します。
virtual std::vector< model::Codec > CodecCapabilities() const =0
このPublicationのコーデック一覧を取得します。
virtual bool Enable()=0
Publicationの公開を開始します。disableによって停止していた場合は再開します。
virtual std::vector< std::shared_ptr< interface::Subscription > > Subscriptions() const =0
このPublicationを購読しているSubsciptionの一覧を取得します。
virtual void RemoveEventListener(EventListener *listener)=0
イベントの購読を中止します。
virtual std::shared_ptr< interface::Member > Publisher() const =0
このPublicationをPublishしているMemberを取得します。
virtual std::string Id() const =0
Idを取得します。
virtual model::ContentType ContentType() const =0
ContentType(VideoかAudioかDataか)を取得します。
virtual std::vector< model::Encoding > Encodings() const =0
このPublicationのエンコーディング設定の一覧を取得します。
virtual bool UpdateMetadata(const std::string &metadata)=0
Metadataを更新します。
virtual bool ReplaceStream(std::shared_ptr< LocalStream > stream)=0
公開しているStreamを変更します。