Twitch SDK (Internal)
broadcastapi.h
Go to the documentation of this file.
1 /********************************************************************************************
2 * Twitch Broadcasting SDK
3 *
4 * This software is supplied under the terms of a license agreement with Twitch Interactive, Inc. and
5 * may not be copied or used except in accordance with the terms of that agreement
6 * Copyright (c) 2012-2016 Twitch Interactive, Inc.
7 *********************************************************************************************/
8 
9 #pragma once
10 
11 #include "twitchsdk/core/coreapi.h"
12 #include "twitchsdk/core/module.h"
14 
15 #include <unordered_set>
16 #include <map>
17 #include <memory>
18 #include <atomic>
19 
20 namespace ttv
21 {
22  class TaskRunner;
23  class UserRepository;
24  class SettingRepository;
25 
26  namespace broadcast
27  {
28  class BroadcastAPI;
29  class BroadcastApiInternalData;
30  class IBroadcastAPIListener;
31  class IIngestTesterListener;
32  class UserBroadcastStateHost;
33  class TwitchAPI;
34  class Streamer;
35  class IVideoEncoder;
36  class IAudioEncoder;
37  class IAudioCapture;
38  class IVideoCapture;
39  class IIngestTester;
40  class IBandwidthStatListener;
41  class IMuxer;
42  }
43 }
44 
74 {
75 public:
76  using StartBroadcastCallback = std::function<void(TTV_ErrorCode ec)>;
77  using StopBroadcastCallback = std::function<void(TTV_ErrorCode ec)>;
78  using FetchIngestListCallback = std::function<void(TTV_ErrorCode ec, std::vector<IngestServer>&& result)>;
79  using RunCommercialCallback = std::function<void(TTV_ErrorCode ec)>;
80  using SetStreamInfoCallback = std::function<void(TTV_ErrorCode ec)>;
81 
82 public:
83  BroadcastAPI();
84  virtual ~BroadcastAPI();
85 
86  // IModule implementation
87  virtual std::string GetModuleName() const override;
88  virtual TTV_ErrorCode Initialize(const InitializeCallback& callback) override;
89  virtual TTV_ErrorCode Shutdown(const ShutdownCallback& callback) override;
90  virtual TTV_ErrorCode Update() override;
91 
96  TTV_ErrorCode SetCoreApi(const std::shared_ptr<CoreAPI>& coreApi);
100  TTV_ErrorCode SetListener(const std::shared_ptr<IBroadcastAPIListener>& listener);
107  TTV_ErrorCode SetCustomMuxer(const std::shared_ptr<IMuxer>& muxer);
111  TTV_ErrorCode SetBroadcasterSoftware(const std::string& str);
115  TTV_ErrorCode SetForceArchiveBroadcast(bool forceArchive);
125  TTV_ErrorCode SetVideoEncoder(const std::shared_ptr<IVideoEncoder>& encoder);
129  TTV_ErrorCode SetAudioEncoder(const std::shared_ptr<IAudioEncoder>& encoder);
133  TTV_ErrorCode SetVideoCapturer(const std::shared_ptr<IVideoCapture>& capturer);
140  TTV_ErrorCode SetAudioCapturer(AudioLayerId layer, const std::shared_ptr<IAudioCapture>& capturer);
149  TTV_ErrorCode SetAudioLayerVolume(AudioLayerId layer, float volume);
154  TTV_ErrorCode SetAudioLayerMuted(AudioLayerId layer, bool muted);
160  TTV_ErrorCode SetAudioLayerEnabled(AudioLayerId layer, bool enabled);
164  TTV_ErrorCode SetVideoParams(const VideoParams& videoParams);
172  TTV_ErrorCode SetOutputPath(const std::wstring& outputPath);
180  TTV_ErrorCode SetSessionId(const std::string& sessionId);
184  TTV_ErrorCode AddBandwidthStatListener(const std::shared_ptr<IBandwidthStatListener>& listener);
188  TTV_ErrorCode RemoveBandwidthStatListener(const std::shared_ptr<IBandwidthStatListener>& listener);
198  TTV_ErrorCode StopBroadcast(const std::string& reason, StopBroadcastCallback&& callback);
202  TTV_ErrorCode GetCurrentBroadcastTime(uint64_t& broadcastTime);
216 
221 
227  TTV_ErrorCode RunCommercial(UserId userId, ChannelId channelId, uint32_t timebreakSeconds, RunCommercialCallback&& callback);
232  TTV_ErrorCode SetStreamInfo(UserId userId, ChannelId channelId, const std::string& game, const std::string& title, SetStreamInfoCallback&& callback);
237  TTV_ErrorCode CreateIngestTester(UserId userId, const std::shared_ptr<IIngestTesterListener>& listener, const uint8_t* testDataBuffer, uint32_t testDataLength, std::shared_ptr<IIngestTester>& result);
241  TTV_ErrorCode DisposeIngestTester(const std::shared_ptr<IIngestTester>& ingestTester);
245  static void GetRequiredAuthScopes(std::vector<std::string>& scopes);
246 
247 private:
249  {
250  public:
252 
253  // ICoreApiClient implementation
254  virtual std::string GetClientName();
255  virtual void GetRequiredOAuthScopes(std::vector<std::string>& scopes);
256  virtual void CoreUserLoggedIn(std::shared_ptr<User> user);
257  virtual void CoreUserLoggedOut(std::shared_ptr<User> user);
258 
259  private:
261  };
262 
263  // ICoreApiClient implementation
264  void CoreUserLoggedIn(std::shared_ptr<User> user);
265  void CoreUserLoggedOut(std::shared_ptr<User> user);
266 
267  // ModuleBase overrides
268  virtual bool CheckShutdown() override;
269  virtual void CompleteShutdown() override;
270 
271  std::shared_ptr<Streamer> CreateStreamer(const std::shared_ptr<User>& user);
272  std::shared_ptr<TwitchAPI> CreateTwitchAPI(const std::shared_ptr<User>& user);
273  TTV_ErrorCode GetStreamer(std::shared_ptr<Streamer>& result);
274  TTV_ErrorCode EnsureBroadcastingAndGetStreamer(std::shared_ptr<Streamer>& result);
275  TTV_ErrorCode EnsureNotBroadcastingAndGetStreamer(std::shared_ptr<Streamer>& result);
276 
277  TTV_ErrorCode BindToUser(const std::shared_ptr<User>& user);
278 
280 
281  std::shared_ptr<BroadcastApiInternalData> mInternalData;
282  std::shared_ptr<CoreApiClient> mCoreApiClient;
283 };
uint32_t UserId
Definition: coretypes.h:22
TTV_ErrorCode SetActiveUser(UserId userId)
TTV_ErrorCode StartBroadcast(StartBroadcastCallback &&callback)
TTV_ErrorCode SetSelectedIngestServer(const IngestServer &server)
TTV_ErrorCode SetVideoParams(const VideoParams &videoParams)
TTV_ErrorCode EnsureBroadcastingAndGetStreamer(std::shared_ptr< Streamer > &result)
TTV_ErrorCode SetAudioLayerMuted(AudioLayerId layer, bool muted)
Definition: coreapi.h:51
TTV_ErrorCode StopBroadcast(const std::string &reason, StopBroadcastCallback &&callback)
TTV_ErrorCode AddBandwidthStatListener(const std::shared_ptr< IBandwidthStatListener > &listener)
virtual void CoreUserLoggedOut(std::shared_ptr< User > user)
std::function< void(TTV_ErrorCode ec)> SetStreamInfoCallback
Definition: broadcastapi.h:80
void SetBroadcastState(TTV_ErrorCode ec, BroadcastState state)
TTV_ErrorCode RemoveAudioCapturer(AudioLayerId layer)
std::shared_ptr< BroadcastApiInternalData > mInternalData
Definition: broadcastapi.h:281
TTV_ErrorCode GetVideoParams(VideoParams &videoParams)
uint32_t AudioLayerId
Definition: broadcasttypes.h:192
TTV_ErrorCode EnsureNotBroadcastingAndGetStreamer(std::shared_ptr< Streamer > &result)
TTV_ErrorCode SetSessionId(const std::string &sessionId)
TTV_ErrorCode SetBroadcasterSoftware(const std::string &str)
TTV_ErrorCode GetStreamer(std::shared_ptr< Streamer > &result)
std::function< void(TTV_ErrorCode ec)> InitializeCallback
Definition: module.h:48
JSON (JavaScript Object Notation).
Definition: adsapi.h:16
virtual TTV_ErrorCode Update() override
TTV_ErrorCode SetAudioEncoder(const std::shared_ptr< IAudioEncoder > &encoder)
Definition: broadcastapi.h:248
TTV_ErrorCode SetStreamInfo(UserId userId, ChannelId channelId, const std::string &game, const std::string &title, SetStreamInfoCallback &&callback)
std::function< void(TTV_ErrorCode ec, std::vector< IngestServer > &&result)> FetchIngestListCallback
Definition: broadcastapi.h:78
TTV_ErrorCode GetCurrentBroadcastTime(uint64_t &broadcastTime)
ConnectionType
Definition: broadcasttypes.h:154
Definition: broadcasttypes.h:80
TTV_ErrorCode SetCustomMuxer(const std::shared_ptr< IMuxer > &muxer)
Definition: broadcasttypes.h:32
virtual TTV_ErrorCode Initialize(const InitializeCallback &callback) override
TTV_ErrorCode SetConnectionType(ConnectionType connectionType)
uint32_t TTV_ErrorCode
Definition: errortypes.h:30
TTV_ErrorCode BindToUser(const std::shared_ptr< User > &user)
std::function< void(TTV_ErrorCode ec)> ShutdownCallback
Definition: module.h:49
Definition: broadcastapi.h:73
TTV_ErrorCode GetBroadcastState(BroadcastState &result) const
TTV_ErrorCode SetAudioLayerEnabled(AudioLayerId layer, bool enabled)
TTV_ErrorCode RunCommercial(UserId userId, ChannelId channelId, uint32_t timebreakSeconds, RunCommercialCallback &&callback)
TTV_ErrorCode SetOutputPath(const std::wstring &outputPath)
std::function< void(TTV_ErrorCode ec)> RunCommercialCallback
Definition: broadcastapi.h:79
TTV_ErrorCode CreateIngestTester(UserId userId, const std::shared_ptr< IIngestTesterListener > &listener, const uint8_t *testDataBuffer, uint32_t testDataLength, std::shared_ptr< IIngestTester > &result)
BroadcastAPI * mApi
Definition: broadcastapi.h:260
std::shared_ptr< TwitchAPI > CreateTwitchAPI(const std::shared_ptr< User > &user)
virtual void GetRequiredOAuthScopes(std::vector< std::string > &scopes)
virtual bool CheckShutdown() override
std::shared_ptr< CoreApiClient > mCoreApiClient
The client instance registered with CoreAPI.
Definition: broadcastapi.h:282
std::function< void(TTV_ErrorCode ec)> StartBroadcastCallback
Definition: broadcastapi.h:76
TTV_ErrorCode SetListener(const std::shared_ptr< IBroadcastAPIListener > &listener)
Definition: module.h:85
virtual void CompleteShutdown() override
TTV_ErrorCode SetAudioLayerVolume(AudioLayerId layer, float volume)
virtual std::string GetModuleName() const override
BroadcastState
Definition: broadcasttypes.h:231
uint32_t ChannelId
Definition: coretypes.h:23
static void GetRequiredAuthScopes(std::vector< std::string > &scopes)
virtual void CoreUserLoggedIn(std::shared_ptr< User > user)
TTV_ErrorCode SetCoreApi(const std::shared_ptr< CoreAPI > &coreApi)
TTV_ErrorCode DisposeIngestTester(const std::shared_ptr< IIngestTester > &ingestTester)
TTV_ErrorCode FetchIngestServerList(FetchIngestListCallback &&callback)
TTV_ErrorCode SetVideoCapturer(const std::shared_ptr< IVideoCapture > &capturer)
TTV_ErrorCode SetVideoEncoder(const std::shared_ptr< IVideoEncoder > &encoder)
std::function< void(TTV_ErrorCode ec)> StopBroadcastCallback
Definition: broadcastapi.h:77
TTV_ErrorCode RemoveBandwidthStatListener(const std::shared_ptr< IBandwidthStatListener > &listener)
TTV_ErrorCode GetSelectedIngestServer(IngestServer &result)
std::shared_ptr< Streamer > CreateStreamer(const std::shared_ptr< User > &user)
TTV_ErrorCode SetAudioCapturer(AudioLayerId layer, const std::shared_ptr< IAudioCapture > &capturer)
TTV_ErrorCode SetForceArchiveBroadcast(bool forceArchive)
virtual TTV_ErrorCode Shutdown(const ShutdownCallback &callback) override