Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.

154 righe
3.9 KiB

  1. #include "XNetSDKTest.h"
  2. #include "XNetSDKSyn.h"
  3. #include "RecordCfg.h"
  4. USE_NS_NETSDK_CFG
  5. int CALLBACK Test_RecordMediaCallBack(XSDK_HANDLE hMedia, const unsigned char *pData, int nDataLen, int nDataType, void *pDataInfo, int nDataInfoSize, void *pUserData)
  6. {
  7. if (EXSDK_DATA_FORMATE_FRAME == nDataType && nDataInfoSize > 0)
  8. {
  9. SXSDK_FRAME_INFO *pFrame = (SXSDK_FRAME_INFO *)pDataInfo;
  10. printf("Media[hMedia:%ld][Len:%d][Type:%d/%d][%04d-%02d-%02d %02d:%02d:%02d-%03d]\r\n", hMedia, nDataLen, pFrame->nType, pFrame->nSubType, pFrame->nYear, pFrame->nMonth, pFrame->nDay, pFrame->nHour, pFrame->nMinute, pFrame->nSecond, (int)(pFrame->nTimeStamp % 1000));
  11. //char name[200] = {0};
  12. char name[200] = "123.264";
  13. sprintf(name, "%d.h264", 1);
  14. FILE *file = fopen(name, "ab+");
  15. if (file)
  16. {
  17. fwrite(pFrame->pContent, 1, pFrame->nFrameLength, file);
  18. fclose(file);
  19. }
  20. }
  21. else if (EXSDK_DATA_MEDIA_ON_PLAY_STATE == nDataType)
  22. {
  23. printf("EXSDK_DATA_MEDIA_ON_PLAY_STATE[%d][%d]\r\n", hMedia, nDataLen);
  24. }
  25. else if (ESXSDK_MEDIA_START_RECORD_PLAY == nDataType)
  26. {
  27. printf("OnRecordPlayResult[%d][%s]\r\n", hMedia, nDataLen >= 0 ? "Success" : "Failed");
  28. }
  29. else if (ESXSDK_MEDIA_DOWN_RECORD_FILE == nDataType)
  30. {
  31. printf("OnRecordDownloadResult[%d][%s]\r\n", hMedia, nDataLen >= 0 ? "Success" : "Failed");
  32. }
  33. else
  34. {
  35. printf("Media[hMedia:%ld][Len:%d][Type:%d]\r\n", hMedia, nDataLen, nDataType);
  36. }
  37. return 0;
  38. }
  39. int TestMediaRecordPlay()
  40. {
  41. printf("%s\r\n", __FUNCTION__);
  42. XSDK_HANDLE hPlayer = 0;
  43. bool bPause = false;
  44. int nSpeed = 0;
  45. char c = 0;
  46. do
  47. {
  48. switch(c)
  49. {
  50. ////开始录像回放
  51. case 'a':
  52. {
  53. if (hPlayer)
  54. {
  55. XSDK_MediaStop(hPlayer);
  56. hPlayer = 0;
  57. }
  58. SXMediaRecordReq param = {0};
  59. param.nChannel = 1;
  60. param.nStreamType = 0;
  61. param.nRequestType = EXSDK_DATA_FORMATE_FRAME;
  62. param.pMediaCallback = Test_RecordMediaCallBack;
  63. #if 1
  64. time_t tNow = time(NULL);
  65. struct tm tmNow = *localtime(&tNow);
  66. sprintf(param.sBeginTime, "%04d-%02d-%02d 00:00:00", tmNow.tm_year + 1900, tmNow.tm_mon + 1, tmNow.tm_mday);
  67. sprintf(param.sEndTime, "%04d-%02d-%02d 00:59:59", tmNow.tm_year + 1900, tmNow.tm_mon + 1, tmNow.tm_mday);
  68. #else
  69. strcpy(param.sBeginTime, "2018-09-12 00:00:00");
  70. strcpy(param.sEndTime, "2018-09-12 23:59:59");
  71. #endif
  72. hPlayer = XSDK_MediaRecordPlay(g_hDevice, &param, 0, 4000);
  73. //hPlayer = XSDK_Lib_MediaRecordDownload(g_hDevice, &param, 0, 4000);
  74. bPause = false;
  75. nSpeed = 0;
  76. }
  77. break;
  78. ////关闭录像回放
  79. case 'b':
  80. {
  81. XSDK_MediaStop(hPlayer);
  82. hPlayer = 0;
  83. }
  84. break;
  85. ////暂停录像回放
  86. case 'c':
  87. {
  88. bPause = !bPause;
  89. XSDK_MediaPause(hPlayer, bPause);
  90. }
  91. break;
  92. ///回放控制
  93. case 'd':
  94. {
  95. XSDK_MediaSetSpeed(hPlayer, nSpeed);
  96. nSpeed++;
  97. if (nSpeed == 4)
  98. {
  99. nSpeed = -4;
  100. }
  101. }
  102. break;
  103. ///录像回放跳转
  104. case 'e':
  105. {
  106. XSDK_MediaSeekToTime(hPlayer, "2018-08-04 13:00:00");
  107. }
  108. break;
  109. ///录像相关配置
  110. case 'f':
  111. {
  112. ///获取录像相关参数
  113. char szOutBuffer[4096] = {0};
  114. char outbuffer[100] = {0};
  115. int len = 0;
  116. int nInOutSize = sizeof(szOutBuffer);
  117. int nRet = 0;
  118. nRet =XSDK_DevGetChnConfigSyn(g_hDevice, 0, JK_Record, szOutBuffer, &nInOutSize, 4000, EXCMD_CONFIG_GET);
  119. if(nRet >= 0)
  120. {
  121. RecordCfg se;
  122. se.SetName("Record.[0]");
  123. se.Parse(szOutBuffer);
  124. se.PreRecord.SetValue(0);
  125. const char *pCfg = se.ToString();
  126. nRet = XSDK_DevSetChnConfigSyn(g_hDevice, 0, JK_Record, pCfg, strlen(pCfg), outbuffer, &len, 5000, EXCMD_CONFIG_SET);
  127. if(nRet >= 0)
  128. {
  129. printf("Set Success!\r\n");
  130. }
  131. }
  132. }
  133. break;
  134. }
  135. }while((c = getchar()) != 'q');
  136. if (hPlayer)
  137. {
  138. XSDK_MediaStop(hPlayer);
  139. hPlayer = 0;
  140. }
  141. return 0;
  142. }