You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
2.5 KiB

  1. #include "XNetSDKTest.h"
  2. int CALLBACK Test_DownloadCallBack(XSDK_HANDLE hMedia, const unsigned char *pData, int nDataLen, int nDataType, void *pDataInfo, int nDataInfoSize, void *pUserData)
  3. {
  4. if (EXSDK_DATA_FORMATE_FRAME == nDataType && nDataInfoSize > 0)
  5. {
  6. SXSDK_FRAME_INFO *pFrame = (SXSDK_FRAME_INFO *)pDataInfo;
  7. 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));
  8. char name[200] = {0};
  9. sprintf(name, "%d.h264", 1);
  10. FILE *file = fopen(name, "ab+");
  11. if (file)
  12. {
  13. fwrite(pFrame->pContent, 1, pFrame->nFrameLength, file);
  14. fclose(file);
  15. }
  16. }
  17. else if (ESXSDK_MEDIA_DOWN_RECORD_FILE == nDataType)
  18. {
  19. printf("OnRecordDownloadResult[%d][%s]\r\n", hMedia, nDataLen >= 0 ? "Success" : "Failed");
  20. }
  21. else if(ESXSDK_MEDIA_ON_PLAY_STATE == nDataType)
  22. {
  23. printf("Media[hMedia:%ld][ESXSDK_MEDIA_ON_PLAY_STATE:%d][EMediaChnState:%d]\r\n", hMedia, nDataLen);
  24. if (nDataLen == EState_Media_DataEnd)
  25. {
  26. printf("OnRecordDownloadResult Complete!\r\n");
  27. }
  28. }
  29. else
  30. {
  31. printf("Media[hMedia:%ld][Len:%d][Type:%d]\r\n", hMedia, nDataLen, nDataType);
  32. }
  33. return 0;
  34. }
  35. int TestDownload()
  36. {
  37. printf("%s\r\n", __FUNCTION__);
  38. XSDK_HANDLE hPlayer = 0;
  39. bool bPause = false;
  40. int nSpeed = 0;
  41. char c = 0;
  42. do
  43. {
  44. switch(c)
  45. {
  46. case 's':
  47. {
  48. if (hPlayer)
  49. {
  50. XSDK_MediaStop(hPlayer);
  51. hPlayer = 0;
  52. }
  53. SXMediaRecordReq param = {0};
  54. param.nChannel = 0;
  55. param.nStreamType = 0;
  56. param.nRequestType = EXSDK_DATA_FORMATE_FRAME;
  57. param.pMediaCallback = Test_DownloadCallBack;
  58. #if 1
  59. time_t tNow = time(NULL);
  60. struct tm tmNow = *localtime(&tNow);
  61. sprintf(param.sBeginTime, "%04d-%02d-%02d 00:00:00", tmNow.tm_year + 1900, tmNow.tm_mon + 1, tmNow.tm_mday);
  62. sprintf(param.sEndTime, "%04d-%02d-%02d 00:01:00", tmNow.tm_year + 1900, tmNow.tm_mon + 1, tmNow.tm_mday);
  63. #else
  64. strcpy(param.sBeginTime, "2018-08-04 00:00:00");
  65. strcpy(param.sEndTime, "2018-08-04 23:59:59");
  66. #endif
  67. hPlayer = XSDK_MediaRecordDownload(g_hDevice, &param, 0, 4000);
  68. bPause = false;
  69. nSpeed = 0;
  70. }
  71. break;
  72. case 't':
  73. {
  74. XSDK_MediaStop(hPlayer);
  75. hPlayer = 0;
  76. }
  77. break;
  78. }
  79. }while((c = getchar()) != 'q');
  80. if (hPlayer)
  81. {
  82. XSDK_MediaStop(hPlayer);
  83. hPlayer = 0;
  84. }
  85. return 0;
  86. }