mod_localmediaplay.h 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. #include "SpBase.h"
  2. #include "SpIni.h"
  3. #ifdef RVC_OS_WIN
  4. #include <Shlwapi.h>
  5. #include "../../Other/libwmpplayer/libwmpplayer.h"
  6. #include "../../Other/libimgplayer/libimgplayer.h"
  7. #else
  8. #include <pthread.h>
  9. #include <signal.h>
  10. #include <unistd.h>
  11. #include "../../Other/libmediaplayer/libmediaplayer.h"
  12. #include "../../Other/libpictureplayer/libpictureplayer.h"
  13. #include <semaphore.h>
  14. #endif // RVC_OS_WIN
  15. #include "LocalMediaPlay_server_g.h"
  16. #include "AdvertBase/AdvertSync.h"
  17. #include "AdvertManage/mediaManage.h"
  18. #include <iostream>
  19. //#include "SpTest.h"
  20. #include "modVer.h"
  21. using namespace LocalMediaPlay;
  22. #define LOG_EVT_SELFCHECK_IEBROWSER_IDLE 0x50500007 //IEBrowser重启
  23. #define MAX_PLAY_CHANNELS 3 //最大播放通道数
  24. typedef struct {
  25. int nCfgInx;
  26. int nWndX;
  27. int nWndY;
  28. int nWndWidth;
  29. int nWndHeight;
  30. }MediaPlayParam;
  31. //DWORD WINAPI qryMedia(LPVOID lpv);
  32. //DWORD WINAPI MediaPlayThread(LPVOID param);
  33. //DWORD WINAPI clearOutdata(LPVOID lpv);
  34. //DWORD WINAPI CheckAudioThread(LPVOID param);
  35. #ifdef RVC_OS_WIN
  36. class CLocalMediaPlayEntity : public CWmpHostApi, public CImgHostApi, public CEntityBase, public ILogListener
  37. #else
  38. class CLocalMediaPlayEntity : public CMediaHostApi, public CPicHostApi, public CEntityBase, public ILogListener
  39. #endif // RVC_OS_WIN
  40. {
  41. public:
  42. CLocalMediaPlayEntity();
  43. virtual ~CLocalMediaPlayEntity();
  44. virtual const char *GetEntityName() const { return "LocalMediaPlay"; }
  45. virtual bool IsService() const { return true; }
  46. const char* GetEntityVersion() const override
  47. {
  48. return MODULE_VERSION_FULL;
  49. }
  50. virtual CServerSessionBase *OnNewSession(const char* pszRemoteEntityName, const char * pszClass);
  51. #ifdef RVC_OS_WIN
  52. virtual BOOL LoadPlayConfig(CWmpPlayConfig& config, int CfgInx);
  53. virtual BOOL LoadPlayConfig(CImgPlayConfig& config, int CfgInx);
  54. virtual void WmpDebug(const char* fmt, ...);
  55. virtual void ImgDebug(const char* fmt, ...);
  56. #else
  57. virtual int LoadPlayConfig(CMediaPlayConfig& config, int CfgInx);
  58. virtual int LoadPlayConfig(CPicPlayConfig& config, int CfgInx);
  59. virtual void Debug(const char* fmt, ...);
  60. virtual void PicDebug(const char* fmt, ...);
  61. virtual void AudioPlayFinished();
  62. virtual int GetMediaPlayerIcoPath(char* strPath, size_t uLen);
  63. virtual int GetPicPlayerIcoPath(char* strPath, size_t uLen);
  64. bool GetPlayFlag();
  65. #endif // _WIN32
  66. virtual void OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID, const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
  67. const DWORD dwSysError, const DWORD dwUserCode, const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
  68. const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName, const char *pszMessage);
  69. virtual void OnPreStart(CAutoArray<CSimpleStringA> strArgs, CSmartPointer<ITransactionContext> pTransactionContext);
  70. ErrorCodeEnum __OnStart(ErrorCodeEnum preOperationError);
  71. virtual void OnPreClose(EntityCloseCauseEnum eCloseCause, CSmartPointer<ITransactionContext> pTransactionContext);
  72. ErrorCodeEnum __OnClose(ErrorCodeEnum preOperationError);
  73. void StartVideo(int nCfgInx, int nWndX, int nWndY, int nWndWidth, int nWndHeight);
  74. void StartAudio(const char *pAudioNames);
  75. void StartImage(int nCfgInx, int nWndX, int nWndY, int nWndWidth, int nWndHeight);
  76. void StopVideo(int nCfgInx);
  77. void StopAudio();
  78. void StopImage(int nCfgInx);
  79. void StopAll();
  80. bool GetLocalVideoVolume(int nCfgInx, int &nVolume);
  81. bool SetLocalVideoVolume(int nCfgInx, int nVolume);
  82. std::pair<bool, int> GetLocalAudioVolume();
  83. bool SetLocalAudioVolume(int nVolume);
  84. bool IsRunConfigExist();
  85. protected:
  86. // 音频播放对象指针
  87. #ifdef RVC_OS_WIN
  88. Clibwmpplayer* m_pAudioPlayer;
  89. #else
  90. Clibmediaplayer* m_pMediaAudioPlayer;
  91. #endif // RVC_OS_WIN
  92. private:
  93. virtual void OnSelfTest(EntityTestEnum eTestType, CSmartPointer<ITransactionContext> pTransactionContext);
  94. // 按分隔符分隔字符串
  95. void CStringSplit(char *str, char **result, const char *del);
  96. //friend DWORD WINAPI clearOutdata(LPVOID lpv);
  97. #ifdef RVC_OS_WIN
  98. friend DWORD WINAPI MediaPlayThread(LPVOID param);
  99. friend DWORD WINAPI qryMedia(LPVOID lpv);
  100. friend DWORD WINAPI CheckAudioThread(LPVOID param);
  101. #else
  102. friend void* queryMedia(void* param);
  103. friend void* StartAudioPlayingThreadFunc(void* param);
  104. friend void* StartMediaPlayFunc(void* param);
  105. #endif // RVC_OS_WIN
  106. void setMediaPath();
  107. void SecureClientRelease();
  108. bool SecureClientConnect();
  109. void loadDefaultMedia();
  110. int GetPlayerIcoPath(char* strPath, size_t uLen);
  111. private:
  112. int m_id_seq;
  113. CUUID m_SubIDIEIdle;
  114. #ifdef RVC_OS_WIN
  115. // 视频播放对象指针数组
  116. Clibwmpplayer* m_pVideoPlayer[MAX_PLAY_CHANNELS];
  117. // 图片播放对象指针数组
  118. Clibimgplayer* m_pImagePlayer[MAX_PLAY_CHANNELS];
  119. #else
  120. // 媒体播放对象指针数组
  121. Clibmediaplayer* m_pMediaPlayer[MAX_PLAY_CHANNELS];
  122. // 图片播放对象指针数组 add by clp 20201103
  123. Clibpictureplayer* m_pPicturePlayer[MAX_PLAY_CHANNELS];
  124. #endif // RVC_OS_WIN
  125. //连接获取最新广告资源
  126. CAdvertSyncConnection *m_connection;
  127. mediaManage m_mediaManage;
  128. MediaPlayParam m_mediaParam;
  129. int m_defaultVolum;
  130. std::string m_lastPlayAudio;
  131. #ifdef RVC_OS_WIN
  132. HANDLE m_scanThread, m_playThread;
  133. vector<CWmpPlayConfig> m_defaultVideo;
  134. vector<CWmpPlayConfig> m_defaultAudio;
  135. vector<CImgPlayConfig> m_defaultImg;
  136. #else
  137. pthread_t m_scanThreadId;
  138. vector<CMediaPlayConfig> m_Videos;
  139. vector<CMediaPlayConfig> m_Audios;
  140. vector<CPicPlayConfig> m_defaultPic;
  141. pthread_t m_uMediaPlayThreadId;
  142. bool m_badplayflag;
  143. sem_t m_scanexit_sem;
  144. #endif // RVC_OS_WIN
  145. };
  146. class CLocalMediaPlaySession : public PlayService_ServerSessionBase
  147. {
  148. public:
  149. CLocalMediaPlaySession(CLocalMediaPlayEntity* pEntity, int id) : m_id(id), m_pEntity(pEntity)
  150. {
  151. }
  152. virtual void Handle_StartPlayVideo(SpReqAnsContext<PlayService_StartPlayVideo_Req, PlayService_StartPlayVideo_Ans>::Pointer ctx);
  153. virtual void Handle_StartPlayAudio(SpReqAnsContext<PlayService_StartPlayAudio_Req, PlayService_StartPlayAudio_Ans>::Pointer ctx);
  154. virtual void Handle_StartPlayImage(SpReqAnsContext<PlayService_StartPlayImage_Req, PlayService_StartPlayImage_Ans>::Pointer ctx);
  155. virtual void Handle_StopPlayVideo(SpReqAnsContext<PlayService_StopPlayVideo_Req, PlayService_StopPlayVideo_Ans>::Pointer ctx);
  156. virtual void Handle_StopPlayAudio(SpReqAnsContext<PlayService_StopPlayAudio_Req, PlayService_StopPlayAudio_Ans>::Pointer ctx);
  157. virtual void Handle_StopPlayImage(SpReqAnsContext<PlayService_StopPlayImage_Req, PlayService_StopPlayImage_Ans>::Pointer ctx);
  158. virtual void OnClose(ErrorCodeEnum eErrorCode);
  159. virtual void Handle_GetLocalVideoVolume(SpReqAnsContext<PlayService_GetLocalVideoVolume_Req, PlayService_GetLocalVideoVolume_Ans>::Pointer ctx);
  160. virtual void Handle_SetLocalVideoVolume(SpReqAnsContext<PlayService_SetLocalVideoVolume_Req, PlayService_SetLocalVideoVolume_Ans>::Pointer ctx);
  161. virtual void Handle_GetLocalAudioVolume(SpReqAnsContext<PlayService_GetLocalAudioVolume_Req, PlayService_GetLocalAudioVolume_Ans>::Pointer ctx);
  162. virtual void Handle_SetLocalAudioVolume(SpReqAnsContext<PlayService_SetLocalAudioVolume_Req, PlayService_SetLocalAudioVolume_Ans>::Pointer ctx);
  163. private:
  164. int m_id;
  165. CLocalMediaPlayEntity* m_pEntity;
  166. };