chxavplayer.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:9k
源码类别:

Symbian

开发平台:

C/C++

  1. /************************************************************************
  2.  * chxavplayer.h
  3.  * -------------
  4.  *
  5.  * Synopsis:
  6.  * CHXPlayer manages and directs an underlying HXPlayer player object. The
  7.  * underlying HXPlayer is hidden from the UI, which interacts with CHXPlayer
  8.  * only. CHXPlayer exposes and implements all playback control and query
  9.  * methods for the UI.
  10.  *
  11.  * Target:
  12.  * Symbian OS
  13.  *
  14.  *
  15.  * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
  16.  *
  17.  *****************************************************************************/
  18. #ifndef CHXAVPLAYER_H__
  19. #define CHXAVPLAYER_H__
  20. // includes
  21. #include "unkimp.h"
  22. #include "hxstring.h"
  23. #include "hxausvc.h"
  24. #include "hxerror.h"
  25. #include "hxgroup.h"
  26. #include "ihxaccesspoint.h"
  27. #include "comptr.h"
  28. #include "chxavnetconnectui.h"
  29. #include "chxavplayerstate.h"
  30. #include "chxavplaylist.h"
  31. #include "chxavplayerui.h"
  32. #include "chxavsitesupplier.h"
  33. #include "chxavcallback.h"
  34. #include "chxsymclipinfo.h"
  35. #include "chxavaccesspointdb.h"
  36. // forward declarations
  37. class CHXAvNetConnectUI;
  38. _INTERFACE IHXClientAdviseSink;
  39. // class CHXAvPlayer
  40. class CHXAvPlayer 
  41. : public CUnknownIMP
  42. , public IHXClientAdviseSink
  43. , public IHXErrorSink
  44. , public IHXGroupSink
  45. , public IHXAccessPointSelector
  46. {
  47. public:
  48.     friend class CHXAvSiteSupplier;
  49. public:
  50.     DECLARE_UNKNOWN(CHXAvPlayer)
  51. private:
  52.     HX_RESULT QueryInterfaceDelegates(REFIID riid, void** ppvObj);
  53.     
  54. public:
  55.     enum 
  56.     {
  57. kVolumeMin = 0,
  58. kVolumeMax = 100
  59.     };
  60.     // ctor and dtor
  61.     CHXAvPlayer();
  62.     virtual ~CHXAvPlayer();
  63.     void ConstructL(const CHXClientEngineManagerPtr& spEngine, 
  64.         const CHXAvNetConnectUIPtr& pAccessPointSelector);
  65.     
  66.     // init and shutdown
  67.     void InitPlayerL(CCoeControl* pRenderWindow);
  68.     void ShutDown();
  69.     bool IsShutDown() const;
  70.     // play control
  71.     void Play(const char *url);
  72.     void Play(const TDesC& url);
  73.     void PlayCurrent();
  74.     void Stop();
  75.     void Pause();
  76.     void Resume();
  77.     // volume
  78.     void SetVolume(TUint level);
  79.     TUint GetVolume() const;
  80.     void StepVolume(TInt factor);
  81.     void Mute(bool bToMute);
  82.     bool IsMuted() const;
  83.     // time and duration
  84.     ULONG32 GetClipTime() const;
  85.     ULONG32 GetClipDuration() const;
  86.     
  87.     // clip headers, bitrates, urls, server info, is live, is video pres, etc.
  88.     const CHXSymClipInfo& GetClipInfo() const;
  89.    
  90.     // url
  91.     CHXString GetMainURL() const;
  92.     CHXString GetPlayURL() const;
  93.   
  94.     // playlist
  95.     enum AdvanceFlag
  96.     {
  97.         advanceNext = 0x01,
  98.         advancePrev = 0x02,
  99.         advanceLoop = 0x04
  100.        
  101.     };
  102.     bool IsPlaylistLoaded() const;
  103.     bool IsRemotePlayback() const;
  104.     bool HasPresLoaded() const;
  105.     bool HasPresStarted() const;
  106.     TInt GetPlaylistCurrentIndex() const;
  107.     TInt GetPlaylistItemCount() const;
  108.     void AdvancePlaylist(TUint flag);
  109.     // seek
  110.     void SetSeekPoint(ULONG32 time);
  111.     void StartSeek();
  112.     void EndSeek();
  113.     // draw
  114.     void RedrawPresentation();
  115.     // player state
  116.     CHXAvPlayerState& GetPlayerState();
  117.     bool IsPlaying() const;
  118.     bool IsBuffering() const;
  119.     bool IsPaused() const;
  120.     bool IsStopped() const;
  121.     bool IsSeeking() const;
  122.     bool IsConnecting() const;
  123.     bool IsInitiating() const;
  124.     bool CanSeek() const;
  125.     bool CanPause() const;
  126.     bool CanResume() const;
  127. private:
  128.     // IHXClientAdviseSink 
  129.     STDMETHOD(OnPosLength) (THIS_ UINT32 ulPosition, UINT32 ulLength);    
  130.     STDMETHOD(OnPresentationOpened) (THIS);
  131.     STDMETHOD(OnPresentationClosed) (THIS);
  132.     STDMETHOD(OnStatisticsChanged) (THIS);
  133.     STDMETHOD(OnPreSeek) (THIS_ ULONG32 ulOldTime, ULONG32 ulNewTime);
  134.     STDMETHOD(OnPostSeek) (THIS_ ULONG32 ulOldTime, ULONG32 ulNewTime);
  135.     STDMETHOD(OnStop) (THIS); 
  136.     STDMETHOD(OnPause) (THIS_ ULONG32 ulTime);
  137.     STDMETHOD(OnBegin) (THIS_ ULONG32 ulTime);
  138.     STDMETHOD(OnBuffering) (THIS_ ULONG32 ulFlags, UINT16 unPercentComplete);
  139.     STDMETHOD(OnContacting) (THIS_ const char* pHostName);
  140.     // IHXErrorSink
  141.     STDMETHOD(ErrorOccurred) (THIS_
  142. const UINT8 unSeverity,  
  143. const ULONG32 ulHXCode,
  144. const ULONG32 ulUserCode,
  145. const char* pUserString,
  146. const char* pMoreInfoURL);
  147.     // IHXAccessPointSelector
  148.     STDMETHOD(SelectAccessPoint)(THIS_ 
  149.  IHXAccessPointSelectorResponse* pResponse);
  150.     // IHXGroupSink
  151.     STDMETHOD(GroupAdded)    (THIS_
  152.     UINT16      /*IN*/ uGroupIndex,
  153.     IHXGroup*     /*IN*/ pGroup);
  154.     STDMETHOD(GroupRemoved)    (THIS_
  155.         UINT16      /*IN*/ uGroupIndex,
  156.         IHXGroup*  /*IN*/ pGroup);
  157.     STDMETHOD(AllGroupsRemoved)  (THIS);
  158.     STDMETHOD(TrackAdded)  (THIS_
  159.     UINT16      /*IN*/ uGroupIndex,
  160.     UINT16      /*IN*/ uTrackIndex,
  161.     IHXValues*     /*IN*/ pTrack);
  162.     STDMETHOD(TrackRemoved)    (THIS_
  163.         UINT16  /*IN*/ uGroupIndex,
  164.         UINT16  /*IN*/ uTrackIndex,
  165.         IHXValues* /*IN*/ pTrack);
  166.     STDMETHOD(TrackStarted) (THIS_
  167.         UINT16     /*IN*/ uGroupIndex,
  168.         UINT16     /*IN*/ uTrackIndex,
  169.         IHXValues* /*IN*/ pTrack);
  170.     STDMETHOD(TrackStopped) (THIS_
  171.         UINT16     /*IN*/ uGroupIndex,
  172.         UINT16     /*IN*/ uTrackIndex,
  173.         IHXValues* /*IN*/ pTrack);
  174.     STDMETHOD(CurrentGroupSet) (THIS_
  175.         UINT16      /*IN*/ uGroupIndex,
  176.         IHXGroup*  /*IN*/ pGroup);
  177. private:
  178.     // implementation helpers
  179.     void ResetUnloadedClipState();
  180.     void DoPlaylistInit(const char* pURL);
  181.     bool HandlePlaylistAdvance(TUint flag);
  182.     void DoPlayImp(const char* url);
  183.     void DoStopImp();
  184.     void OnNetConnect();
  185.     
  186. private:
  187.     //TUint m_minVolume;
  188.     //TUint m_maxVolume;
  189.     TUint m_volumeStep;
  190.     ULONG32 m_clipDuration;
  191.     ULONG32 m_clipPos;
  192.     CHXString m_playUrl;
  193.     CHXString m_mainUrl;
  194.     CHXAvPlayerState m_playerState;
  195.    
  196.     CHXClientEngineManagerPtr m_spEngine;
  197.     comptr<IHXPlayer> m_hxPlayer;
  198.     comptr<IHXAudioPlayer> m_audioPlayer;
  199.     comptr<CHXAvSiteSupplier> m_siteSupplier;
  200.     comptr<CHXLitePrefs> m_prefs;
  201.     comptr<IHXCommonClassFactory> m_factory;
  202.     comptr<IHXAccessPointManager> m_apManager;
  203.     CHXAvNetConnectUIPtr m_apSelector;
  204.     CHXAvPlaylistPtr m_pPlaylist;
  205.     CHXAvPlaylistItrPtr m_pPlayItr;
  206.     bool m_bEnableAutoPlayNext;
  207.     bool m_bIsTruePlaylistLoaded;
  208.     bool m_bResumeOnEndSeek;
  209.     CHXAvCallback m_cbPlay;
  210.     enum StartupStage
  211.     {
  212.         ssStopped,
  213.         ssPastInitiate,
  214.         ssPastOpenPres,
  215.         ssPastFirstBuffer,
  216.         ssPastTimerStarted
  217.     } m_startupStage;
  218.     bool m_bIsRemotePlayback;
  219.     bool m_bAccessPointSetupFailed;
  220.     CHXSymClipInfo m_clipInfo;
  221. };
  222. inline
  223. const CHXSymClipInfo& CHXAvPlayer::GetClipInfo() const
  224. {
  225.     return m_clipInfo;
  226. }
  227. inline
  228. bool CHXAvPlayer::IsShutDown() const
  229. {
  230.     return (!m_hxPlayer);
  231. }
  232. //
  233. // return TRUE if:
  234. //
  235. // a) non-file url, e.g.:
  236. //
  237. // sdp
  238. // rtsp
  239. // http
  240. // 
  241. // or
  242. //
  243. // b) remote link (one of above) in a smil file
  244. //
  245. // in case (b) we can't know until after the presentation opens
  246. //
  247. inline
  248. bool CHXAvPlayer::IsRemotePlayback() const
  249. {
  250.     return m_bIsRemotePlayback;
  251. }
  252. inline
  253. bool CHXAvPlayer::HasPresLoaded() const
  254. {
  255.     return m_startupStage >= ssPastOpenPres;
  256. }
  257. inline
  258. bool CHXAvPlayer::HasPresStarted() const
  259. {
  260.     return m_startupStage >= ssPastFirstBuffer;
  261. }
  262. inline
  263. bool CHXAvPlayer::IsBuffering() const
  264. {
  265.     return (CHXAvPlayerState::NotBuffering != m_playerState.GetBufferingState());
  266. }
  267. inline
  268. bool CHXAvPlayer::IsPlaying() const
  269. {
  270.     return CHXAvPlayerState::Playing == m_playerState.GetState();
  271. }
  272. inline
  273. bool CHXAvPlayer::IsPaused() const
  274. {
  275.      return CHXAvPlayerState::Paused == m_playerState.GetState();
  276. }
  277. inline
  278. bool CHXAvPlayer::IsStopped() const
  279. {
  280.     return CHXAvPlayerState::Stopped == m_playerState.GetState();
  281. }
  282. inline
  283. bool CHXAvPlayer::IsSeeking() const
  284. {
  285.     return CHXAvPlayerState::Seeking == m_playerState.GetState();
  286. }
  287. inline
  288. bool CHXAvPlayer::IsConnecting() const
  289. {
  290.     return CHXAvPlayerState::Connecting == m_playerState.GetState();
  291. }
  292. inline
  293. bool CHXAvPlayer::IsInitiating() const
  294. {
  295.     return CHXAvPlayerState::Initiating == m_playerState.GetState();
  296. }
  297. inline
  298. ULONG32 CHXAvPlayer::GetClipDuration() const 
  299. {
  300.     return m_clipDuration;
  301. }
  302. inline
  303. CHXString CHXAvPlayer::GetMainURL() const 
  304. { return m_mainUrl; }
  305. inline
  306. CHXString CHXAvPlayer::GetPlayURL() const 
  307. { return m_playUrl; }
  308. inline
  309. bool CHXAvPlayer::IsPlaylistLoaded() const 
  310. { return m_pPlaylist; }
  311. inline
  312. CHXAvPlayerState& CHXAvPlayer::GetPlayerState() 
  313. { return m_playerState; }
  314. inline 
  315. void CHXAvPlayer::RedrawPresentation() 
  316. { m_siteSupplier->RedrawAllSites(); }
  317. #endif // CHXAVPLAYER_H__