mod_localmediaplay.h 9.3 KB

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