PrivMX Endpoint v2.7.0
Loading...
Searching...
No Matches
StreamApi.hpp
1/*
2PrivMX Endpoint.
3Copyright © 2024 Simplito sp. z o.o.
4
5This file is part of the PrivMX Platform (https://privmx.dev).
6This software is Licensed under the PrivMX Free License.
7
8See the License for the specific language governing permissions and
9limitations under the License.
10*/
11
12#ifndef _PRIVMXLIB_ENDPOINT_STREAM_STREAMAPI_HPP_
13#define _PRIVMXLIB_ENDPOINT_STREAM_STREAMAPI_HPP_
14
15#include <functional>
16#include <memory>
17#include <optional>
18#include <privmx/endpoint/core/Connection.hpp>
19#include <privmx/endpoint/core/Types.hpp>
20#include <privmx/endpoint/event/EventApi.hpp>
21#include <string>
22#include <vector>
23#include "privmx/endpoint/stream/webrtc/Types.hpp"
24#include "privmx/endpoint/stream/webrtc/OnTrackInterface.hpp"
25
26namespace privmx {
27namespace endpoint {
28namespace stream {
29
30class StreamApiImpl;
31
35class StreamApi {
36public:
37
46 static StreamApi create(core::Connection& connection, event::EventApi& eventApi);
47
51 StreamApi() = default;
52
66 std::string createStreamRoom(
67 const std::string& contextId,
68 const std::vector<core::UserWithPubKey>& users,
69 const std::vector<core::UserWithPubKey>&managers,
70 const core::Buffer& publicMeta,
71 const core::Buffer& privateMeta,
72 const std::optional<core::ContainerPolicy>& policies
73 );
74
90 const std::string& streamRoomId,
91 const std::vector<core::UserWithPubKey>& users,
92 const std::vector<core::UserWithPubKey>&managers,
93 const core::Buffer& publicMeta,
94 const core::Buffer& privateMeta,
95 const int64_t version,
96 const bool force,
97 const bool forceGenerateNewKey,
98 const std::optional<core::ContainerPolicy>& policies
99 );
100
109 core::PagingList<StreamRoom> listStreamRooms(const std::string& contextId, const core::PagingQuery& query);
110
118 StreamRoom getStreamRoom(const std::string& streamRoomId);
119
125 void deleteStreamRoom(const std::string& streamRoomId);
126
133 std::vector<std::string> subscribeFor(const std::vector<std::string>& subscriptionQueries);
134
140 void unsubscribeFrom(const std::vector<std::string>& subscriptionIds);
141
151 std::string buildSubscriptionQuery(EventType eventType, EventSelectorType selectorType, const std::string& selectorId);
152
159 std::vector<StreamInfo> listStreams(const std::string& streamRoomId);
160
167 void joinStreamRoom(const std::string& streamRoomId); // required before createStream and openStream
168
174 void leaveStreamRoom(const std::string& streamRoomId);
175
181 void enableStreamRoomRecording(const std::string& streamRoomId);
182
189 std::vector<stream::RecordingEncKey> getStreamRoomRecordingKeys(const std::string& streamRoomId);
190
198 StreamHandle createStream(const std::string& streamRoomId);
199
205 std::vector<AudioDevice> getAudioDevices();
206
212 std::vector<VideoDevice> getVideoDevices();
213
220 std::vector<DesktopDevice> getDesktopDevices(DesktopType desktopType);
221
231 MediaTrack addTrack(const StreamHandle& streamHandle, const MediaDevice& track, const MediaTrackConstrains& mediaTrackConstrains);
232
240 void removeTrack(const StreamHandle& streamHandle, const MediaDevice& track);
241
248 StreamPublishResult publishStream(const StreamHandle& streamHandle);
249
256 StreamPublishResult updateStream(const StreamHandle& streamHandle);
257
263 void unpublishStream(const StreamHandle& streamHandle);
264
271 void subscribeToRemoteStreams(const std::string& streamRoomId, const std::vector<StreamSubscription>& subscriptions);
272
280 void modifyRemoteStreamsSubscriptions(const std::string& streamRoomId, const std::vector<StreamSubscription>& subscriptionsToAdd, const std::vector<StreamSubscription>& subscriptionsToRemove);
281
288 void unsubscribeFromRemoteStreams(const std::string& streamRoomId, const std::vector<StreamSubscription>& subscriptionsToRemove);
289
296 void dropBrokenFrames(const std::string& streamRoomId, bool enable);
297
305 void addRemoteStreamListener(const std::string& streamRoomId, std::optional<int64_t> streamId, std::shared_ptr<OnTrackInterface> onTrack);
306
310 std::shared_ptr<StreamApiImpl> getImpl() const { return _impl; }
311
312private:
313 void validateEndpoint();
314 StreamApi(const std::shared_ptr<StreamApiImpl>& impl);
315 std::shared_ptr<StreamApiImpl> _impl;
316};
317
318} // namespace stream
319} // namespace endpoint
320} // namespace privmx
321
322#endif // _PRIVMXLIB_ENDPOINT_STREAM_STREAMAPI_HPP_
Definition Buffer.hpp:13
Definition Connection.hpp:22
Definition EventApi.hpp:18
std::vector< std::string > subscribeFor(const std::vector< std::string > &subscriptionQueries)
StreamRoom getStreamRoom(const std::string &streamRoomId)
StreamPublishResult updateStream(const StreamHandle &streamHandle)
void enableStreamRoomRecording(const std::string &streamRoomId)
std::string buildSubscriptionQuery(EventType eventType, EventSelectorType selectorType, const std::string &selectorId)
void leaveStreamRoom(const std::string &streamRoomId)
void subscribeToRemoteStreams(const std::string &streamRoomId, const std::vector< StreamSubscription > &subscriptions)
void addRemoteStreamListener(const std::string &streamRoomId, std::optional< int64_t > streamId, std::shared_ptr< OnTrackInterface > onTrack)
std::vector< StreamInfo > listStreams(const std::string &streamRoomId)
std::string createStreamRoom(const std::string &contextId, const std::vector< core::UserWithPubKey > &users, const std::vector< core::UserWithPubKey > &managers, const core::Buffer &publicMeta, const core::Buffer &privateMeta, const std::optional< core::ContainerPolicy > &policies)
void modifyRemoteStreamsSubscriptions(const std::string &streamRoomId, const std::vector< StreamSubscription > &subscriptionsToAdd, const std::vector< StreamSubscription > &subscriptionsToRemove)
void unpublishStream(const StreamHandle &streamHandle)
std::vector< AudioDevice > getAudioDevices()
std::shared_ptr< StreamApiImpl > getImpl() const
Definition StreamApi.hpp:310
static StreamApi create(core::Connection &connection, event::EventApi &eventApi)
void unsubscribeFromRemoteStreams(const std::string &streamRoomId, const std::vector< StreamSubscription > &subscriptionsToRemove)
StreamPublishResult publishStream(const StreamHandle &streamHandle)
void updateStreamRoom(const std::string &streamRoomId, const std::vector< core::UserWithPubKey > &users, const std::vector< core::UserWithPubKey > &managers, const core::Buffer &publicMeta, const core::Buffer &privateMeta, const int64_t version, const bool force, const bool forceGenerateNewKey, const std::optional< core::ContainerPolicy > &policies)
std::vector< VideoDevice > getVideoDevices()
void unsubscribeFrom(const std::vector< std::string > &subscriptionIds)
void joinStreamRoom(const std::string &streamRoomId)
void dropBrokenFrames(const std::string &streamRoomId, bool enable)
core::PagingList< StreamRoom > listStreamRooms(const std::string &contextId, const core::PagingQuery &query)
std::vector< DesktopDevice > getDesktopDevices(DesktopType desktopType)
void removeTrack(const StreamHandle &streamHandle, const MediaDevice &track)
MediaTrack addTrack(const StreamHandle &streamHandle, const MediaDevice &track, const MediaTrackConstrains &mediaTrackConstrains)
std::vector< stream::RecordingEncKey > getStreamRoomRecordingKeys(const std::string &streamRoomId)
void deleteStreamRoom(const std::string &streamRoomId)
StreamHandle createStream(const std::string &streamRoomId)
Definition Types.hpp:16