SkyWay for Linux
読み取り中…
検索中…
一致する文字列を見つけられません
publication.hpp
1//
2// publication.hpp
3// skyway
4//
5// Created by sandabu on 2022/01/13.
6// Copyright © 2022 NTT Communications. All rights reserved.
7//
8
9#ifndef SKYWAY_CORE_INTERFACE_PUBLICATION_HPP_
10#define SKYWAY_CORE_INTERFACE_PUBLICATION_HPP_
11
12#include "skyway/core/connection_state.hpp"
13#include "skyway/core/interface/local_media_stream.hpp"
14#include "skyway/core/interface/local_stream.hpp"
15#include "skyway/core/interface/member.hpp"
16#include "skyway/core/interface/subscription.hpp"
17
18namespace skyway {
19namespace core {
20namespace interface {
21
22using MemberInterface = interface::Member;
23using LocalStream = interface::LocalStream;
24
26enum class PublicationState { kEnabled, kDisabled, kCanceled };
27
29class Publication : public ConnectionStateChangeNotifiable {
30public:
33 public:
36 [[deprecated]] virtual void OnUnpublished() {}
39 virtual void OnSubscribed(Subscription* subscription) {}
41 virtual void OnUnsubscribed(Subscription* subscription) {}
43 virtual void OnSubscriptionListChanged() {}
45 virtual void OnMetadataUpdated(const std::string& metadata) {}
48 virtual void OnEnabled() {}
51 virtual void OnDisabled() {}
53 virtual void OnStateChanged() {}
55 virtual void OnConnectionStateChanged(const core::ConnectionState new_state) {}
56 };
58 class InternalListener {
59 public:
60 virtual void OnEncodingsUpdated(Publication* publication,
61 std::vector<model::Encoding> encodings) {}
62 virtual void OnStreamReplaced(Publication* publication,
63 std::shared_ptr<LocalMediaStream> stream) {}
64 virtual void OnSubscribed(Subscription* subscription) {}
65 };
66 class Callback {
67 public:
68 virtual const boost::optional<nlohmann::json> GetStatsReport(Publication* publication) = 0;
69 };
71 virtual ~Publication() = default;
72
75 virtual void AddEventListener(EventListener* listener) = 0;
78 virtual void RemoveEventListener(EventListener* listener) = 0;
80 virtual void AddInternalListener(InternalListener* listener) = 0;
81 virtual void RemoveInternalListener(InternalListener* listener) = 0;
83
85 virtual std::string Id() const = 0;
87 virtual MemberInterface* Publisher() const = 0;
89 virtual std::vector<Subscription*> Subscriptions() const = 0;
91 virtual model::ContentType ContentType() const = 0;
93 virtual boost::optional<std::string> Metadata() const = 0;
95 virtual Publication* Origin() const = 0;
97 virtual std::vector<model::Codec> CodecCapabilities() const = 0;
99 virtual std::vector<model::Encoding> Encodings() const = 0;
101 virtual PublicationState State() = 0;
102
103 // Publisher(LocalPerson) only has this pointer
105 virtual std::shared_ptr<LocalStream> Stream() const = 0;
106
108 virtual bool UpdateMetadata(const std::string& metadata) = 0;
110 virtual void UpdateEncodings(std::vector<model::Encoding> encodings) = 0;
112 virtual bool ReplaceStream(std::shared_ptr<LocalStream> stream) = 0;
115 [[deprecated]] virtual bool Cancel() const = 0;
117 virtual bool Enable() = 0;
119 virtual bool Disable() const = 0;
123 [[deprecated]] virtual boost::optional<model::WebRTCStats> GetStats(
124 const std::string& selector) = 0;
126 virtual void AddGetStatsCallback(const std::string& remote_member_id, Callback* callback) = 0;
127 virtual void RemoveGetStatsCallback(const std::string& remote_member_id) = 0;
129
131 // Do not wrap below APIs
132 virtual void SetCodecCapabilities(std::vector<model::Codec> codec_capabilities) = 0;
133 virtual void SetEncodings(std::vector<model::Encoding> encodings) = 0;
134 virtual void SetStream(std::shared_ptr<LocalStream> stream) = 0;
135 virtual bool IsEnabling() = 0;
136 virtual void Dispose() = 0;
137
138 virtual void OnUnpublished() = 0;
139 virtual void OnSubscribed(Subscription* subscription) = 0;
140 virtual void OnUnsubscribed(Subscription* subscription) = 0;
141 virtual void OnMetadataUpdated(const std::string& metadata) = 0;
142 virtual void OnEnabled() = 0;
143 virtual void OnDisabled() = 0;
145};
146
147} // namespace interface
148} // namespace core
149} // namespace skyway
150
151#endif /* SKYWAY_CORE_INTERFACE_PUBLICATION_HPP_ */
Publicationの実装クラス
Definition publication.hpp:19
LocalPersonおよびRemoteMemberの基底クラス
Definition member.hpp:32
イベントリスナ
Definition publication.hpp:32
virtual void OnSubscribed(Subscription *subscription)
このPublicationがSubscribeされた時に発火するイベント
Definition publication.hpp:39
virtual void OnUnpublished()
このPublicationがUnpublishされた時に発火するイベント
Definition publication.hpp:36
virtual void OnUnsubscribed(Subscription *subscription)
このPublicationがUnsubscribeされた時に発火するイベント
Definition publication.hpp:41
virtual void OnDisabled()
このPublicationの通信が無効になった時に発火するイベント。 Publication.Disableが実行された時に発火します。
Definition publication.hpp:51
virtual void OnStateChanged()
このPublicationのStateが変化した時に発火するイベント
Definition publication.hpp:53
virtual void OnConnectionStateChanged(const core::ConnectionState new_state)
このPublicationのメディア通信の状態が変化した時に発火するイベント
Definition publication.hpp:55
virtual void OnSubscriptionListChanged()
このPublicationに対するSubscriptionの数が変更された時に発火するイベント
Definition publication.hpp:43
virtual void OnMetadataUpdated(const std::string &metadata)
このPublicationのMetadataが変化した時に発火するイベント
Definition publication.hpp:45
virtual void OnEnabled()
このPublicationの通信が有効になった時に発火するイベント。 Publication.Enableが実行された時に発火します。
Definition publication.hpp:48
Publicationのインターフェース
Definition publication.hpp:29
virtual Publication * Origin() const =0
このPublicationのOriginを取得します。
virtual void AddEventListener(EventListener *listener)=0
イベントを購読します。
virtual std::shared_ptr< LocalStream > Stream() const =0
Publisherが持つStreamを取得します。
virtual bool Disable() const =0
Publicationの公開を一時停止します。
virtual std::vector< Subscription * > Subscriptions() const =0
このPublicationを購読しているSubsciptionの一覧を取得します。
virtual PublicationState State()=0
State(公開状態がEnableかDisabelかCancelか)を取得します。
virtual void UpdateEncodings(std::vector< model::Encoding > encodings)=0
エンコーディング設定を更新します。
virtual bool Cancel() const =0
Publishを中止します。
virtual boost::optional< model::WebRTCStats > GetStats(const std::string &selector)=0
統計情報を取得します。
virtual std::vector< model::Codec > CodecCapabilities() const =0
このPublicationのコーデック一覧を取得します。
virtual bool Enable()=0
Publicationの公開を開始します。disableによって停止していた場合は再開します。
virtual MemberInterface * Publisher() const =0
このPublicationをPublishしているMemberを取得します。
virtual boost::optional< std::string > Metadata() const =0
Metadataを取得します。
virtual void RemoveEventListener(EventListener *listener)=0
イベントの購読を中止します。
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を変更します。
Subscriptionのインターフェース
Definition subscription.hpp:27