📄 hxbsrc.h
字号:
*/
STDMETHOD(Subscribe) (THIS_
UINT16 uStreamNumber,
UINT16 uRuleNumber);
/************************************************************************
* Method:
* IHXASMSource::Unsubscribe
* Purpose:
* Called to inform a file format that a unsubscription has occurred,
* to rule number uRuleNumber, for stream uStreamNumber.
*/
STDMETHOD(Unsubscribe) (THIS_
UINT16 uStreamNumber,
UINT16 uRuleNumber);
// IHXInfoLogger method
/************************************************************************
* Method:
* IHXInfoLogger::LogInformation
* Purpose:
* Logs any user defined information in form of action and
* associated data.
*/
STDMETHOD(LogInformation) (THIS_
const char* /*IN*/ pAction,
const char* /*IN*/ pData) = 0;
#if defined(HELIX_FEATURE_HYPER_NAVIGATE)
/*
* IHXHyperNavigate methods
*/
/************************************************************************
* Method:
* IHXHyperNavigate::GoToURL
* Purpose:
* Performs a simple Go To URL operation.
*/
STDMETHOD(GoToURL) (THIS_
const char* pURL,
const char* pTarget);
/************************************************************************
* Method:
* IHXHyperNavigate2::Execute
* Purpose:
*
* Parameters:
* pURL: URL (absolute or relative)
* pTargetInstance:
* pTargetApplication:
* pTargetRegion:
* pParams:
*/
STDMETHOD(Execute) (THIS_
const char* pURL,
const char* pTargetInstance,
const char* pTargetApplication,
const char* pTargetRegion,
IHXValues* pParams);
#endif /* defined(HELIX_FEATURE_HYPER_NAVIGATE) */
/************************************************************************
* Method:
* IHXSourceBufferingStats2::GetCurrentBuffering
* Purpose:
* Get the current buffering information
*/
STDMETHOD(GetCurrentBuffering) (THIS_
UINT16 uStreamNumber,
REF(INT64) llLowestTimestamp,
REF(INT64) llHighestTimestamp,
REF(UINT32) ulNumBytes,
REF(BOOL) bDone) PURE;
/************************************************************************
* Method:
* IHXSourceBufferingStats2::GetTotalBuffering
* Purpose:
* Get the total amount of data buffered for a stream.
* This includes what is in the transport buffer and in
* the renderer
*/
STDMETHOD(GetTotalBuffering) (THIS_ UINT16 uStreamNumber,
REF(INT64) llLowestTimestamp,
REF(INT64) llHighestTimestamp,
REF(UINT32) ulNumBytes,
REF(BOOL) bDone);
HX_RESULT Init(HXPlayer * player, UINT32 unRegistryID);
HX_RESULT SetupRegistry(void);
virtual HX_RESULT UpdateRegistry(UINT32 ulRegistryID) = 0;
virtual BOOL IsInitialized(void) {return m_bInitialized;};
virtual BOOL IsPreBufferingDone(void) {return m_bIsPreBufferingDone;};
void AddHXStream(HXStream* pStream);
HX_RESULT CollectAudioStreams(CHXSimpleList*& pAudioStreamList);
void RemoveAudioStreams(void);
void PauseAudioStreams(void);
void ResumeAudioStreams(void);
void ReleaseAudioStreams(CHXSimpleList* pAudioStreamList);
void InitialBufferingDone(void);
void DoRebuffer(void);
BOOL IsRebufferRequired(void);
BOOL IsRebufferDone(void);
#if defined(HELIX_FEATURE_STATS) && defined(HELIX_FEATURE_REGISTRY)
virtual HX_RESULT CopyMetaDataToRegistry(IHXValues* pHeader);
#endif /* HELIX_FEATURE_STATS && HELIX_FEATURE_REGISTRY */
virtual HX_RESULT DoCleanup(EndCode endCode = END_STOP);
void Stop(void);
virtual HX_RESULT DoSeek( ULONG32 seekTime) = 0;
virtual HX_RESULT DoPause(void) = 0;
virtual HX_RESULT DoResume(void) = 0;
virtual HX_RESULT StartInitialization(void) = 0;
virtual UINT16 GetNumStreams(void) = 0;
virtual HX_RESULT GetStreamInfo(ULONG32 ulStreamNumber,
STREAM_INFO*& theStreamInfo) = 0;
virtual HX_RESULT GetEvent(UINT16 usStreamNumber, CHXEvent * &theEvent) = 0;
virtual HX_RESULT UpdateStatistics(void) = 0;
virtual void SetMinimumPreroll(ULONG32 ulMinimumAudioPreroll, ULONG32 ulMinimumStartingPreroll);
virtual HX_RESULT GetStreamHeaderInfo(UINT16 index,
IHXValues * &hdr);
virtual HX_RESULT ProcessIdle(void) // calls _ProcessIdle (FALSE)
{
return _ProcessIdle(FALSE);
}
#if defined (__MWERKS__)
virtual HX_RESULT ProcessIdleAtInterrupt(void) // calls _ProcessIdle (TRUE)
{
return _ProcessIdle(TRUE);
}
#endif // (__MWERKS__)
HX_RESULT GetLastError(void) { return mLastError;};
virtual BOOL IsLocalSource() {return TRUE;};
virtual BOOL IsPNAProtocol() {return FALSE;};
virtual BOOL IsSimulatedNetworkPlayback() {return FALSE;};
virtual void EventReady(CHXEvent* pEvent);
// to set and get flags for livestream, saveas, perfectplay...
virtual void SetFlags(UINT16 flags);
virtual UINT16 GetFlags() {return mFlags;};
virtual BOOL IsPerfectPlayAllowed() { return m_bPerfectPlayAllowed;};
virtual BOOL IsPerfectPlay() { return m_bPerfectPlay;};
virtual HX_RESULT SetPlayTimes(UINT32 ulStartTime,
UINT32 ulEndTime,
UINT32 ulDelay,
UINT32 ulDuration);
virtual HX_RESULT UpdatePlayTimes(IHXValues* pValues);
virtual BOOL IsSourceDone() = 0;
// tell about end of source...
virtual void SetEndOfClip(BOOL bForcedEndofClip = FALSE) = 0;
virtual void EnterBufferedPlay(void) {};
virtual void LeaveBufferedPlay(void) {};
ULONG32 GetDuration() const { return m_ulDuration; };
IHXClientEngine* GetClientEngine() const { return (IHXClientEngine*) m_pEngine; };
UINT32 GetStartTime() const { return m_ulStartTime; };
UINT32 GetEndTime() const { return m_ulEndTime; };
UINT32 GetDelay() const { return m_ulDelay; };
CHXURL* GetCHXURL() { return m_pURL; };
BOOL IsDelayed() const { return m_bDelayed; };
BOOL IsSeekable() const {return !m_bNonSeekable;};
BOOL IsPaused() const {return m_bPaused;};
INT64 GetLastExpectedPacketTime() const
{return m_llLastExpectedPacketTime;};
void PartOfNextGroup(BOOL bPartOfNextGroup) { m_bPartOfNextGroup = bPartOfNextGroup;};
BOOL IsPartOfNextGroup(void) { return m_bPartOfNextGroup; };
void PartOfPrefetchGroup(BOOL bPartOfPrefetchGroup) { m_bPartOfPrefetchGroup = bPartOfPrefetchGroup;};
BOOL IsPartOfPrefetchGroup(void) { return m_bPartOfPrefetchGroup; };
STDMETHOD(ReportRebufferStatus) (THIS_
UINT16 uStreamNumber,
UINT8 unNeeded,
UINT8 unAvailable);
STDMETHOD(SetGranularity) (THIS_
UINT16 uStreamNumber,
ULONG32 ulGranularity);
void SetSourceInfo(SourceInfo* pSourceInfo)
{m_pSourceInfo = pSourceInfo;};
virtual void AdjustClipBandwidthStats(BOOL bActivate = FALSE) = 0;
virtual BOOL CanBeResumed(void) = 0;
BOOL isRestrictedLiveStream() {return m_bRestrictedLiveStream;};
virtual BOOL TryResume(void);
virtual char* GetHost() {return NULL;};
virtual void ReSetup(void) = 0;
BOOL IsResumePending() { return m_bResumePending;};
virtual char* GetAltURL(BOOL& bDefault);
void SetAltURLType(BOOL bDefault) { m_bDefaultAltURL = bDefault; };
BOOL IsActive(void) {return m_bIsActive;};
HX_RESULT SetRequest(const CHXURL* pURL, BOOL bAltURL);
HX_RESULT GetRequest(REF(IHXRequest*) pRequest)
{
pRequest = m_pRequest;
if (m_pRequest)
{
m_pRequest->AddRef();
}
return HXR_OK;
};
void UpdateDuration(UINT32 ulDuration);
void UpdateDelay(UINT32 ulDelay);
void ScheduleProcessCallback();
void MergeUpgradeRequest(BOOL bAddDefault = FALSE, char* pUpgradeString = NULL);
void ClearUpgradeRequest();
void DeleteAllEvents();
void EnterPrefetch(PrefetchType prefetchType, UINT32 ulPrefetchValue);
virtual void LeavePrefetch(void);
virtual BOOL IsPrefetchDone(void) {return TRUE;};
void SetSoundLevel(UINT16 uSoundLevel, BOOL bReflushAudioDevice);
void SetAudioDeviceReflushHint(void);
void SetMaxPossibleAccelRatio(double maxR) {m_maxPossibleAccelRatio = maxR;};
virtual void EnterFastStart(void) { m_bFastStart = TRUE; };
virtual void LeaveFastStart(TurboPlayOffReason leftReason);
virtual BOOL CanBeFastStarted(void) {return FALSE;};
virtual HX_RESULT FillRecordControl() = 0;
BOOL IsPlayingFromRecordControl() { return m_bPlayFromRecordControl; };
HX_RESULT OnTimeSync(ULONG32 ulCurrentTime);
protected:
virtual ~HXSource(void);
PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
virtual HX_RESULT _ProcessIdle(BOOL atInterrupt = FALSE) = 0;
virtual HX_RESULT ReadPreferences(void);
BOOL IsAudioStreamFromThisSource(IHXValues* pAudioHeader);
BOOL IsAnyAudioStream(void);
HX_RESULT DeleteStreamTable(void);
IHXValues* GetHeaderInfo(UINT16 stream_number);
ULONG32 GetAvailableMemory();
ULONG32 GetPerfectPlayTime(void);
HX_RESULT AdjustClipTime(void);
CHXMapLongToObj* GetStreamInfoTable(void)
{
return mStreamInfoTable;
};
virtual void ReBuffer(void) = 0;
void GenerateFakeLostPacket(CHXEvent*& theEvent);
BOOL ShouldConvert(const char* pTargetInstance);
HX_RESULT SendHeaderToRecordControl(BOOL bFileHeader, IHXValues* pHeader);
void ProcessFileHeader(void);
HX_RESULT ProcessStreamHeaders(IHXValues* pHeader, STREAM_INFO*& pStreamInfo);
HX_RESULT mLastError;
CHXMapLongToObj* mStreamInfoTable;
// Preferences
ULONG32 m_ulPerfectPlayTime;
ULONG32 m_ulBufferedPlayTime;
ULONG32 m_ulStreamHeadersExpected;
UINT16 m_nSeeking;
BOOL m_bPerfectPlayEntireClip;
HX_BITFIELD m_bCannotBufferEntireClip : 1;
BOOL m_bPerfectPlay;
HX_BITFIELD m_bBufferedPlay : 1;
HX_BITFIELD m_bClipTimeAdjusted : 1;
HX_BITFIELD m_bInitialized : 1;
HX_BITFIELD m_bIsPreBufferingDone : 1;
HX_BITFIELD m_bAltURL : 1;
HX_BITFIELD m_bReceivedData : 1;
HX_BITFIELD m_bReceivedHeader : 1;
HX_BITFIELD m_bInitialBuffering : 1;
HX_BITFIELD m_bCustomEndTime : 1;
HX_BITFIELD m_bCustomDuration : 1;
HX_BITFIELD m_bPaused : 1;
HX_BITFIELD m_bFirstResume : 1;
HX_BITFIELD m_bResumePending : 1;
HX_BITFIELD m_bIsActive : 1;
HX_BITFIELD m_bDelayed : 1;
HX_BITFIELD m_bLocked : 1;
HX_BITFIELD m_bPartOfNextGroup : 1;
HX_BITFIELD m_bPartOfPrefetchGroup : 1;
HX_BITFIELD m_bPrefetch : 1;
HX_BITFIELD m_bPerfectPlayAllowed : 1;
HX_BITFIELD mSaveAsAllowed : 1;
HX_BITFIELD mLiveStream : 1;
HX_BITFIELD m_bRestrictedLiveStream : 1;
HX_BITFIELD m_bNonSeekable : 1;
HX_BITFIELD m_bSourceEnd : 1; // == 1 no more packets for this stream from actual source
HX_BITFIELD m_bForcedSourceEnd : 1; // Forced end of source due to end or dur tag in url/SMIL
HX_BITFIELD m_bIsPreBufferingStarted : 1;
HX_BITFIELD m_bIsMeta: 1;
UINT32 m_ulTurboStartActiveTime;
UINT16 mFlags;
UINT16 m_uNumStreams; // Number of streams in the source...
ULONG32 m_ulPreRollInMs; // Number of millisecs worth of data to be held back (for preroll)
ULONG32 m_ulPreRoll; // Number of bytes worth of data to be held back (for preroll)
ULONG32 m_ulAvgBandwidth; // Bandwidth for this stream...
ULONG32 m_ulDuration; // duration of this stream...
UINT32 m_ulLastBufferingCalcTime;
UINT16 m_uActiveStreams;
PrefetchType m_prefetchType;
UINT32 m_ulPrefetchValue;
char* m_pszURL;
CHXURL* m_pURL;
UINT32 m_ulStartTime;
UINT32 m_ulEndTime;
INT64 m_llLastExpectedPacketTime;
UINT32 m_ulRestrictedDuration;
UINT32 m_ulLossHack;
UINT32 m_ulNumFakeLostPackets;
UINT32 m_ulFirstPacketTime;
double m_maxPossibleAccelRatio;
// level 3 stats
UINT32 m_ulSourceStartTime;
IHXPreferences* m_pPreferences;
IHXScheduler* m_pScheduler;
IHXRequest* m_pRequest;
HXClientEngine* m_pEngine;
CHXSimpleList m_HXStreamList;
CHXSimpleList* m_pAudioStreamList;
#if defined(HELIX_FEATURE_AUTOUPGRADE)
HXUpgradeCollection* m_pUpgradeCollection;
#endif /* HELIX_FEATURE_AUTOUPGRADE */
IHXASMSource* m_pASMSource;
IHXBackChannel* m_pBackChannel;
HXRecordControl* m_pRecordControl;
BOOL m_bPlayFromRecordControl;
CHXURL* m_pRedirectURL;
BOOL m_bRedirectPending;
};
// Defined flags
#define HX_RELIABLE_FLAG 0x0001
#define HX_KEYFRAME_FLAG 0x0002
#define HX_LASTFRAME_FLAG 0x0004
#endif // _HX_BSOURCE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -