Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

110 Zeilen
2.8 KiB

  1. #include "XNetSDKTest.h"
  2. #include <string>
  3. int getPos(XSDK_HANDLE hMedia) {
  4. int size = sizeof(hDeviceArr) / sizeof(hDeviceArr);
  5. for (int i = 0; i < size; i++) {
  6. if (hDeviceArr[i] == hMedia) {
  7. return i;
  8. }
  9. }
  10. return -1;
  11. }
  12. int CALLBACK Test_MediaCallBack(XSDK_HANDLE hMedia, const unsigned char *pData, int nDataLen, int nDataType, void *pDataInfo, int nDataInfoSize, void *pUserData)
  13. {
  14. if (EXSDK_DATA_FORMATE_FRAME == nDataType && nDataInfoSize > 0)
  15. {
  16. SXSDK_FRAME_INFO *pFrame = (SXSDK_FRAME_INFO *)pDataInfo;
  17. //if(pFrame->nType==XSDK_FRAME_TYPE_VIDEO)
  18. //{
  19. // FILE *file = fopen("real.dat","ab+") ;
  20. // if(file)
  21. // {
  22. // fwrite(pFrame->pContent,1,pFrame->nFrameLength,file);
  23. // fclose(file);
  24. // }
  25. //}
  26. if (pFrame->nType == XSDK_FRAME_TYPE_VIDEO)
  27. {
  28. int pos = getPos(hMedia);
  29. string fmt("/media-file/origin/%s/%04d-%02d-%02d-%02d.dat");
  30. char file_name[1024];
  31. snprintf(file_name,sizeof(file_name),fmt.c_str(),DeviceIdArr[pos],pFrame->nYear,pFrame->nMonth,pFrame->nDay,pFrame->nHour) ;
  32. printf("path: %s", file_name);
  33. // ABFile("video_header.dat", pFrame->pHeader, pFrame->nLength);
  34. ABFile(file_name, pFrame->pContent, pFrame->nFrameLength);
  35. }
  36. 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));
  37. }
  38. else if (EXSDK_DATA_MEDIA_ON_PLAY_STATE == nDataType)
  39. {
  40. printf("EXSDK_DATA_MEDIA_ON_PLAY_STATE[%d][%d]\r\n", hMedia, nDataLen);
  41. }
  42. else if (ESXSDK_MEDIA_START_REAL_PLAY == nDataType)
  43. {
  44. printf("OnRealPlayResult[%d][%s]\r\n", hMedia, nDataLen >= 0 ? "Success" : "Failed");
  45. }
  46. else
  47. {
  48. printf("Media[hMedia:%ld][Len:%d][Type:%d]\r\n", hMedia, nDataLen, nDataType);
  49. }
  50. return 0;
  51. }
  52. int TestMediaRealPlay()
  53. {
  54. printf("MediaRealPlay %s\r\n", __FUNCTION__);
  55. XSDK_HANDLE hPlayer = 0;
  56. bool bPause = false;
  57. int nSpeed = 0;
  58. char c = 0;
  59. while((c = getchar()) != 'q')
  60. {
  61. switch(c)
  62. {
  63. case 's':
  64. {
  65. if (hPlayer)
  66. {
  67. XSDK_MediaStop(hPlayer);
  68. hPlayer = 0;
  69. }
  70. int size = sizeof(hDeviceArr) / sizeof(hDeviceArr);
  71. for (int i = 0; i < size; i++)
  72. {
  73. SXMediaRealPlayReq param = { 0 };
  74. param.nChannel = 0;
  75. param.nStreamType = 0;
  76. param.nRequestType = EXSDK_DATA_FORMATE_FRAME;
  77. param.pMediaCallback = Test_MediaCallBack;
  78. hPlayer = XSDK_MediaRealPlay(hDeviceArr[i], &param);
  79. bPause = false;
  80. nSpeed = 0;
  81. }
  82. }
  83. break;
  84. case 't':
  85. {
  86. if (hPlayer)
  87. {
  88. XSDK_MediaStop(hPlayer);
  89. hPlayer = 0;
  90. }
  91. }
  92. break;
  93. }
  94. }
  95. if (hPlayer)
  96. {
  97. XSDK_MediaStop(hPlayer);
  98. hPlayer = 0;
  99. }
  100. return 0;
  101. }