mod_localmediaplay.h 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. #include "SpBase.h"
  2. #include "SpIni.h"
  3. #ifdef RVC_OS_WIN
  4. #include <Shlwapi.h>
  5. #include "libwmpplayer.h"
  6. #include "libimgplayer.h"
  7. #else
  8. #include <pthread.h>
  9. #include <signal.h>
  10. #include <semaphore.h>
  11. #include <unistd.h>
  12. #endif // RVC_OS_WIN
  13. #include "libmediaplayer.h"
  14. #include "libpictureplayer.h"
  15. #include "libaudioqueue.h"
  16. #include "LocalMediaPlay_server_g.h"
  17. #include "AdvertManage/mediaManage.h"
  18. #include <iostream>
  19. #include <vector>
  20. #include "modVer.h"
  21. #include "EventCode.h"
  22. using namespace LocalMediaPlay;
  23. #define MAX_PLAY_CHANNELS 3 //最大播放通道数
  24. #ifndef RVC_AUDIO_LEN
  25. #define RVC_AUDIO_LEN 320
  26. #endif // !RVC_AUDIO_LEN
  27. #ifndef RVC_AUDIO_BUFFER_LEN
  28. #define RVC_AUDIO_BUFFER_LEN 320*8*2
  29. #endif // !RVC_AUDIO_BUFFER_LEN
  30. typedef struct {
  31. int nCfgInx;
  32. int nWndX;
  33. int nWndY;
  34. int nWndWidth;
  35. int nWndHeight;
  36. }MediaPlayParam;
  37. #ifdef RVC_OS_WIN
  38. DWORD WINAPI qryMedia(LPVOID lpv);
  39. DWORD WINAPI MediaPlayThread(LPVOID param);
  40. DWORD WINAPI NoticePlayThread(LPVOID param);
  41. DWORD WINAPI StartMediaPlayFunc(LPVOID param);
  42. DWORD WINAPI StartAudioPlayingThreadFunc(LPVOID param);
  43. DWORD WINAPI StartNoticePlayThreadFunc(LPVOID param);
  44. #endif
  45. #ifdef RVC_OS_WIN
  46. class CLocalMediaPlayEntity : public CWmpHostApi, public CImgHostApi, public CMediaHostApi, public CPicHostApi, public CEntityBase, public ILogListener
  47. #else
  48. class CLocalMediaPlayEntity : public CMediaHostApi, public CPicHostApi, public CEntityBase, public ILogListener
  49. #endif // RVC_OS_WIN
  50. {
  51. public:
  52. CLocalMediaPlayEntity();
  53. virtual ~CLocalMediaPlayEntity();
  54. virtual const char *GetEntityName() const { return "LocalMediaPlay"; }
  55. virtual bool IsService() const { return true; }
  56. const char* GetEntityVersion() const override
  57. {
  58. return MODULE_VERSION_FULL;
  59. }
  60. virtual CServerSessionBase *OnNewSession(const char* pszRemoteEntityName, const char * pszClass);
  61. virtual DeviceTypeEnum RvcGetDeviceType();
  62. #ifdef RVC_OS_WIN
  63. virtual bool LoadPlayConfig(CWmpPlayConfig& config, int CfgInx);
  64. virtual bool LoadPlayConfig(CImgPlayConfig& config, int CfgInx);
  65. virtual void WmpDebug(const char* fmt, ...);
  66. virtual void WmpLogEvt(int ievent, const char* strmsg);
  67. virtual void ImgDebug(const char* fmt, ...);
  68. #endif // _WIN32
  69. virtual int LoadPlayConfig(CMediaPlayConfig& config, int CfgInx);
  70. virtual int LoadPlayConfig(CPicPlayConfig& config, int CfgInx);
  71. virtual void Debug(media_loglevel log_level, const char* fmt, ...);
  72. virtual void PicDebug(pic_loglevel log_level, const char* fmt, ...);
  73. virtual void MediaPlayFinished(int iMediaType);
  74. virtual int GetMediaPlayerIcoPath(char* strPath, int uLen);
  75. virtual int GetPicPlayerIcoPath(char* strPath, int uLen);
  76. virtual int GetAudioOutDevName(char* strDev, int uLen);
  77. virtual int PlayingAudioDataCallback(audio_param_t* param, const void* input, unsigned long uaudiolen);
  78. bool GetPlayFlag();
  79. bool GetScanExitFlag();
  80. ErrorCodeEnum HandleRemoteRecord(const char* pszMessage);
  81. virtual void OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID, const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
  82. const DWORD dwSysError, const DWORD dwUserCode, const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
  83. const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName, const char *pszMessage, const linkContext& pLinkInfo);
  84. virtual void OnPreStart(CAutoArray<CSimpleStringA> strArgs, CSmartPointer<ITransactionContext> pTransactionContext);
  85. ErrorCodeEnum __OnStart(ErrorCodeEnum preOperationError);
  86. virtual void OnStarted();
  87. virtual void OnPreClose(EntityCloseCauseEnum eCloseCause, CSmartPointer<ITransactionContext> pTransactionContext);
  88. ErrorCodeEnum __OnClose(ErrorCodeEnum preOperationError);
  89. void StartVideo(int nCfgInx, int nWndX, int nWndY, int nWndWidth, int nWndHeight);
  90. void StartAudio(const char *pAudioNames);
  91. void StartImage(int nCfgInx, int nWndX, int nWndY, int nWndWidth, int nWndHeight);
  92. void StopVideo(int nCfgInx);
  93. void StopAudio();
  94. void StopImage(int nCfgInx);
  95. void StopAll();
  96. bool GetLocalVideoVolume(int nCfgInx, int &nVolume);
  97. bool SetLocalVideoVolume(int nCfgInx, int nVolume);
  98. std::pair<bool, int> GetLocalAudioVolume();
  99. bool SetLocalAudioVolume(int nVolume);
  100. bool IsRunConfigExist();
  101. ErrorCodeEnum StartNotice(int nCfgInx, int nWndX, int nWndY, int nWndWidth, int nWndHeight, const char *pVideoName);
  102. ErrorCodeEnum StartMediaPlayerNotice(int nCfgInx, int nWndX, int nWndY, int nWndWidth, int nWndHeight, const char *pVideoName);
  103. ErrorCodeEnum StartFFPlayerNotice(int nCfgInx, int nWndX, int nWndY, int nWndWidth, int nWndHeight, const char *pVideoName);
  104. ErrorCodeEnum LoadEntityConfig();
  105. ErrorCodeEnum StopNotice(int nCfgInx);
  106. ErrorCodeEnum StopPlayAllMedias();
  107. DeviceTypeEnum GetDeviceType();
  108. private:
  109. virtual void OnSelfTest(EntityTestEnum eTestType, CSmartPointer<ITransactionContext> pTransactionContext);
  110. #ifdef RVC_OS_WIN
  111. friend DWORD WINAPI qryMedia(LPVOID lpv);
  112. friend DWORD WINAPI MediaPlayThread(LPVOID param);
  113. friend DWORD WINAPI NoticePlayThread(LPVOID param);
  114. friend DWORD WINAPI StartMediaPlayFunc(LPVOID param);
  115. friend DWORD WINAPI StartAudioPlayingThreadFunc(LPVOID param);
  116. friend DWORD WINAPI StartNoticePlayThreadFunc(LPVOID param);
  117. #else
  118. friend void* queryMedia(void* param);
  119. friend void* StartAudioPlayingThreadFunc(void* param);
  120. friend void* StartMediaPlayFunc(void* param);
  121. friend void* StartNoticePlayThreadFunc(void* param);
  122. #endif // RVC_OS_WIN
  123. void setMediaPath();
  124. void loadDefaultMedia(bool fNewVersion = true);
  125. int GetPlayerIcoPath(char* strPath, int iLen);
  126. int GetAudioOutDev();
  127. void LogLocalMediaPlayVolumeInfo();
  128. private:
  129. int m_id_seq;
  130. CUUID m_SubIDIEIdle;
  131. CUUID m_SubIDStartRecord;
  132. CUUID m_SubIDStopRecord;
  133. #ifdef RVC_OS_WIN
  134. // 视频播放对象指针数组
  135. Clibwmpplayer* m_pVideoPlayer[MAX_PLAY_CHANNELS];
  136. // 音频播放对象指针
  137. Clibwmpplayer* m_pAudioPlayer;
  138. // 图片播放对象指针数组
  139. Clibimgplayer* m_pImagePlayer[MAX_PLAY_CHANNELS];
  140. #endif // RVC_OS_WIN
  141. // 媒体播放对象指针数组
  142. Clibmediaplayer* m_pMediaPlayer[MAX_PLAY_CHANNELS];
  143. // 图片播放对象指针数组
  144. Clibpictureplayer* m_pPicturePlayer[MAX_PLAY_CHANNELS];
  145. Clibmediaplayer* m_pMediaAudioPlayer;
  146. mediaManage m_mediaManage;
  147. MediaPlayParam m_mediaParam;
  148. int m_defaultVolum;
  149. std::string m_lastPlayAudio;
  150. std::string m_lastPlayVideo;
  151. DeviceTypeEnum m_eDeviceType;
  152. CSimpleStringA m_AudioPath;
  153. CSimpleStringA m_VideoPath;
  154. bool m_bLocalPicLogFlag;
  155. bool m_bRecordPCM;
  156. bool m_bStartRecord;
  157. bool m_bloged;
  158. #ifdef RVC_OS_WIN
  159. HANDLE m_hStopMediaPlayEvent;
  160. HANDLE m_scanThreadId;
  161. HANDLE m_uMediaPlayThreadId;
  162. HANDLE m_uAudioPlayThreadId;
  163. HANDLE m_uNoticePlayThreadId;
  164. HANDLE m_scanThread, m_playThread;
  165. vector<CWmpPlayConfig> m_defaultVideo;
  166. vector<CWmpPlayConfig> m_defaultAudio;
  167. vector<CImgPlayConfig> m_defaultImg;
  168. #else
  169. pthread_t m_scanThreadId;
  170. pthread_t m_uAudioPlayThreadId;
  171. sem_t m_stop_mediaplay_semt;
  172. pthread_t m_uMediaPlayThreadId;
  173. pthread_t m_uNoticePlayThreadId;
  174. #endif // RVC_OS_WIN
  175. vector<CMediaPlayConfig> m_Videos;
  176. vector<CMediaPlayConfig> m_Audios;
  177. vector<CPicPlayConfig> m_defaultPic;
  178. volatile bool m_badplayflag;
  179. bool m_scanexitflag;
  180. CSimpleStringA m_strAudioOutDev;
  181. bool m_bgetflag;
  182. bool m_bgetico;
  183. Clibaudioqueue* m_remote_audio_queue;
  184. FILE* m_pFile;
  185. char m_audiobuffer[RVC_AUDIO_BUFFER_LEN];
  186. int m_leftlen;
  187. int m_iseriesnumber;
  188. bool m_buserstopaudio;
  189. int m_iPlayType;
  190. pic_loglevel m_piclevel;
  191. media_loglevel m_medialevel;
  192. };
  193. class CLocalMediaPlaySession : public PlayService_ServerSessionBase
  194. {
  195. public:
  196. CLocalMediaPlaySession(CLocalMediaPlayEntity* pEntity, int id) : m_id(id), m_pEntity(pEntity)
  197. {
  198. }
  199. virtual void Handle_StartPlayVideo(SpReqAnsContext<PlayService_StartPlayVideo_Req, PlayService_StartPlayVideo_Ans>::Pointer ctx);
  200. virtual void Handle_StartPlayAudio(SpReqAnsContext<PlayService_StartPlayAudio_Req, PlayService_StartPlayAudio_Ans>::Pointer ctx);
  201. virtual void Handle_StartPlayImage(SpReqAnsContext<PlayService_StartPlayImage_Req, PlayService_StartPlayImage_Ans>::Pointer ctx);
  202. virtual void Handle_StopPlayVideo(SpReqAnsContext<PlayService_StopPlayVideo_Req, PlayService_StopPlayVideo_Ans>::Pointer ctx);
  203. virtual void Handle_StopPlayAudio(SpReqAnsContext<PlayService_StopPlayAudio_Req, PlayService_StopPlayAudio_Ans>::Pointer ctx);
  204. virtual void Handle_StopPlayImage(SpReqAnsContext<PlayService_StopPlayImage_Req, PlayService_StopPlayImage_Ans>::Pointer ctx);
  205. virtual void OnClose(ErrorCodeEnum eErrorCode);
  206. virtual void Handle_GetLocalVideoVolume(SpReqAnsContext<PlayService_GetLocalVideoVolume_Req, PlayService_GetLocalVideoVolume_Ans>::Pointer ctx);
  207. virtual void Handle_SetLocalVideoVolume(SpReqAnsContext<PlayService_SetLocalVideoVolume_Req, PlayService_SetLocalVideoVolume_Ans>::Pointer ctx);
  208. virtual void Handle_GetLocalAudioVolume(SpReqAnsContext<PlayService_GetLocalAudioVolume_Req, PlayService_GetLocalAudioVolume_Ans>::Pointer ctx);
  209. virtual void Handle_SetLocalAudioVolume(SpReqAnsContext<PlayService_SetLocalAudioVolume_Req, PlayService_SetLocalAudioVolume_Ans>::Pointer ctx);
  210. virtual void Handle_StartPlayNotice(SpReqAnsContext<PlayService_StartPlayNotice_Req, PlayService_StartPlayNotice_Ans>::Pointer ctx);
  211. virtual void Handle_StopPlayNotice(SpReqAnsContext<PlayService_StopPlayNotice_Req, PlayService_StopPlayNotice_Ans>::Pointer ctx);
  212. virtual void Handle_StopPlayAllMedias(SpReqAnsContext<PlayService_StopPlayAllMedias_Req, PlayService_StopPlayAllMedias_Ans>::Pointer ctx);
  213. private:
  214. int m_id;
  215. CLocalMediaPlayEntity* m_pEntity;
  216. };