⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chxclientplayer.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 3 页
字号:
}HX_RESULTCHXClientPlayer::WriteData( void* pData, UINT32 bufferLength, unsigned char* pBuffer ){	UINT32 recordNum;	CHXClientDataStream* pDataStream = ( CHXClientDataStream* ) pData;	if ( !FindDataStream( pDataStream, &recordNum ) ) return HXR_FAIL;		HX_RESULT outResult = pDataStream->WriteData( bufferLength, pBuffer );	if ( FAILED( outResult ) )	{		m_pDataStreams->Remove( recordNum );		delete pDataStream;	}	return outResult;}voidCHXClientPlayer::CloseData( void* pData ){	UINT32 recordNum;	CHXClientDataStream* pDataStream = ( CHXClientDataStream* ) pData;	if ( !FindDataStream( pDataStream, &recordNum ) ) return;	HX_RESULT result = pDataStream->CloseData();	if ( FAILED( result ) )	{		m_pDataStreams->Remove( recordNum );		delete pDataStream;	}}boolCHXClientPlayer::GetOpenedURL( char* pURLBuffer, UINT32 bufferLength, UINT32* pUsedBufferLength ) const{	if ( pUsedBufferLength )	{		*pUsedBufferLength = 0;	}	if ( !m_pIOpenedRequest ) return false;		const char* pOpenedURL = NULL;	if ( FAILED( m_pIOpenedRequest->GetURL( pOpenedURL ) ) ) return false;		UINT32 sizeOfMemFSProtocol = strlen( kProtocolMemFS );	if ( 0 == strncmp( pOpenedURL, kProtocolMemFS, sizeOfMemFSProtocol ) )	{		pOpenedURL += sizeOfMemFSProtocol;	}	UINT32 desiredBufferLength = strlen( pOpenedURL ) + 1;	if ( pUsedBufferLength )	{		*pUsedBufferLength = desiredBufferLength;	}	if ( !pURLBuffer || ( bufferLength == 0 ) ||		 ( desiredBufferLength > bufferLength ) ) // Makes no sense to copy a partial URL.	{		return false;	}	memcpy( pURLBuffer, pOpenedURL, desiredBufferLength );	return true;}boolCHXClientPlayer::CanViewSource( void ){	SPIHXViewSourceCommand spViewSourceCommand = m_pIHXCorePlayer;	return spViewSourceCommand.IsValid() ?		   ( ( 0 != spViewSourceCommand->CanViewSource( kCurrentStream ) ) ? true : false ) : false;}voidCHXClientPlayer::ViewSource( void ){	SPIHXViewSourceCommand spViewSourceCommand = m_pIHXCorePlayer;	if ( spViewSourceCommand.IsValid() )	{		( void ) spViewSourceCommand->DoViewSource( kCurrentStream );	}}boolCHXClientPlayer::CanViewRights( void ){	SPIHXClientViewRights spClientViewRights = m_pIHXCorePlayer;	return spClientViewRights.IsValid() ?		   ( ( 0 != spClientViewRights->CanViewRights() ) ? true : false ) : false;}voidCHXClientPlayer::ViewRights( void ){	SPIHXClientViewRights spClientViewRights = m_pIHXCorePlayer;	if ( spClientViewRights.IsValid() )	{		( void ) spClientViewRights->ViewRights( m_pIHXCorePlayer );	}}HX_RESULTCHXClientPlayer::Authenticate( bool shouldValidateUser, const char* pUsername, const char* pPassword ){	return m_pClientContext->Authenticate( shouldValidateUser, pUsername, pPassword );}intCHXClientPlayer::GetContentState( void ) const{	return ( m_pClipSink && m_pIOpenedRequest ) ? m_pClipSink->GetContentState() : kContentStateNotLoaded;}boolCHXClientPlayer::HasContentBegun( void ) const{	return m_pClipSink ? m_pClipSink->HasContentBegun() : false;}boolCHXClientPlayer::SetStatus( const char* pStatus ){#ifdef HELIX_FEATURE_VIDEO	if ( m_SiteSupplier )	{		return m_SiteSupplier->SetStatus( pStatus );	}	else#endif	{		return false;	}}voidCHXClientPlayer::Play( void ){	if ( m_pIOpenedRequest /* && !HasContentBegun() */ )	{		if ( !m_pClientContext->IsAuthenticationPending() )		{			HX_RESULT result = HXR_OK;						// XXXSEH: Added IsDone() check to deal with a Helix bug.			//         Once a clip has been stopped, Helix cannot play it until it's been Opened again.			if ( m_pClientContext->HasRequestedUpgrade() ||				 m_pIHXCorePlayer->IsDone() )			{				result = LoadRequest( m_pIOpenedRequest );				if ( FAILED( result ) ) return;			}			if ( m_PendingSeekPosition != kInvalidSeekPosition )			{				UINT32 beginPosition = m_PendingSeekPosition;				m_PendingSeekPosition = kInvalidSeekPosition;				if ( m_pClipSink )				{					m_pClipSink->SetBeginPosition( beginPosition );				}			}			result = m_pIHXCorePlayer->Begin();			CHXASSERT( SUCCEEDED( result ) );		}	}}voidCHXClientPlayer::Pause( void ){	// if ( HasContentBegun() )	{		HX_RESULT result = m_pIHXCorePlayer->Pause();		CHXASSERT( SUCCEEDED( result ) );	}}voidCHXClientPlayer::Stop( void ){	// if ( HasContentBegun() )	{		HX_RESULT result = m_pIHXCorePlayer->Stop();		CHXASSERT( SUCCEEDED( result ) );		if ( m_pClipSink )		{			m_pClipSink->ProcessPendingStateChange();		}	}}boolCHXClientPlayer::StartSeeking( void ){	bool outSeekingHasStarted = m_IsActivelySeeking;	if ( !outSeekingHasStarted )	{		bool hasContentBegun = HasContentBegun();		if ( hasContentBegun || ( GetContentState() == kContentStatePaused ) )		{			m_ShouldPlayOnStopSeeking = hasContentBegun;			Pause();			m_PendingSeekPosition = GetPosition();			m_IsActivelySeeking = true;			outSeekingHasStarted = true;		}	}	return outSeekingHasStarted;}HX_RESULTCHXClientPlayer::SetPosition( UINT32 position ){	HX_RESULT outResult = HXR_FAIL;	if ( m_IsActivelySeeking /*|| ( GetContentState() == kContentStateStopped )*/ ) // XXXSEH: See comment in CHXClientSink::SetBeginPosition()	{		m_PendingSeekPosition = position;		outResult = HXR_OK;	}	else	{		outResult = m_pIHXCorePlayer->Seek( position );	}	return outResult;}voidCHXClientPlayer::StopSeeking( void ){	if ( m_IsActivelySeeking )	{		m_IsActivelySeeking = false;		if ( m_ShouldPlayOnStopSeeking )		{			Play();		}	}}UINT32CHXClientPlayer::GetPosition( void ) const{	// return m_pIHXCorePlayer->GetCurrentPlayTime(); // XXXSEH: Would this be better?	return ( m_PendingSeekPosition != kInvalidSeekPosition ) ?		   m_PendingSeekPosition : ( m_pClipSink ? m_pClipSink->GetPosition() : 0 );}UINT32CHXClientPlayer::GetLength( void ) const{	return m_pClipSink ? m_pClipSink->GetLength() : 0;}boolCHXClientPlayer::IsLive( void ) const{	return ( ( 0 != m_pIHXCorePlayer->IsLive() ) ? true : false );}const char*CHXClientPlayer::GetTitle( void ) const{	return m_pClipSink ? m_pClipSink->GetTitle() : NULL;}const char*CHXClientPlayer::GetContextURL( void ) const{	return m_pClipSink ? m_pClipSink->GetContextURL() : NULL;}INT32CHXClientPlayer::GetClipBandwidth( void ) const{	return m_pClipSink ? m_pClipSink->GetClipBandwidth() : 0;}UINT16CHXClientPlayer::GetSourceCount( void ) const{	return m_pIHXCorePlayer ? m_pIHXCorePlayer->GetSourceCount() : 0;}UINT16CHXClientPlayer::GetGroupCount( void ) const{	SPIHXGroupManager spGroupManager = m_pIHXCorePlayer;	return spGroupManager.IsValid() ? spGroupManager->GetGroupCount() : 0;}UINT16CHXClientPlayer::GetCurrentGroup( void ) const{	SPIHXGroupManager spGroupManager = m_pIHXCorePlayer;	if ( spGroupManager.IsValid() )	{		UINT16 currentGroupIndex = 0;		if ( SUCCEEDED( spGroupManager->GetCurrentGroup( currentGroupIndex ) ) )		{			return currentGroupIndex;		}	}	return 0; // XXXSEH: Is this a reasonable default or failed value?}HX_RESULTCHXClientPlayer::SetCurrentGroup( UINT16 groupIndex ){	SPIHXGroupManager spGroupManager = m_pIHXCorePlayer;	return spGroupManager.IsValid() ? spGroupManager->SetCurrentGroup( groupIndex ) : HXR_FAIL;}static boolBufferContainsText( const SPIHXBuffer& spBuff ){	if ( !spBuff.IsValid() ) return false;		const unsigned char* pString = spBuff->GetBuffer();	while ( *pString )	{		if ( !isspace( *pString++ ) )		{			return true;		}	}	return false;}boolCHXClientPlayer::GetGroupURLBuffer( UINT16 groupIndex, IHXBuffer** ppIURL ) const{	SPIHXBuffer spBuffer;	SPIHXGroup spGroup;	SPIHXGroupManager spGroupManager = m_pIHXCorePlayer;	if ( spGroupManager.IsValid() && SUCCEEDED( spGroupManager->GetGroup( groupIndex, *spGroup.AsInOutParam() ) ) && ( spGroup.IsValid() ) )	{		// try to get an URL; if that fails, look for a track with an URL		SPIHXValues spProperties = spGroup->GetGroupProperties();		if ( spProperties.IsValid() )		{			spProperties->GetPropertyCString( "url", *spBuffer.AsInOutParam() );			if ( BufferContainsText( spBuffer ) )			{				spBuffer.AsPtr( ppIURL );				return true;			}		}		SPIHXValues spProps2;		for ( UINT16 i = 0 ; i < spGroup->GetTrackCount() ; ++i )		{			spGroup->GetTrack( i, *spProps2.AsInOutParam() );			if ( spProps2.IsValid() )			{				spProps2->GetPropertyCString( "url", *spBuffer.AsInOutParam() );				if ( BufferContainsText( spBuffer ) )				{					spBuffer.AsPtr( ppIURL );					return true;				}				spProps2->GetPropertyCString( "src", *spBuffer.AsInOutParam() );				if ( BufferContainsText( spBuffer ) )				{					spBuffer.AsPtr( ppIURL );					return true;				}			}		}    }	// we failed to get a group or track URL, so use one for the overall file	SPIHXValues spValues = m_pIHXCorePlayer;	if ( spValues.IsValid() )	{		spValues->GetPropertyCString( "url", *spBuffer.AsInOutParam() );		if ( BufferContainsText( spBuffer ) )		{			spBuffer.AsPtr( ppIURL );			return true;		}	}	return false;}boolCHXClientPlayer::GetGroupURL( UINT16 groupIndex, char* pURLBuffer, UINT32 bufferLength, UINT32* pUsedBufferLength ) const{	if ( pUsedBufferLength )	{		*pUsedBufferLength = 0;	}	SPIHXBuffer spURL;	if ( GetGroupURLBuffer( groupIndex, spURL.AsInOutParam() ) )	{		const unsigned char* pURLString = spURL->GetBuffer();		UINT32 desiredBufferLength = spURL->GetSize();		// If no buffer was provided, just return the string's size.		if ( !pURLString || ( bufferLength == 0 ) )		{			if ( pUsedBufferLength )			{				*pUsedBufferLength = desiredBufferLength;			}			return false;		}		else		{			UINT32 usedBufferLength = ( desiredBufferLength <= bufferLength ) ? desiredBufferLength : bufferLength;			memcpy( pURLBuffer, pURLString, usedBufferLength );			if ( usedBufferLength < desiredBufferLength )			{				pURLBuffer[ usedBufferLength - 1 ] = '\0';			}			if ( pUsedBufferLength )			{				*pUsedBufferLength = usedBufferLength;			}			return true;		}	}	return false;}boolCHXClientPlayer::GetGroupTitleBuffer( UINT16 groupIndex, IHXBuffer** ppIDisplayName, bool& isURL ) const{	isURL = false;	SPIHXBuffer spBuffer;	SPIHXGroup spGroup;	SPIHXGroupManager spGroupManager = m_pIHXCorePlayer;	if ( spGroupManager.IsValid() && SUCCEEDED( spGroupManager->GetGroup( groupIndex, *spGroup.AsInOutParam() ) ) && ( spGroup.IsValid() ) )	{		// try to get a group name or URL; if that fails, look for a track with a title or URL		SPIHXValues spProperties = spGroup->GetGroupProperties();		if ( spProperties.IsValid() )		{			spProperties->GetPropertyCString( "title", *spBuffer.AsInOutParam() );			if ( BufferContainsText( spBuffer ) )			{				spBuffer.AsPtr( ppIDisplayName );				return true;			}			spProperties->GetPropertyCString( "url", *spBuffer.AsInOutParam() );			if ( BufferContainsText( spBuffer ) )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -