FrmCameraPlayerF.cpp 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "AppGlobalF.h"
  4. #include "FrmCameraPlayerF.h"
  5. #include "FrmCameraFullScreenF.h"
  6. #include "FrmCameraInfoF.h"
  7. #include "FrmCameraScreenF.h"
  8. #pragma hdrstop
  9. //---------------------------------------------------------------------------
  10. #pragma package(smart_init)
  11. #pragma link "FFBaseComponent"
  12. #pragma link "FFBasePlay"
  13. #pragma link "FFPlay"
  14. #pragma link "cxContainer"
  15. #pragma link "cxControls"
  16. #pragma link "cxEdit"
  17. #pragma link "cxGraphics"
  18. #pragma link "cxLabel"
  19. #pragma link "cxLookAndFeelPainters"
  20. #pragma link "cxLookAndFeels"
  21. #pragma link "dxSkinBlack"
  22. #pragma link "dxSkinBlue"
  23. #pragma link "dxSkinsCore"
  24. #pragma link "dxGDIPlusClasses"
  25. #pragma link "IdBaseComponent"
  26. #pragma link "IdComponent"
  27. #pragma link "IdExplicitTLSClientServerBase"
  28. #pragma link "IdFTP"
  29. #pragma link "IdTCPClient"
  30. #pragma link "IdTCPConnection"
  31. #pragma link "FFLog"
  32. #pragma resource "*.dfm"
  33. #define LICENSE_KEY "FSXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX"
  34. #define FFPLAYER 1
  35. TFrmCameraPlayer *FrmCameraPlayer = NULL;
  36. //---------------------------------------------------------------------------
  37. __fastcall TFrmCameraPlayer::TFrmCameraPlayer(TComponent* Owner)
  38. : TForm(Owner)
  39. {
  40. IsTerm = false;
  41. FPlay = false;
  42. FAutoPlay = true;
  43. FConHandle = 0;
  44. FFullScreen = false;
  45. FParent = this->Parent;
  46. PnlCamera->Tag = (int)this;
  47. //mmLog->Lines->Clear();
  48. FFPlayer1->SetLicenseKey(LICENSE_KEY);
  49. FFPlayer1->DisableFPUExceptions();
  50. //FFPlayer1->ReadTimeout = 30 * 1000;
  51. //FFPlayer1->opt_default("fpsprobesize", "200000");
  52. //FFPlayer1->opt_default("probesize", "200000");
  53. if (!FFPlayer1->AVLibLoaded())
  54. {
  55. String sAVILibDir = g_sAppDir + "LibAV";
  56. if (!FFPlayer1->LoadAVLib(sAVILibDir))
  57. {
  58. Application->MessageBox(L"영상표출 라이브러리를 로드하지 못하였습니다.", L"영상표출 오류", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  59. return;
  60. }
  61. }
  62. }
  63. //---------------------------------------------------------------------------
  64. void __fastcall TFrmCameraPlayer::LogPanel(String ALogMsg)
  65. {
  66. PnlCamera->Caption = ALogMsg;
  67. PnlCamera->Refresh();
  68. }
  69. //---------------------------------------------------------------------------
  70. void __fastcall TFrmCameraPlayer::TmrShowTimer(TObject *Sender)
  71. {
  72. LogPanel("11111");
  73. TmrShow->Enabled = false;
  74. if (IsTerm) {
  75. LogPanel("22222");
  76. return;
  77. }
  78. LogPanel("33333");
  79. if (Installed)
  80. {
  81. LogPanel("44444");
  82. PopupMenu = PopupMenu1;
  83. ImgNoData->Visible = false;
  84. PnlName->Caption = CTLR_NMBR + ": " + NAME;
  85. Play();
  86. }
  87. else
  88. {
  89. LogPanel("66666");
  90. PopupMenu = NULL;
  91. LogPanel(NAME);
  92. LoadEmptyImage();
  93. LogPanel("77777");
  94. }
  95. }
  96. //---------------------------------------------------------------------------
  97. void __fastcall TFrmCameraPlayer::LoadEmptyImage()
  98. {
  99. try
  100. {
  101. #if 0
  102. String sImageFile = g_AppCfg.sEmptyImg;
  103. if (sImageFile != "")
  104. {
  105. ImgNoData->Picture->LoadFromFile(sImageFile);
  106. ImgNoData->Align = alClient;
  107. }
  108. #endif
  109. ImgNoData->Visible = true;
  110. }
  111. catch(Exception &e)
  112. {
  113. ImgNoData->Visible = true;
  114. }
  115. }
  116. //---------------------------------------------------------------------------
  117. void __fastcall TFrmCameraPlayer::FormShow(TObject *Sender)
  118. {
  119. Refresh();
  120. this->FLastBounds = this->BoundsRect;
  121. // TmrShow->Enabled = true;
  122. }
  123. //---------------------------------------------------------------------------
  124. void __fastcall TFrmCameraPlayer::FormClose(TObject *Sender, TCloseAction &Action)
  125. {
  126. try {
  127. Stop();
  128. } catch(...) {}
  129. Action = caFree;
  130. }
  131. //---------------------------------------------------------------------------
  132. void __fastcall TFrmCameraPlayer::FormDestroy(TObject *Sender)
  133. {
  134. try {
  135. Stop();
  136. } catch(...) {}
  137. }
  138. //---------------------------------------------------------------------------
  139. void __fastcall TFrmCameraPlayer::MnuConnectClick(TObject *Sender)
  140. {
  141. FAutoPlay = true;
  142. Play();
  143. }
  144. //---------------------------------------------------------------------------
  145. void __fastcall TFrmCameraPlayer::MnuDisconnectClick(TObject *Sender)
  146. {
  147. FAutoPlay = false;
  148. Stop();
  149. }
  150. //---------------------------------------------------------------------------
  151. void __fastcall TFrmCameraPlayer::AutoPlay()
  152. {
  153. FAutoPlay = true;
  154. TmrShow->Enabled = true;
  155. }
  156. //---------------------------------------------------------------------------
  157. void __fastcall TFrmCameraPlayer::Play()
  158. {
  159. Stop();
  160. if (STRM_ADDR == "") {
  161. LogPanel("*** 영상정보가 없습니다 ***");
  162. return;
  163. }
  164. LogPanel("영상 연결 중...");
  165. try
  166. {
  167. FFPlayer1->OnPosition = NULL;
  168. FFPlayer1->OnFrameHook = NULL;
  169. FFPlayer1->OnVideoHook = NULL;
  170. FFPlayer1->AspectRatio = -1;
  171. FFPlayer1->TryOpen(STRM_ADDR, PnlCamera->Handle);
  172. FConHandle = (long)FFPlayer1->ScreenHandle;
  173. Application->ProcessMessages();
  174. }
  175. catch(Exception &e)
  176. {
  177. }
  178. FPlay = true;
  179. }
  180. //---------------------------------------------------------------------------
  181. void __fastcall TFrmCameraPlayer::Term()
  182. {
  183. IsTerm = true;
  184. Stop();
  185. }
  186. //---------------------------------------------------------------------------
  187. void __fastcall TFrmCameraPlayer::Stop()
  188. {
  189. if (!FPlay) return;
  190. FPlay = false;
  191. if (STRM_ADDR == "") {
  192. return;
  193. }
  194. LogPanel("영상 연결 해제...");
  195. try
  196. {
  197. if (FFPlayer1->ScreenHandle != NULL)
  198. {
  199. FFPlayer1->Stop(true);
  200. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  201. UpdateWindow(FFPlayer1->ScreenHandle);
  202. }
  203. //FFPlayer1->OnAudioHook = NULL;
  204. Application->ProcessMessages();
  205. }
  206. catch(Exception &e)
  207. {
  208. }
  209. LogPanel("--- 영상 연결 종료 ---");
  210. FConHandle = 0;
  211. FPlay = false;
  212. }
  213. //---------------------------------------------------------------------------
  214. void __fastcall TFrmCameraPlayer::InitCamera(bool AInstalled, String ACtlrNmbr, String AName, String AStrmAddr, String AFullStrmAddr, int AViewMode)
  215. {
  216. FAutoPlay = true;
  217. Installed = AInstalled;
  218. CTLR_NMBR = ACtlrNmbr;
  219. NAME = AName;
  220. STRM_ADDR = AStrmAddr;
  221. FULL_STRM_ADDR = AFullStrmAddr;
  222. VIEW_MODE = AViewMode;
  223. Caption = NAME;
  224. PnlName->Caption = NAME;
  225. LogPanel(AStrmAddr);
  226. }
  227. //---------------------------------------------------------------------------
  228. void __fastcall TFrmCameraPlayer::PnlCameraDblClick(TObject *Sender)
  229. {
  230. // 여기서 더블클릭은 최대화면을 호출하는 것임
  231. FrmCameraScreen->TmrFullScreen->Enabled = false;
  232. FrmCameraScreen->FFullScreenIdx = Tag;
  233. FrmCameraScreen->TmrFullScreen->Enabled = true;
  234. }
  235. //---------------------------------------------------------------------------
  236. void __fastcall TFrmCameraPlayer::FFPlayer1State(TObject *Sender, TPlayState APlayState)
  237. {
  238. enum TPlayState { psPlay, psPause, psResume, psStep, psStop, psEnd };
  239. if (APlayState == Ffbasecomponent::psStop)// || APlayState == Ffbasecomponent::psEnd)
  240. {
  241. if (FPlay)
  242. {
  243. #if 0
  244. FPlay = false;
  245. if (FFPlayer1->ScreenHandle != NULL)
  246. {
  247. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  248. UpdateWindow(FFPlayer1->ScreenHandle);
  249. }
  250. Application->ProcessMessages();
  251. FConHandle = 0;
  252. #endif
  253. //Caption = Caption + " : 연결종료";
  254. LogPanel("!!! 연결이 종료됨 !!!");
  255. if (TmrShow->Enabled) {
  256. TmrShow->Enabled = false;
  257. }
  258. TmrShow->Interval = 500;
  259. TmrShow->Enabled = true;
  260. //Play();
  261. }
  262. }
  263. else {
  264. if (FFPlayer1->Paused) {
  265. FFPlayer1->Resume();
  266. }
  267. }
  268. #if 0
  269. if (APlayState == Ffbasecomponent::psPlay) {
  270. LogPanel("Play...");
  271. }
  272. else if (APlayState == Ffbasecomponent::psPause) {
  273. LogPanel("Pause...");
  274. }
  275. else if (APlayState == Ffbasecomponent::psResume) {
  276. LogPanel("Resume...");
  277. }
  278. else if (APlayState == Ffbasecomponent::psStep) {
  279. LogPanel("Step...");
  280. }
  281. else if (APlayState == Ffbasecomponent::psStop) {
  282. //LogPanel("Stop...");
  283. }
  284. else if (APlayState == Ffbasecomponent::psEnd) {
  285. //LogPanel("End...");
  286. }
  287. #endif
  288. }
  289. //---------------------------------------------------------------------------
  290. void __fastcall TFrmCameraPlayer::MnuInfoClick(TObject *Sender)
  291. {
  292. FrmCameraInfo = new TFrmCameraInfo(this);
  293. FrmCameraInfo->Edit1->Text = CTLR_NMBR;
  294. FrmCameraInfo->Edit2->Text = NAME;
  295. FrmCameraInfo->Edit3->Text = STRM_ADDR;
  296. FrmCameraInfo->Edit4->Text = FULL_STRM_ADDR;
  297. FrmCameraInfo->ShowModal();
  298. FrmCameraInfo = NULL;
  299. }
  300. //---------------------------------------------------------------------------