You.i Engine
YiAbstractVideoPlayer.h
Go to the documentation of this file.
1 // © You i Labs Inc. All rights reserved.
2 #ifndef _YI_ABSTRACT_VIDEO_PLAYER_H_
3 #define _YI_ABSTRACT_VIDEO_PLAYER_H_
4 
5 #include "network/YiUrl.h"
7 #include "player/YiCodecType.h"
8 #include "signal/YiSignal.h"
9 #include "utility/YiOptional.h"
10 #include "utility/YiRtti.h"
11 #include "utility/YiTime.h"
12 #include "utility/YiTimer.h"
13 
14 #include <glm/fwd.hpp>
15 #include <glm/vec2.hpp>
16 
17 #include <limits>
18 #include <map>
19 
20 class CYIAssetVideo;
23 class CYIColor;
24 class CYIHTTPHeader;
25 class CYIMaterial;
29 class CYIVideoSurface;
30 
64 {
66 
67 public:
68  using RTTIInstantiatability = CYIRuntimeTypeInfo::NonInstantiableTag;
69 
76  enum class MediaState
77  {
78  Unloaded,
79  Preparing,
80  Ready
81  };
82 
89  enum class PlaybackState
90  {
91  Playing,
92  Paused,
93  Buffering
94  };
95 
99  struct PlayerState
100  {
103  };
104 
110  enum class StreamingFormat
111  {
112  HLS = 0,
113  Smooth,
114  DASH,
115  MP4
116  };
117 
123  enum class DRMScheme
124  {
125  None = 0,
126  FairPlay,
127  PlayReady,
128  WidevineModular,
129  WidevineModularCustomRequest
130  };
131 
140  {
141  public:
142  virtual ~DRMConfiguration() = default;
143 
147  virtual DRMScheme GetScheme() const = 0;
148  };
149 
155  enum class ErrorCode
156  {
157  PlaybackError,
158  UnsupportedFormat,
159  StateTransitionError,
160  DRMError,
161  InitializationError,
163  Unknown
164  };
165 
169  struct Error
170  {
172  : errorCode(ErrorCode::Unknown)
173  {
174  }
175 
179  };
180 
184  struct TrackInfo
185  {
186  uint32_t id;
191  TrackInfo(uint32_t id)
192  : id(id)
193  {
194  }
195  TrackInfo(uint32_t id, const CYIString &name)
196  : id(id)
197  , name(name)
198  {
199  }
200  TrackInfo(uint32_t id, const CYIString &name, const CYIString &language)
201  : id(id)
202  , name(name)
203  , language(language)
204  {
205  }
206 
207  virtual ~TrackInfo() {}
208  };
209 
213  struct AudioTrackInfo : public TrackInfo
214  {
215  static uint32_t DEFAULT_TRACK_ID;
217  : TrackInfo(DEFAULT_TRACK_ID)
218  , isValid(false)
219  {
220  }
221  AudioTrackInfo(uint32_t id, const CYIString &name, const CYIString &language)
222  : TrackInfo(id, name, language)
223  , isValid(true)
224  {
225  }
226  AudioTrackInfo(const TrackInfo &trackInfo)
227  : TrackInfo(trackInfo)
228  , isValid(true)
229  {
230  }
231 
232  bool isValid;
240 
247 
254 
261  };
262 
267  {
268  static uint32_t OFF_TRACK_ID;
270  : TrackInfo(OFF_TRACK_ID)
271  {
272  }
273  ClosedCaptionsTrackInfo(uint32_t id, const CYIString &name, const CYIString &language)
274  : TrackInfo(id, name, language)
275  {
276  }
278  : TrackInfo(trackInfo)
279  {
280  }
281  };
282 
289  {
290  public:
291  virtual ~BackgroundPlaybackInterface() = default;
292 
296  virtual bool IsBackgroundPlaybackEnabled() const = 0;
297 
301  virtual void EnableBackgroundPlayback(bool enabled) = 0;
302 
307  virtual void SetMetadata(const CYIString &title, const CYIString &text, const CYIUrl &imageUri) = 0;
308 
312  virtual void SetRewindIncrementMs(std::chrono::milliseconds increment) = 0;
316  virtual void SetFastForwardIncrementMs(std::chrono::milliseconds increment) = 0;
317 
321  virtual void SetNotificationColor(const CYIColor &color) = 0;
322  };
323 
330  {
331  public:
332  virtual ~HeadphoneJackInterface() = default;
333 
337  virtual void EnablePauseOnHeadphonesUnplugged(bool enabled) = 0;
338 
342  virtual bool IsPausingOnHeadphonesUnplugged() const = 0;
343  };
344 
353  {
354  public:
355  virtual ~VideoRequestHTTPHeadersInterface() = default;
356 
360  virtual std::vector<CYIHTTPHeader> SetHeaders(const std::vector<CYIHTTPHeader> &customHeaders) = 0;
361 
365  virtual bool AddHeader(const CYIHTTPHeader &header) = 0;
366 
370  virtual bool RemoveHeader(const CYIString &name) = 0;
371 
375  virtual void ClearHeaders() = 0;
376 
380  virtual std::vector<CYIHTTPHeader> GetHeaders() const = 0;
381  };
382 
387  {
391  std::chrono::milliseconds min;
392 
396  std::chrono::milliseconds max;
397 
398  BufferLength(std::chrono::milliseconds minIn, std::chrono::milliseconds maxIn)
399  : min(minIn)
400  , max(maxIn)
401  {
402  }
403 
408  : min(0)
409  , max(0)
410  {
411  }
412  };
413 
424  {
425  public:
426  virtual ~BufferingInterface() = default;
427 
431  virtual void SetBufferLength(const BufferLength &bufferLength) = 0;
432 
436  virtual BufferLength GetBufferLength() const = 0;
437  };
438 
445  {
446  // ID3 Related Keys
451 
452  // DASH Event Message Related Keys
482  static const CYIString EventMessageId;
487  };
488 
493  {
497  TimedMetadata();
498 
501  std::chrono::microseconds timestamp;
502  std::chrono::microseconds duration;
503  std::map<CYIString, CYIString> additionalData;
504  };
505 
512  {
513  public:
514  virtual ~TimedMetadataInterface() = default;
515 
522  };
523 
530  {
531  public:
539  {
540  public:
541  virtual ~ControlsHandler() = default;
542 
546  virtual void OnPlay(CYIAbstractVideoPlayer *pPlayer);
547 
551  virtual void OnPause(CYIAbstractVideoPlayer *pPlayer);
552 
556  virtual void OnSeek(CYIAbstractVideoPlayer *pPlayer, uint64_t positionMs);
557 
563  virtual void OnFastForward(CYIAbstractVideoPlayer *pPlayer);
564 
570  virtual void OnRewind(CYIAbstractVideoPlayer *pPlayer);
571 
575  virtual void OnStop(CYIAbstractVideoPlayer *pPlayer);
576 
582  virtual void OnNext(CYIAbstractVideoPlayer *pPlayer);
583 
589  virtual void OnPrevious(CYIAbstractVideoPlayer *pPlayer);
590 
594  virtual void OnClosedCaptionsEnabled(CYIAbstractVideoPlayer *pPlayer, bool enabled);
595  };
596 
597  virtual ~MediaPlaybackControlsInterface() = default;
598 
606  virtual void EnableMediaPlaybackControl(bool enabled) = 0;
607 
611  virtual bool IsMediaPlaybackControlEnabled() const = 0;
612 
618  virtual void SetControlsHandler(ControlsHandler *pControlsHandler) = 0;
619  };
620 
631  {
632  public:
633  virtual ~NetworkTimeoutInterface() = default;
634 
638  virtual void SetConnectionTimeout(std::chrono::milliseconds timeout) = 0;
639 
643  virtual std::chrono::milliseconds GetConnectionTimeout() const = 0;
644 
648  virtual void SetRequestTimeout(std::chrono::milliseconds timeout) = 0;
649 
653  virtual std::chrono::milliseconds GetRequestTimeout() const = 0;
654  };
655 
660  {
661  public:
662  virtual ~LiveSessionInterface() = default;
663 
669  virtual void SetLivePresentationDelay(std::chrono::milliseconds liveDelay) = 0;
670  };
671 
676  {
677  public:
678  virtual ~AdaptiveResolutionInterface() = default;
679 
685  virtual void SetMaxResolution(glm::ivec2 maxResolution) = 0;
686  };
687 
688  virtual ~CYIAbstractVideoPlayer();
689 
693  CYIString GetName() const;
694 
701  CYIString GetVersion() const;
702 
708  struct Statistics
709  {
715  Statistics();
716 
717  bool operator==(const Statistics &other) const;
718  bool operator!=(const Statistics &other) const;
719 
723  bool isLive;
724 
731 
738 
745 
752 
759 
766 
773 
780 
787 
794  };
795 
799  Statistics GetStatistics() const;
800 
806  void Init();
807 
821  void Prepare(const CYIUrl &videoURI, StreamingFormat formatHint, CYIAbstractVideoPlayer::PlaybackState initialState = CYIAbstractVideoPlayer::PlaybackState::Paused, std::unique_ptr<DRMConfiguration> pDRMConfiguration = nullptr, uint64_t startTimeMs = 0);
822 
828  void Prepare(const std::shared_ptr<CYIAssetVideo> &videoAsset, StreamingFormat formatHint, CYIAbstractVideoPlayer::PlaybackState initialState = CYIAbstractVideoPlayer::PlaybackState::Paused, std::unique_ptr<DRMConfiguration> pDRMConfiguration = nullptr, uint64_t startTimeMs = 0);
829 
835  void Play();
836 
842  void Pause();
843 
847  void Stop();
848 
856  {
860  SeekableRange(uint64_t startTimeMs, uint64_t endTimeMs)
861  : startTimeMs(startTimeMs)
862  , endTimeMs(endTimeMs)
863  {
864  }
865 
869  uint64_t startTimeMs;
870 
874  uint64_t endTimeMs;
875  };
876 
884  std::vector<SeekableRange> GetLiveSeekableRanges() const;
885 
891  void Seek(uint64_t seekPositionMs);
892 
896  bool SupportsFormat(StreamingFormat streamingFormat, DRMScheme drmScheme = DRMScheme::None);
897 
901  uint64_t GetDurationMs() const;
902 
906  uint64_t GetCurrentTimeMs() const;
907 
914 
929  std::shared_ptr<CYIPlatformPlayerHandle> GetPlatformPlayerHandle() const;
930 
945  std::shared_ptr<CYIPlatformViewHandle> GetPlatformPlayerContainerViewHandle() const;
946 
952  void SetClosedCaptionsEnabled(bool enabled);
953 
962 
975  bool SelectClosedCaptionsTrack(uint32_t id);
976 
987  std::vector<ClosedCaptionsTrackInfo> GetClosedCaptionsTracks() const;
988 
997 
998  /*
999  \details Returns the closed captions dispatcher for the player.
1000 
1001  This will return null if the player implementation does not provide control over closed captions rendering.
1002  */
1004 
1005  /*
1006  \details Returns the closed captions style manager for the player.
1007 
1008  This will return null if the player implementation does not provide control over closed captions rendering.
1009 
1010  \note Currently only players which render captions using the #CYIClosedCaptionsDispatcher support the style manager.
1011  */
1013 
1017  CYIVideoSurface *GetSurface() const;
1018 
1024  bool AreAudioTracksAvailable() const;
1025 
1035  bool SelectAudioTrack(uint32_t id);
1036 
1047  std::vector<AudioTrackInfo> GetAudioTracks() const;
1048 
1057 
1061  bool IsMuted() const;
1062 
1066  void Mute(bool mute);
1067 
1074  uint64_t GetMinimumTimeUpdateIntervalMs() const;
1075 
1082  void SetMinimumTimeUpdateIntervalMs(uint64_t minimumTimeUpdateIntervalMs);
1083 
1093  void SetMaxBitrate(uint64_t maxBitrate);
1094 
1102  void SetInitialBandwidthHint(uint64_t initialBandwidthHint);
1103 
1115  void SetUserAgent(const CYIString &userAgent);
1116 
1124  const DRMConfiguration *GetDRMConfiguration() const;
1125 
1134 
1140 
1146 
1152 
1163 
1169 
1175 
1181 
1187 
1191  using RefreshDRMConfigurationCallback = std::function<std::unique_ptr<CYIAbstractVideoPlayer::DRMConfiguration>(std::unique_ptr<CYIAbstractVideoPlayer::DRMConfiguration>)>;
1193 
1199  CYISignal<std::shared_ptr<CYIPlatformPlayerHandle> /* pNewHandle */, std::shared_ptr<CYIPlatformPlayerHandle> /* pPreviousHandle */> PlatformPlayerHandleChanged;
1200 
1206  CYISignal<std::shared_ptr<CYIPlatformViewHandle> /* pNewHandle */, std::shared_ptr<CYIPlatformViewHandle> /* pPreviousHandle */> PlatformPlayerContainerViewHandleChanged;
1207 
1214 
1221 
1228 
1233 
1238 
1243 
1248 
1254 
1260 
1266 
1272 
1277 
1282 
1287 
1292 
1297 
1302 
1307 
1308 protected:
1310 
1314  const std::shared_ptr<CYIMaterial> &GetVideoMaterial() const;
1315 
1321  void SetPlatformPlayerHandle(std::shared_ptr<CYIPlatformPlayerHandle> pPlatformPlayerHandle);
1322 
1328  void SetPlatformPlayerContainerViewHandle(std::shared_ptr<CYIPlatformViewHandle> pPlatformPlayerContainerViewHandle);
1329 
1333  void SetVideoSurfaceSize(const glm::ivec2 &size);
1334 
1339 
1344 
1349 
1353  void UpdateCurrentTime();
1354 
1359 
1365 
1371 
1377 
1384 
1390  std::unique_ptr<CYIVideoPlayerStateManager> m_pStateManager;
1391 
1398  std::unique_ptr<CYIClosedCaptionsDispatcher> m_pClosedCaptionsDispatcher;
1399 
1406  std::unique_ptr<CYIClosedCaptionsStyleManager> m_pStyleManager;
1407 
1414  std::unique_ptr<DRMConfiguration> m_pDRMConfiguration;
1415 
1419  uint64_t m_maxBitrate;
1420 
1425 
1432 
1437 
1438 private:
1439  struct SeekState
1440  {
1441  enum class Direction
1442  {
1443  Forward,
1444  Reverse
1445  };
1446 
1447  bool active;
1448  Direction direction;
1449  uint64_t requestedPositionMs;
1450  uint64_t positionBeforeSeekMs;
1451  };
1452 
1453 #if defined(DOXY)
1454  // We want to document this private section because users override these methods called by the abstract player.
1455 protected:
1456 #endif
1457 
1461  virtual CYIString GetName_() const;
1462 
1468  virtual CYIString GetVersion_() const;
1469 
1473  virtual Statistics GetStatistics_() const;
1474 
1475  /*
1476  \details Subclasses can extend this function to do additional work outside of the constructor for initializing the player.
1477 
1478  \sa #Init
1479  */
1480  virtual void Init_();
1481 
1482  /*
1483  \details Subclasses must implement this function to create the correct CYIVideoSurface instance for the CYIAbstractVideoPlayer implementation.
1484 
1485  \note The surface will be stored in m_pVideoSurface and will be cleaned up automatically.
1486  */
1487  virtual std::unique_ptr<CYIVideoSurface> CreateSurface_() = 0;
1488 
1494  virtual bool SupportsFormat_(StreamingFormat streamingFormat, DRMScheme drmScheme = DRMScheme::None) const = 0;
1495 
1501  virtual bool HasNativeStartTimeHandling_() const;
1502 
1508  virtual bool HasNativeBitrateEventHandling_() const;
1509 
1518  virtual bool HasNativeSeekEventHandling_() const;
1519 
1527  virtual bool HasInitialBandwidthHintHandling_() const;
1528 
1550  virtual void Prepare_(const CYIUrl &videoURI, StreamingFormat format) = 0;
1551 
1561  virtual void Play_() = 0;
1562 
1572  virtual void Pause_() = 0;
1573 
1579  virtual void Stop_() = 0;
1580 
1586  virtual uint64_t GetDurationMs_() const = 0;
1587 
1593  virtual uint64_t GetCurrentTimeMs_() const = 0;
1594 
1600  virtual std::vector<SeekableRange> GetLiveSeekableRanges_() const = 0;
1601 
1607  virtual void Seek_(uint64_t seekPositionMS) = 0;
1608 
1617  virtual bool SelectAudioTrack_(uint32_t id) = 0;
1618 
1626  virtual std::vector<AudioTrackInfo> GetAudioTracks_() const = 0;
1627 
1637 
1643  virtual bool IsMuted_() const = 0;
1644 
1648  virtual void Mute_(bool mute) = 0;
1649 
1653  virtual void DisableClosedCaptions_() = 0;
1654 
1663  virtual bool SelectClosedCaptionsTrack_(uint32_t id) = 0;
1664 
1672  virtual std::vector<ClosedCaptionsTrackInfo> GetClosedCaptionsTracks_() const = 0;
1673 
1683 
1691  virtual void GetClosedCaptionsDispatcher_() const;
1692 
1696  virtual void SetMaxBitrate_(uint64_t maxBitrate);
1697 
1701  virtual void SetUserAgent_(const CYIString &userAgent);
1702 
1707 
1711  virtual const HeadphoneJackInterface *GetHeadphoneJackInterface_() const;
1712 
1716  virtual const BufferingInterface *GetBufferingInterface_() const;
1717 
1721  virtual const TimedMetadataInterface *GetTimedMetadataInterface_() const;
1722 
1727 
1732 
1737 
1741  virtual const LiveSessionInterface *GetLiveSessionInterface_() const;
1742 
1747 
1748 #if defined(DOXY)
1749 private:
1750 #endif
1751 
1752  void CheckAndNotifyAudioTracksChanged();
1753  void CheckAndNotifyClosedCaptionsTracksChanged();
1754  void CheckAndNotifyBitrateChanged();
1755  void OnNotifyErrorOccurred(Error error);
1756  void OnNotifyPlaybackComplete();
1757  void OnNotifyDurationChanged(uint64_t duration);
1758  void UpdateSeekState(uint64_t positionBeforeSeekMs, uint64_t requestedPositionMs);
1759  void OnNotifySeekCompleted(bool success, uint64_t positionAfterSeekMs);
1760  void ClearCachedTrackData();
1761  void OnStateReady();
1762  void OnStateUnloaded();
1763  void ClearClosedCaptions();
1764  void SetTimeUpdatesEnabled(bool enabled);
1765  void ClampSeekPositionToSeekableRange(uint64_t &seekPositionMs);
1766 
1767  std::shared_ptr<CYIPlatformPlayerHandle> m_pPlatformPlayerHandle;
1768  std::shared_ptr<CYIPlatformViewHandle> m_pPlatformPlayerContainerViewHandle;
1769 
1770  bool m_audioTracksAvailable;
1771  std::vector<AudioTrackInfo> m_audioTracksCache;
1772 
1773  float m_cachedTotalBitrate;
1774  float m_cachedVideoBitrate;
1775  float m_cachedAudioBitrate;
1776 
1777  std::unique_ptr<CYIVideoSurface> m_pVideoSurface;
1778  uint64_t m_lastNotifiedTime;
1779  PlaybackState m_initialPlaybackState;
1780  PlaybackState m_requestedInitialPlaybackState;
1781  CYITimer m_mediaTracksRefreshTimer;
1782  CYITimer m_bitrateRefreshTimer;
1783  CYITimer m_pTimeUpdateTimer;
1784  bool m_isMuted;
1785  SeekState m_seekState;
1786  uint64_t m_minimumTimeUpdateIntervalMs;
1787 
1788  bool m_closedCaptionsTracksAvailable;
1789  std::vector<ClosedCaptionsTrackInfo> m_closedCaptionsTracksCache;
1790  uint32_t m_previousClosedCaptionsTrackId;
1791  static const ClosedCaptionsTrackInfo CLOSED_CAPTIONS_OFF_TRACK;
1792 
1795 };
1796 
1801 // Audio tracks
1804 
1805 // Closed captions tracks
1806 bool operator==(const CYIAbstractVideoPlayer::ClosedCaptionsTrackInfo &closedCaptionsTrackL, const CYIAbstractVideoPlayer::ClosedCaptionsTrackInfo &closedCaptionsTrackR);
1807 bool operator!=(const CYIAbstractVideoPlayer::ClosedCaptionsTrackInfo &closedCaptionsTrackL, const CYIAbstractVideoPlayer::ClosedCaptionsTrackInfo &closedCaptionsTrackR);
1808 
1809 // Timed Metadata
1810 bool operator==(const CYIAbstractVideoPlayer::TimedMetadata &timedMetadataL, const CYIAbstractVideoPlayer::TimedMetadata &timedMetadataR);
1811 bool operator!=(const CYIAbstractVideoPlayer::TimedMetadata &timedMetadataL, const CYIAbstractVideoPlayer::TimedMetadata &timedMetadataR);
1812 
1813 //States
1814 bool operator==(const CYIAbstractVideoPlayer::PlayerState &playerStateL, const CYIAbstractVideoPlayer::PlayerState &playerStateR);
1815 bool operator==(const CYIAbstractVideoPlayer::PlayerState &playerState, const CYIAbstractVideoPlayer::MediaState &mediaState);
1816 bool operator==(const CYIAbstractVideoPlayer::MediaState &mediaState, const CYIAbstractVideoPlayer::PlayerState &playerState);
1817 bool operator==(const CYIAbstractVideoPlayer::PlayerState &playerState, const CYIAbstractVideoPlayer::PlaybackState &playbackState);
1818 bool operator==(const CYIAbstractVideoPlayer::PlaybackState &playbackState, const CYIAbstractVideoPlayer::PlayerState &playerState);
1819 
1820 bool operator!=(const CYIAbstractVideoPlayer::PlayerState &playerStateL, const CYIAbstractVideoPlayer::PlayerState &playerStateR);
1821 bool operator!=(const CYIAbstractVideoPlayer::PlayerState &playerState, const CYIAbstractVideoPlayer::MediaState &mediaState);
1822 bool operator!=(const CYIAbstractVideoPlayer::MediaState &mediaState, const CYIAbstractVideoPlayer::PlayerState &playerState);
1823 bool operator!=(const CYIAbstractVideoPlayer::PlayerState &playerState, const CYIAbstractVideoPlayer::PlaybackState &playbackState);
1824 bool operator!=(const CYIAbstractVideoPlayer::PlaybackState &playbackState, const CYIAbstractVideoPlayer::PlayerState &playerState);
1825 
1826 #endif //ifndef _YI_ABSTRACT_VIDEO_PLAYER_H_
virtual uint64_t GetDurationMs_() const =0
TrackInfo(uint32_t id, const CYIString &name, const CYIString &language)
Definition: YiAbstractVideoPlayer.h:200
virtual void SetMaxBitrate_(uint64_t maxBitrate)
std::vector< ClosedCaptionsTrackInfo > GetClosedCaptionsTracks() const
virtual const NetworkTimeoutInterface * GetNetworkTimeoutInterface_() const
static const CYIString ID3PrivateFrameOwner
Definition: YiAbstractVideoPlayer.h:450
MediaPlaybackControlsInterface * GetMediaPlaybackControlsInterface()
virtual void SetUserAgent_(const CYIString &userAgent)
CYISignal PlaybackComplete
Definition: YiAbstractVideoPlayer.h:1253
bool AreClosedCaptionsTracksAvailable() const
#define YI_DISALLOW_COPY_AND_ASSIGN(TypeName)
Delete the copy constructor and assignment operator (and consequently the move constructor as well) ...
Definition: YiPredef.h:71
CYIRuntimeTypeInfo::NonInstantiableTag RTTIInstantiatability
Definition: YiAbstractVideoPlayer.h:68
CYIVideoSurface * GetSurface() const
Definition: YiAbstractVideoPlayer.h:213
CYISignal< float > AudioBitrateChanged
Definition: YiAbstractVideoPlayer.h:1306
float renderedFramesPerSecond
Definition: YiAbstractVideoPlayer.h:786
Definition: YiAbstractVideoPlayer.h:423
CYIOptional< int32_t > channelCount
Definition: YiAbstractVideoPlayer.h:260
Definition: YiAbstractVideoPlayer.h:386
std::map< CYIString, CYIString > additionalData
Definition: YiAbstractVideoPlayer.h:503
uint64_t m_initialBandwidthHint
Definition: YiAbstractVideoPlayer.h:1424
std::unique_ptr< DRMConfiguration > m_pDRMConfiguration
Definition: YiAbstractVideoPlayer.h:1414
void SetClosedCaptionsEnabled(bool enabled)
NetworkTimeoutInterface * GetNetworkTimeoutInterface()
virtual bool IsMuted_() const =0
Definition: YiAbstractVideoPlayer.h:184
Statistics GetStatistics() const
void ChangeInitialPlaybackState(CYIAbstractVideoPlayer::PlaybackState initialState)
CYIOptional< float > bitrateKbps
Definition: YiAbstractVideoPlayer.h:253
virtual std::vector< SeekableRange > GetLiveSeekableRanges_() const =0
void SetMinimumTimeUpdateIntervalMs(uint64_t minimumTimeUpdateIntervalMs)
ClosedCaptionsTrackInfo(uint32_t id, const CYIString &name, const CYIString &language)
Definition: YiAbstractVideoPlayer.h:273
CYISignal< std::vector< ClosedCaptionsTrackInfo > > AvailableClosedCaptionsTracksChanged
Definition: YiAbstractVideoPlayer.h:1291
Container class for Unicode strings. Conceptually, a CYIString object is a sequence of Unicode charac...
Definition: YiString.h:32
uint64_t GetMinimumTimeUpdateIntervalMs() const
CYISignal BufferingEnded
Definition: YiAbstractVideoPlayer.h:1220
float bufferLengthMs
Definition: YiAbstractVideoPlayer.h:772
CYISignal< Error > ErrorOccurred
Definition: YiAbstractVideoPlayer.h:1227
bool SupportsFormat(StreamingFormat streamingFormat, DRMScheme drmScheme=DRMScheme::None)
BackgroundPlaybackInterface * GetBackgroundPlaybackInterface()
AudioTrackInfo(uint32_t id, const CYIString &name, const CYIString &language)
Definition: YiAbstractVideoPlayer.h:221
Definition: YiAbstractVideoPlayer.h:630
virtual std::unique_ptr< CYIVideoSurface > CreateSurface_()=0
CYISignal< std::shared_ptr< CYIPlatformViewHandle >, std::shared_ptr< CYIPlatformViewHandle > > PlatformPlayerContainerViewHandleChanged
Definition: YiAbstractVideoPlayer.h:1206
TimedMetadataInterface * GetTimedMetadataInterface()
std::function< std::unique_ptr< CYIAbstractVideoPlayer::DRMConfiguration >(std::unique_ptr< CYIAbstractVideoPlayer::DRMConfiguration >)> RefreshDRMConfigurationCallback
Definition: YiAbstractVideoPlayer.h:1191
static const CYIString EventMessagePTSDelta
Definition: YiAbstractVideoPlayer.h:472
CYISignal Preparing
Definition: YiAbstractVideoPlayer.h:1232
CYISignal< const CYIAbstractVideoPlayer::PlayerState & > PlayerStateChanged
Definition: YiAbstractVideoPlayer.h:1281
bool operator!=(const CYIAbstractVideoPlayer::AudioTrackInfo &audioTrackL, const CYIAbstractVideoPlayer::AudioTrackInfo &audioTrackR)
virtual ~TrackInfo()
Definition: YiAbstractVideoPlayer.h:207
uint64_t startTimeMs
Definition: YiAbstractVideoPlayer.h:869
Definition: YiAbstractVideoPlayer.h:352
ClosedCaptionsTrackInfo()
Definition: YiAbstractVideoPlayer.h:269
CYIString value
Definition: YiAbstractVideoPlayer.h:500
std::shared_ptr< CYIPlatformViewHandle > GetPlatformPlayerContainerViewHandle() const
const std::shared_ptr< CYIMaterial > & GetVideoMaterial() const
static const CYIString EventMessageValue
Definition: YiAbstractVideoPlayer.h:462
TrackInfo(uint32_t id)
Definition: YiAbstractVideoPlayer.h:191
CYIMaterial is a place holder for all the drawing parameters required by the renderer to draw a mesh/...
Definition: YiMaterial.h:29
ClosedCaptionsTrackInfo(const TrackInfo &trackInfo)
Definition: YiAbstractVideoPlayer.h:277
virtual const VideoRequestHTTPHeadersInterface * GetVideoRequestHTTPHeadersInterface_() const
CYISignal Finalized
Definition: YiAbstractVideoPlayer.h:1259
bool SelectClosedCaptionsTrack(uint32_t id)
CYISignal Ready
Definition: YiAbstractVideoPlayer.h:1237
static const CYIString EventMessageMessageData
Definition: YiAbstractVideoPlayer.h:486
virtual CYIAbstractVideoPlayer::ClosedCaptionsTrackInfo GetActiveClosedCaptionsTrack_() const =0
std::chrono::milliseconds min
Definition: YiAbstractVideoPlayer.h:391
virtual bool SelectClosedCaptionsTrack_(uint32_t id)=0
CYISignal< std::shared_ptr< CYIPlatformPlayerHandle >, std::shared_ptr< CYIPlatformPlayerHandle > > PlatformPlayerHandleChanged
Definition: YiAbstractVideoPlayer.h:1199
HeadphoneJackInterface * GetHeadphoneJackInterface()
AudioTrackInfo(const TrackInfo &trackInfo)
Definition: YiAbstractVideoPlayer.h:226
virtual const HeadphoneJackInterface * GetHeadphoneJackInterface_() const
float defaultAudioBitrateKbps
Definition: YiAbstractVideoPlayer.h:765
TrackInfo(uint32_t id, const CYIString &name)
Definition: YiAbstractVideoPlayer.h:195
Definition: YiAbstractVideoPlayer.h:329
CYISignal< float > TotalBitrateChanged
Definition: YiAbstractVideoPlayer.h:1296
CYISignal< bool, uint64_t > NotifySeekCompleted
Definition: YiAbstractVideoPlayer.h:1383
static const CYIString EventMessageDuration
Definition: YiAbstractVideoPlayer.h:478
static uint32_t DEFAULT_TRACK_ID
Definition: YiAbstractVideoPlayer.h:215
CYIOptional< CYICodecProfile::Audio > codecProfile
Definition: YiAbstractVideoPlayer.h:246
MediaState mediaState
Definition: YiAbstractVideoPlayer.h:101
void SetPlatformPlayerHandle(std::shared_ptr< CYIPlatformPlayerHandle > pPlatformPlayerHandle)
An interface to adjust playback quality through resolution.
Definition: YiAbstractVideoPlayer.h:675
void SetRefreshDRMConfigurationCallback(RefreshDRMConfigurationCallback callback)
A class which manages the various media and playback states of the CYIAbstractVideoPlayer.
Definition: YiVideoPlayerStateManager.h:44
AudioTrackInfo GetActiveAudioTrack() const
constexpr std::enable_if< YiEnableBitmaskOperators< E >::enable, bool >::type None(E a)
Definition: YiEnumBitmaskOperators.h:136
CYISignal< float > VideoBitrateChanged
Definition: YiAbstractVideoPlayer.h:1301
virtual ~CYIAbstractVideoPlayer()
CYISignal BufferingStarted
Definition: YiAbstractVideoPlayer.h:1213
Definition: YiAbstractVideoPlayer.h:444
virtual void Stop_()=0
virtual CYIString GetVersion_() const
uint64_t GetCurrentTimeMs() const
A class respresenting an HTTP Header Field with a field-name and field-value as specified in https://...
Definition: YiHTTPHeader.h:17
virtual bool HasInitialBandwidthHintHandling_() const
An abstract video player that provides a basic interface that all subclasses must implement...
Definition: YiAbstractVideoPlayer.h:63
CYISignal< uint64_t > CurrentTimeUpdated
Definition: YiAbstractVideoPlayer.h:1265
ErrorCode errorCode
Definition: YiAbstractVideoPlayer.h:176
Definition: YiAbstractVideoPlayer.h:99
CYISignal Paused
Definition: YiAbstractVideoPlayer.h:1247
bool isValid
Definition: YiAbstractVideoPlayer.h:232
virtual Statistics GetStatistics_() const
uint64_t endTimeMs
Definition: YiAbstractVideoPlayer.h:874
static const CYIString EventMessageSchemeId
Definition: YiAbstractVideoPlayer.h:456
RefreshDRMConfigurationCallback m_refreshDRMConfigurationCallback
Definition: YiAbstractVideoPlayer.h:1436
Definition: YiAbstractVideoPlayer.h:492
CYIAbstractVideoPlayer::PlaybackState GetRequestedInitialPlaybackState() const
Definition: YiAbstractVideoPlayer.h:169
virtual bool HasNativeBitrateEventHandling_() const
uint32_t id
Definition: YiAbstractVideoPlayer.h:186
virtual const MediaPlaybackControlsInterface * GetMediaPlaybackControlsInterface_() const
A low-precision timer driven by the update loop.
Definition: YiTimer.h:27
A class to manage styles for closed captions.
Definition: YiClosedCaptionsStyleManager.h:21
bool AreAudioTracksAvailable() const
virtual bool SelectAudioTrack_(uint32_t id)=0
float minimumBufferLengthMs
Definition: YiAbstractVideoPlayer.h:779
CYISignal NotifyPlaybackComplete
Definition: YiAbstractVideoPlayer.h:1370
virtual void Pause_()=0
PlaybackState
Definition: YiAbstractVideoPlayer.h:89
virtual std::vector< AudioTrackInfo > GetAudioTracks_() const =0
CYIOptional< CYIString > role
Definition: YiAbstractVideoPlayer.h:189
CYIString nativePlayerErrorCode
Definition: YiAbstractVideoPlayer.h:178
uint64_t m_initialStartTimeMs
Definition: YiAbstractVideoPlayer.h:1431
void Mute(bool mute)
CYISignal< uint64_t > DurationChanged
Definition: YiAbstractVideoPlayer.h:1271
virtual void Seek_(uint64_t seekPositionMS)=0
CYIClosedCaptionsStyleManager * GetClosedCaptionsStyleManager() const
float totalBitrateKbps
Definition: YiAbstractVideoPlayer.h:730
bool SelectAudioTrack(uint32_t id)
SeekableRange(uint64_t startTimeMs, uint64_t endTimeMs)
Definition: YiAbstractVideoPlayer.h:860
PlaybackState playbackState
Definition: YiAbstractVideoPlayer.h:102
CYIAbstractVideoPlayer::PlayerState GetPlayerState() const
bool isLive
Definition: YiAbstractVideoPlayer.h:723
The base class for all DRM configurations.
Definition: YiAbstractVideoPlayer.h:139
float defaultTotalBitrateKbps
Definition: YiAbstractVideoPlayer.h:751
std::chrono::milliseconds max
Definition: YiAbstractVideoPlayer.h:396
BufferingInterface * GetBufferingInterface()
Definition: YiAbstractVideoPlayer.h:288
AdaptiveResolutionInterface * GetAdaptiveResolutionInterface()
uint64_t m_maxBitrate
Definition: YiAbstractVideoPlayer.h:1419
CYIClosedCaptionsDispatcher * GetClosedCaptionsDispatcher() const
A class used to encapsulate an URL.
Definition: YiUrl.h:24
virtual void DisableClosedCaptions_()=0
virtual void GetClosedCaptionsDispatcher_() const
std::chrono::microseconds timestamp
Definition: YiAbstractVideoPlayer.h:501
CYISignal Playing
Definition: YiAbstractVideoPlayer.h:1242
virtual const BufferingInterface * GetBufferingInterface_() const
std::unique_ptr< CYIVideoPlayerStateManager > m_pStateManager
Definition: YiAbstractVideoPlayer.h:1390
float audioBitrateKbps
Definition: YiAbstractVideoPlayer.h:744
Definition: YiSignalHandler.h:175
static uint32_t OFF_TRACK_ID
Definition: YiAbstractVideoPlayer.h:268
CYIString message
Definition: YiAbstractVideoPlayer.h:177
virtual const BackgroundPlaybackInterface * GetBackgroundPlaybackInterface_() const
std::vector< AudioTrackInfo > GetAudioTracks() const
CYISignal< bool, uint64_t > SeekCompleted
Definition: YiAbstractVideoPlayer.h:1276
bool operator==(const CYIAbstractVideoPlayer::AudioTrackInfo &audioTrackL, const CYIAbstractVideoPlayer::AudioTrackInfo &audioTrackR)
void SetUserAgent(const CYIString &userAgent)
CYIString GetName() const
CYIString name
Definition: YiAbstractVideoPlayer.h:187
ErrorCode
Definition: YiAbstractVideoPlayer.h:155
LiveSessionInterface * GetLiveSessionInterface()
Definition: YiAbstractVideoPlayer.h:511
static const CYIString EventMessageTimescale
Definition: YiAbstractVideoPlayer.h:466
StreamingFormat
Definition: YiAbstractVideoPlayer.h:110
Dispatches closed captioning cues to registered captions renderers.
Definition: YiClosedCaptionsDispatcher.h:27
virtual CYIAbstractVideoPlayer::AudioTrackInfo GetActiveAudioTrack_() const =0
CYIOptional< CYICodecType::Audio > codecType
Definition: YiAbstractVideoPlayer.h:239
BufferLength(std::chrono::milliseconds minIn, std::chrono::milliseconds maxIn)
Definition: YiAbstractVideoPlayer.h:398
Definition: YiAbstractVideoPlayer.h:708
An interface to adjust playback of live streams.
Definition: YiAbstractVideoPlayer.h:659
void CheckAndNotifyMediaTracksChanged()
MediaState
Definition: YiAbstractVideoPlayer.h:76
void Prepare(const CYIUrl &videoURI, StreamingFormat formatHint, CYIAbstractVideoPlayer::PlaybackState initialState=CYIAbstractVideoPlayer::PlaybackState::Paused, std::unique_ptr< DRMConfiguration > pDRMConfiguration=nullptr, uint64_t startTimeMs=0)
BufferLength()
Definition: YiAbstractVideoPlayer.h:407
void SetMaxBitrate(uint64_t maxBitrate)
const DRMConfiguration * GetDRMConfiguration() const
std::unique_ptr< CYIClosedCaptionsDispatcher > m_pClosedCaptionsDispatcher
Definition: YiAbstractVideoPlayer.h:1398
uint64_t GetDurationMs() const
void SetInitialBandwidthHint(uint64_t initialBandwidthHint)
static const CYIString EventMessageId
Definition: YiAbstractVideoPlayer.h:482
CYISignal< uint64_t > NotifyDurationChanged
Definition: YiAbstractVideoPlayer.h:1376
void SetVideoSurfaceSize(const glm::ivec2 &size)
void Seek(uint64_t seekPositionMs)
#define YI_TYPE_BASES(CLASS, BASES...)
Definition: YiRtti.h:259
float videoBitrateKbps
Definition: YiAbstractVideoPlayer.h:737
std::shared_ptr< CYIPlatformPlayerHandle > GetPlatformPlayerHandle() const
void SetPlatformPlayerContainerViewHandle(std::shared_ptr< CYIPlatformViewHandle > pPlatformPlayerContainerViewHandle)
Definition: YiAbstractVideoPlayer.h:529
float encodedFramesPerSecond
Definition: YiAbstractVideoPlayer.h:793
float defaultVideoBitrateKbps
Definition: YiAbstractVideoPlayer.h:758
CYISignal< std::vector< AudioTrackInfo > > AvailableAudioTracksChanged
Definition: YiAbstractVideoPlayer.h:1286
virtual const TimedMetadataInterface * GetTimedMetadataInterface_() const
virtual CYIString GetName_() const
AudioTrackInfo()
Definition: YiAbstractVideoPlayer.h:216
virtual void Init_()
CYIString identifier
Definition: YiAbstractVideoPlayer.h:499
std::chrono::microseconds duration
Definition: YiAbstractVideoPlayer.h:502
virtual void Prepare_(const CYIUrl &videoURI, StreamingFormat format)=0
This file contains the classes and macros used to implement RTTI in You.i Engine. ...
A class used to represent a color value.
Definition: YiColor.h:37
CYISignal< TimedMetadata > MetadataAvailable
Definition: YiAbstractVideoPlayer.h:521
ClosedCaptionsTrackInfo GetActiveClosedCaptionsTrack() const
CYIString language
Definition: YiAbstractVideoPlayer.h:188
Signals and slots are a thread-safe and flexible communication framework that will allow various obje...
Definition: YiSignal.h:169
std::vector< SeekableRange > GetLiveSeekableRanges() const
virtual void Mute_(bool mute)=0
virtual const LiveSessionInterface * GetLiveSessionInterface_() const
Asset representing a video.
Definition: YiAssetVideo.h:20
DRMScheme
Definition: YiAbstractVideoPlayer.h:123
virtual bool HasNativeStartTimeHandling_() const
virtual bool HasNativeSeekEventHandling_() const
The CYIPlatformViewHandle is a wrapper object that holds on to the native platform view...
Definition: YiPlatformViewHandle.h:22
virtual std::vector< ClosedCaptionsTrackInfo > GetClosedCaptionsTracks_() const =0
CYISignal< Error > NotifyErrorOccurred
Definition: YiAbstractVideoPlayer.h:1364
Representation of a CYIAbstractVideoPlayer&#39;s video surface.
Definition: YiVideoSurface.h:34
virtual void Play_()=0
CYIString GetVersion() const
The CYIPlatformPlayerHandle is a wrapper object that holds on to the native platform player instance...
Definition: YiPlatformPlayerHandle.h:25
Definition: YiAbstractVideoPlayer.h:266
std::unique_ptr< CYIClosedCaptionsStyleManager > m_pStyleManager
Definition: YiAbstractVideoPlayer.h:1406
virtual const AdaptiveResolutionInterface * GetAdaptiveResolutionInterface_() const
Error()
Definition: YiAbstractVideoPlayer.h:171
virtual uint64_t GetCurrentTimeMs_() const =0
Definition: YiAbstractVideoPlayer.h:855
virtual bool SupportsFormat_(StreamingFormat streamingFormat, DRMScheme drmScheme=DRMScheme::None) const =0
VideoRequestHTTPHeadersInterface * GetVideoRequestHTTPHeadersInterface()