mod_localmediaplay.h 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  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. #include "../../Other/libaudioqueue/libaudioqueue.h"
  15. #endif // RVC_OS_WIN
  16. #include "LocalMediaPlay_server_g.h"
  17. #include "AdvertBase/AdvertSync.h"
  18. #include "AdvertManage/mediaManage.h"
  19. #include <iostream>
  20. //#include "SpTest.h"
  21. #include "modVer.h"
  22. #include "EventCode.h"
  23. using namespace LocalMediaPlay;
  24. #define LOG_EVT_SELFCHECK_IEBROWSER_IDLE 0x50500007 //IEBrowser重启
  25. #define MAX_PLAY_CHANNELS 3 //最大播放通道数
  26. #define LOG_EVT_START_NOTICE_PLAY 0x31300101
  27. #define LOG_EVT_STOP_NOTICE_PLAY 0x31300102
  28. #define LOG_EVT_NOTICE_PLAY_FINISHED 0x31300103
  29. #define LOG_EVT_NOTICE_FILE_NOT_EXIST 0x31300104
  30. #define LOG_EVT_ADV_VIDEO_NOT_EXIST 0x31300105
  31. #define LOG_EVT_ADV_AUDIO_NOT_EXIST 0x31300106
  32. #define LOG_EVT_ADV_PIC_NOT_EXIST 0x31300107
  33. #define LOG_EVT_VICE_MONITOR_NOT_EXIST 0x31300108
  34. #define LOG_EVT_VICE_MONITOR_SET_ERROR 0x31300109
  35. #define LOG_EVT_NOTICE_PLAY_EARLY_TERM 0x3130010A
  36. #ifndef RVC_AUDIO_LEN
  37. #define RVC_AUDIO_LEN 320
  38. #endif // !RVC_AUDIO_LEN
  39. #ifndef RVC_AUDIO_BUFFER_LEN
  40. #define RVC_AUDIO_BUFFER_LEN 1024*4
  41. #endif // !RVC_AUDIO_BUFFER_LEN
  42. typedef struct {
  43. int nCfgInx;
  44. int nWndX;
  45. int nWndY;
  46. int nWndWidth;
  47. int nWndHeight;
  48. }MediaPlayParam;
  49. //DWORD WINAPI qryMedia(LPVOID lpv);
  50. //DWORD WINAPI MediaPlayThread(LPVOID param);
  51. //DWORD WINAPI clearOutdata(LPVOID lpv);
  52. //DWORD WINAPI CheckAudioThread(LPVOID param);
  53. #ifdef RVC_OS_WIN
  54. class CLocalMediaPlayEntity : public CWmpHostApi, public CImgHostApi, public CEntityBase, public ILogListener
  55. #else
  56. class CLocalMediaPlayEntity : public CMediaHostApi, public CPicHostApi, public CEntityBase, public ILogListener
  57. #endif // RVC_OS_WIN
  58. {
  59. public:
  60. CLocalMediaPlayEntity();
  61. virtual ~CLocalMediaPlayEntity();
  62. virtual const char *GetEntityName() const { return "LocalMediaPlay"; }
  63. virtual bool IsService() const { return true; }
  64. const char* GetEntityVersion() const override
  65. {
  66. return MODULE_VERSION_FULL;
  67. }
  68. virtual CServerSessionBase *OnNewSession(const char* pszRemoteEntityName, const char * pszClass);
  69. virtual DeviceTypeEnum RvcGetDeviceType();
  70. #ifdef RVC_OS_WIN
  71. virtual BOOL LoadPlayConfig(CWmpPlayConfig& config, int CfgInx);
  72. virtual BOOL LoadPlayConfig(CImgPlayConfig& config, int CfgInx);
  73. virtual void WmpDebug(const char* fmt, ...);
  74. virtual void ImgDebug(const char* fmt, ...);
  75. #else
  76. virtual int LoadPlayConfig(CMediaPlayConfig& config, int CfgInx);
  77. virtual int LoadPlayConfig(CPicPlayConfig& config, int CfgInx);
  78. virtual void Debug(media_loglevel log_level, const char* fmt, ...);
  79. virtual void PicDebug(pic_loglevel log_level, const char* fmt, ...);
  80. virtual void MediaPlayFinished(int iMediaType);
  81. virtual int GetMediaPlayerIcoPath(char* strPath, size_t uLen);
  82. virtual int GetPicPlayerIcoPath(char* strPath, size_t uLen);
  83. virtual int GetAudioOutDevName(char* strDev, size_t uLen);
  84. virtual int PlayingAudioDataCallback(audio_param_t* param, const void* input, unsigned long uaudiolen);
  85. bool GetPlayFlag();
  86. bool GetScanExitFlag();
  87. #endif // _WIN32
  88. virtual void OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID, const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
  89. const DWORD dwSysError, const DWORD dwUserCode, const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
  90. const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName, const char *pszMessage);
  91. virtual void OnPreStart(CAutoArray<CSimpleStringA> strArgs, CSmartPointer<ITransactionContext> pTransactionContext);
  92. ErrorCodeEnum __OnStart(ErrorCodeEnum preOperationError);
  93. virtual void OnStarted();
  94. virtual void OnPreClose(EntityCloseCauseEnum eCloseCause, CSmartPointer<ITransactionContext> pTransactionContext);
  95. ErrorCodeEnum __OnClose(ErrorCodeEnum preOperationError);
  96. void StartVideo(int nCfgInx, int nWndX, int nWndY, int nWndWidth, int nWndHeight);
  97. void StartAudio(const char *pAudioNames);
  98. void StartImage(int nCfgInx, int nWndX, int nWndY, int nWndWidth, int nWndHeight);
  99. void StopVideo(int nCfgInx);
  100. void StopAudio();
  101. void StopImage(int nCfgInx);
  102. void StopAll();
  103. bool GetLocalVideoVolume(int nCfgInx, int &nVolume);
  104. bool SetLocalVideoVolume(int nCfgInx, int nVolume);
  105. std::pair<bool, int> GetLocalAudioVolume();
  106. bool SetLocalAudioVolume(int nVolume);
  107. bool IsRunConfigExist();
  108. ErrorCodeEnum StartNotice(int nCfgInx, int nWndX, int nWndY, int nWndWidth, int nWndHeight, const char *pVideoName);
  109. ErrorCodeEnum StopNotice(int nCfgInx);
  110. ErrorCodeEnum StopPlayAllMedias();
  111. DeviceTypeEnum GetDeviceType();
  112. protected:
  113. // 音频播放对象指针
  114. #ifdef RVC_OS_WIN
  115. Clibwmpplayer* m_pAudioPlayer;
  116. #else
  117. Clibmediaplayer* m_pMediaAudioPlayer;
  118. #endif // RVC_OS_WIN
  119. private:
  120. virtual void OnSelfTest(EntityTestEnum eTestType, CSmartPointer<ITransactionContext> pTransactionContext);
  121. // 按分隔符分隔字符串
  122. void CStringSplit(char *str, char **result, const char *del);
  123. //friend DWORD WINAPI clearOutdata(LPVOID lpv);
  124. #ifdef RVC_OS_WIN
  125. friend DWORD WINAPI MediaPlayThread(LPVOID param);
  126. friend DWORD WINAPI qryMedia(LPVOID lpv);
  127. friend DWORD WINAPI CheckAudioThread(LPVOID param);
  128. #else
  129. friend void* queryMedia(void* param);
  130. friend void* StartAudioPlayingThreadFunc(void* param);
  131. friend void* StartMediaPlayFunc(void* param);
  132. friend void* StartNoticePlayThreadFunc(void* param);
  133. int GetPlayerIcoPath(char* strPath, size_t uLen);
  134. int GetAudioOutDev();
  135. #endif // RVC_OS_WIN
  136. void setMediaPath();
  137. void SecureClientRelease();
  138. bool SecureClientConnect();
  139. void loadDefaultMedia();
  140. private:
  141. int m_id_seq;
  142. CUUID m_SubIDIEIdle;
  143. CUUID m_SubIDStartRecord;
  144. CUUID m_SubIDStopRecord;
  145. #ifdef RVC_OS_WIN
  146. // 视频播放对象指针数组
  147. Clibwmpplayer* m_pVideoPlayer[MAX_PLAY_CHANNELS];
  148. // 图片播放对象指针数组
  149. Clibimgplayer* m_pImagePlayer[MAX_PLAY_CHANNELS];
  150. #else
  151. // 媒体播放对象指针数组
  152. Clibmediaplayer* m_pMediaPlayer[MAX_PLAY_CHANNELS];
  153. // 图片播放对象指针数组 add by clp 20201103
  154. Clibpictureplayer* m_pPicturePlayer[MAX_PLAY_CHANNELS];
  155. #endif // RVC_OS_WIN
  156. //连接获取最新广告资源
  157. CAdvertSyncConnection *m_connection;
  158. mediaManage m_mediaManage;
  159. MediaPlayParam m_mediaParam;
  160. int m_defaultVolum;
  161. std::string m_lastPlayAudio;
  162. std::string m_lastPlayVideo;
  163. DeviceTypeEnum m_eDeviceType;
  164. bool m_bStartRecord;
  165. char m_audiobuffer[RVC_AUDIO_BUFFER_LEN];
  166. int m_leftlen;
  167. #ifdef RVC_OS_WIN
  168. HANDLE m_scanThread, m_playThread;
  169. vector<CWmpPlayConfig> m_defaultVideo;
  170. vector<CWmpPlayConfig> m_defaultAudio;
  171. vector<CImgPlayConfig> m_defaultImg;
  172. #else
  173. pthread_t m_scanThreadId;
  174. vector<CMediaPlayConfig> m_Videos;
  175. vector<CMediaPlayConfig> m_Audios;
  176. vector<CPicPlayConfig> m_defaultPic;
  177. pthread_t m_uMediaPlayThreadId;
  178. pthread_t m_uNoticePlayThreadId;
  179. volatile bool m_badplayflag;
  180. bool m_scanexitflag;
  181. CSimpleStringA m_strAudioOutDev;
  182. bool m_bgetflag;
  183. bool m_bgetico;
  184. Clibaudioqueue* m_remote_audio_queue;
  185. #endif // RVC_OS_WIN
  186. };
  187. class CLocalMediaPlaySession : public PlayService_ServerSessionBase
  188. {
  189. public:
  190. CLocalMediaPlaySession(CLocalMediaPlayEntity* pEntity, int id) : m_id(id), m_pEntity(pEntity)
  191. {
  192. }
  193. virtual void Handle_StartPlayVideo(SpReqAnsContext<PlayService_StartPlayVideo_Req, PlayService_StartPlayVideo_Ans>::Pointer ctx);
  194. virtual void Handle_StartPlayAudio(SpReqAnsContext<PlayService_StartPlayAudio_Req, PlayService_StartPlayAudio_Ans>::Pointer ctx);
  195. virtual void Handle_StartPlayImage(SpReqAnsContext<PlayService_StartPlayImage_Req, PlayService_StartPlayImage_Ans>::Pointer ctx);
  196. virtual void Handle_StopPlayVideo(SpReqAnsContext<PlayService_StopPlayVideo_Req, PlayService_StopPlayVideo_Ans>::Pointer ctx);
  197. virtual void Handle_StopPlayAudio(SpReqAnsContext<PlayService_StopPlayAudio_Req, PlayService_StopPlayAudio_Ans>::Pointer ctx);
  198. virtual void Handle_StopPlayImage(SpReqAnsContext<PlayService_StopPlayImage_Req, PlayService_StopPlayImage_Ans>::Pointer ctx);
  199. virtual void OnClose(ErrorCodeEnum eErrorCode);
  200. virtual void Handle_GetLocalVideoVolume(SpReqAnsContext<PlayService_GetLocalVideoVolume_Req, PlayService_GetLocalVideoVolume_Ans>::Pointer ctx);
  201. virtual void Handle_SetLocalVideoVolume(SpReqAnsContext<PlayService_SetLocalVideoVolume_Req, PlayService_SetLocalVideoVolume_Ans>::Pointer ctx);
  202. virtual void Handle_GetLocalAudioVolume(SpReqAnsContext<PlayService_GetLocalAudioVolume_Req, PlayService_GetLocalAudioVolume_Ans>::Pointer ctx);
  203. virtual void Handle_SetLocalAudioVolume(SpReqAnsContext<PlayService_SetLocalAudioVolume_Req, PlayService_SetLocalAudioVolume_Ans>::Pointer ctx);
  204. virtual void Handle_StartPlayNotice(SpReqAnsContext<PlayService_StartPlayNotice_Req, PlayService_StartPlayNotice_Ans>::Pointer ctx);
  205. virtual void Handle_StopPlayNotice(SpReqAnsContext<PlayService_StopPlayNotice_Req, PlayService_StopPlayNotice_Ans>::Pointer ctx);
  206. virtual void Handle_StopPlayAllMedias(SpReqAnsContext<PlayService_StopPlayAllMedias_Req, PlayService_StopPlayAllMedias_Ans>::Pointer ctx);
  207. private:
  208. int m_id;
  209. CLocalMediaPlayEntity* m_pEntity;
  210. };