#include "XNetSDKTest.h" #include "XNetSDKSyn.h" #include "RecordCfg.h" USE_NS_NETSDK_CFG int CALLBACK Test_RecordMediaCallBack(XSDK_HANDLE hMedia, const unsigned char *pData, int nDataLen, int nDataType, void *pDataInfo, int nDataInfoSize, void *pUserData) { if (EXSDK_DATA_FORMATE_FRAME == nDataType && nDataInfoSize > 0) { SXSDK_FRAME_INFO *pFrame = (SXSDK_FRAME_INFO *)pDataInfo; 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)); //char name[200] = {0}; char name[200] = "123.264"; sprintf(name, "%d.h264", 1); FILE *file = fopen(name, "ab+"); if (file) { fwrite(pFrame->pContent, 1, pFrame->nFrameLength, file); fclose(file); } } else if (EXSDK_DATA_MEDIA_ON_PLAY_STATE == nDataType) { printf("EXSDK_DATA_MEDIA_ON_PLAY_STATE[%d][%d]\r\n", hMedia, nDataLen); } else if (ESXSDK_MEDIA_START_RECORD_PLAY == nDataType) { printf("OnRecordPlayResult[%d][%s]\r\n", hMedia, nDataLen >= 0 ? "Success" : "Failed"); } else if (ESXSDK_MEDIA_DOWN_RECORD_FILE == nDataType) { printf("OnRecordDownloadResult[%d][%s]\r\n", hMedia, nDataLen >= 0 ? "Success" : "Failed"); } else { printf("Media[hMedia:%ld][Len:%d][Type:%d]\r\n", hMedia, nDataLen, nDataType); } return 0; } int TestMediaRecordPlay() { printf("%s\r\n", __FUNCTION__); XSDK_HANDLE hPlayer = 0; bool bPause = false; int nSpeed = 0; char c = 0; do { switch(c) { ////开始录像回放 case 'a': { if (hPlayer) { XSDK_MediaStop(hPlayer); hPlayer = 0; } SXMediaRecordReq param = {0}; param.nChannel = 1; param.nStreamType = 0; param.nRequestType = EXSDK_DATA_FORMATE_FRAME; param.pMediaCallback = Test_RecordMediaCallBack; #if 1 time_t tNow = time(NULL); struct tm tmNow = *localtime(&tNow); sprintf(param.sBeginTime, "%04d-%02d-%02d 00:00:00", tmNow.tm_year + 1900, tmNow.tm_mon + 1, tmNow.tm_mday); sprintf(param.sEndTime, "%04d-%02d-%02d 00:59:59", tmNow.tm_year + 1900, tmNow.tm_mon + 1, tmNow.tm_mday); #else strcpy(param.sBeginTime, "2018-09-12 00:00:00"); strcpy(param.sEndTime, "2018-09-12 23:59:59"); #endif hPlayer = XSDK_MediaRecordPlay(g_hDevice, ¶m, 0, 4000); //hPlayer = XSDK_Lib_MediaRecordDownload(g_hDevice, ¶m, 0, 4000); bPause = false; nSpeed = 0; } break; ////关闭录像回放 case 'b': { XSDK_MediaStop(hPlayer); hPlayer = 0; } break; ////暂停录像回放 case 'c': { bPause = !bPause; XSDK_MediaPause(hPlayer, bPause); } break; ///回放控制 case 'd': { XSDK_MediaSetSpeed(hPlayer, nSpeed); nSpeed++; if (nSpeed == 4) { nSpeed = -4; } } break; ///录像回放跳转 case 'e': { XSDK_MediaSeekToTime(hPlayer, "2018-08-04 13:00:00"); } break; ///录像相关配置 case 'f': { ///获取录像相关参数 char szOutBuffer[4096] = {0}; char outbuffer[100] = {0}; int len = 0; int nInOutSize = sizeof(szOutBuffer); int nRet = 0; nRet =XSDK_DevGetChnConfigSyn(g_hDevice, 0, JK_Record, szOutBuffer, &nInOutSize, 4000, EXCMD_CONFIG_GET); if(nRet >= 0) { RecordCfg se; se.SetName("Record.[0]"); se.Parse(szOutBuffer); se.PreRecord.SetValue(0); const char *pCfg = se.ToString(); nRet = XSDK_DevSetChnConfigSyn(g_hDevice, 0, JK_Record, pCfg, strlen(pCfg), outbuffer, &len, 5000, EXCMD_CONFIG_SET); if(nRet >= 0) { printf("Set Success!\r\n"); } } } break; } }while((c = getchar()) != 'q'); if (hPlayer) { XSDK_MediaStop(hPlayer); hPlayer = 0; } return 0; }