2 #ifndef _YI_ABSTRACT_VIDEO_PLAYER_H_ 3 #define _YI_ABSTRACT_VIDEO_PLAYER_H_ 14 #include <glm/fwd.hpp> 15 #include <glm/vec2.hpp> 129 WidevineModularCustomRequest
159 StateTransitionError,
296 virtual bool IsBackgroundPlaybackEnabled()
const = 0;
301 virtual void EnableBackgroundPlayback(
bool enabled) = 0;
312 virtual void SetRewindIncrementMs(std::chrono::milliseconds increment) = 0;
316 virtual void SetFastForwardIncrementMs(std::chrono::milliseconds increment) = 0;
321 virtual void SetNotificationColor(
const CYIColor &color) = 0;
337 virtual void EnablePauseOnHeadphonesUnplugged(
bool enabled) = 0;
342 virtual bool IsPausingOnHeadphonesUnplugged()
const = 0;
360 virtual std::vector<CYIHTTPHeader> SetHeaders(
const std::vector<CYIHTTPHeader> &customHeaders) = 0;
370 virtual bool RemoveHeader(
const CYIString &name) = 0;
375 virtual void ClearHeaders() = 0;
380 virtual std::vector<CYIHTTPHeader> GetHeaders()
const = 0;
391 std::chrono::milliseconds
min;
396 std::chrono::milliseconds
max;
398 BufferLength(std::chrono::milliseconds minIn, std::chrono::milliseconds maxIn)
431 virtual void SetBufferLength(
const BufferLength &bufferLength) = 0;
606 virtual void EnableMediaPlaybackControl(
bool enabled) = 0;
611 virtual bool IsMediaPlaybackControlEnabled()
const = 0;
618 virtual void SetControlsHandler(
ControlsHandler *pControlsHandler) = 0;
638 virtual void SetConnectionTimeout(std::chrono::milliseconds timeout) = 0;
643 virtual std::chrono::milliseconds GetConnectionTimeout()
const = 0;
648 virtual void SetRequestTimeout(std::chrono::milliseconds timeout) = 0;
653 virtual std::chrono::milliseconds GetRequestTimeout()
const = 0;
669 virtual void SetLivePresentationDelay(std::chrono::milliseconds liveDelay) = 0;
685 virtual void SetMaxResolution(glm::ivec2 maxResolution) = 0;
861 : startTimeMs(startTimeMs)
862 , endTimeMs(endTimeMs)
891 void Seek(uint64_t seekPositionMs);
1066 void Mute(
bool mute);
1191 using RefreshDRMConfigurationCallback = std::function<std::unique_ptr<CYIAbstractVideoPlayer::DRMConfiguration>(std::unique_ptr<CYIAbstractVideoPlayer::DRMConfiguration>)>;
1441 enum class Direction
1448 Direction direction;
1449 uint64_t requestedPositionMs;
1450 uint64_t positionBeforeSeekMs;
1480 virtual void Init_();
1561 virtual void Play_() = 0;
1572 virtual void Pause_() = 0;
1579 virtual void Stop_() = 0;
1607 virtual void Seek_(uint64_t seekPositionMS) = 0;
1648 virtual void Mute_(
bool mute) = 0;
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);
1767 std::shared_ptr<CYIPlatformPlayerHandle> m_pPlatformPlayerHandle;
1768 std::shared_ptr<CYIPlatformViewHandle> m_pPlatformPlayerContainerViewHandle;
1770 bool m_audioTracksAvailable;
1771 std::vector<AudioTrackInfo> m_audioTracksCache;
1773 float m_cachedTotalBitrate;
1774 float m_cachedVideoBitrate;
1775 float m_cachedAudioBitrate;
1777 std::unique_ptr<CYIVideoSurface> m_pVideoSurface;
1778 uint64_t m_lastNotifiedTime;
1781 CYITimer m_mediaTracksRefreshTimer;
1785 SeekState m_seekState;
1786 uint64_t m_minimumTimeUpdateIntervalMs;
1788 bool m_closedCaptionsTracksAvailable;
1789 std::vector<ClosedCaptionsTrackInfo> m_closedCaptionsTracksCache;
1790 uint32_t m_previousClosedCaptionsTrackId;
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
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
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
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
ClosedCaptionsTrackInfo()
Definition: YiAbstractVideoPlayer.h:269
std::shared_ptr< CYIPlatformViewHandle > GetPlatformPlayerContainerViewHandle() const
const std::shared_ptr< CYIMaterial > & GetVideoMaterial() const
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
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
void OnRefreshDRMConfiguration()
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
virtual CYIString GetVersion_() const
uint64_t GetCurrentTimeMs() const
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
RefreshDRMConfigurationCallback m_refreshDRMConfigurationCallback
Definition: YiAbstractVideoPlayer.h:1436
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
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
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
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()
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)
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)
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 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
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
virtual std::vector< ClosedCaptionsTrackInfo > GetClosedCaptionsTracks_() const =0
CYISignal< Error > NotifyErrorOccurred
Definition: YiAbstractVideoPlayer.h:1364
Representation of a CYIAbstractVideoPlayer's video surface.
Definition: YiVideoSurface.h:34
CYIString GetVersion() const
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()