int main() { HI_S32 s32Ret = HI_SUCCESS; HI_S_STREAM_INFO struStreamInfo; HI_NET_DEV_Init(); s32Ret = HI_NET_DEV_Login(&u32Handle, UNAME, PWORD, DHOST, DPORT); if (s32Ret != HI_SUCCESS) { HI_NET_DEV_DeInit(); return -1; } //HI_NET_DEV_SetEventCallBack(u32Handle, OnEventCallback, &a); HI_NET_DEV_SetStreamCallBack(u32Handle, (HI_ON_STREAM_CALLBACK)OnStreamCallback, NULL); //HI_NET_DEV_SetDataCallBack(u32Handle, OnDataCallback, &a); struStreamInfo.u32Channel = HI_NET_DEV_CHANNEL_1; struStreamInfo.blFlag = HI_TRUE;; struStreamInfo.u32Mode = HI_NET_DEV_STREAM_MODE_TCP; struStreamInfo.u8Type = HI_NET_DEV_STREAM_ALL; s32Ret = HI_NET_DEV_StartStream(u32Handle, &struStreamInfo); if (s32Ret != HI_SUCCESS) { HI_NET_DEV_Logout(u32Handle); u32Handle = 0; return -1; } EASY_MEDIA_INFO_T mediainfo; memset(&mediainfo, 0x00, sizeof(EASY_MEDIA_INFO_T)); mediainfo.u32VideoCodec = EASY_SDK_VIDEO_CODEC_H264; mediainfo.u32AudioCodec = EASY_SDK_AUDIO_CODEC_G711A;//默认摄像机输出PCMA mediainfo.u32AudioSamplerate = 8000; fPusherHandle = EasyPusher_Create(); EasyPusher_SetEventCallback(fPusherHandle, __EasyPusher_Callback, 0, NULL); EasyPusher_StartStream(fPusherHandle, SHOST, SPORT, SNAME, "admin", "admin", &mediainfo, 1024); while(1) { #ifdef _WIN32 Sleep(10); #else usleep(10*1000); #endif }; EasyPusher_StopStream(fPusherHandle); EasyPusher_Release(fPusherHandle); fPusherHandle = 0; HI_NET_DEV_StopStream(u32Handle); HI_NET_DEV_Logout(u32Handle); HI_NET_DEV_DeInit(); return 0; }
/* EasyRTSPClient Callback */ int Easy_APICALL __RTSPSourceCallBack( int _chid, int *_chPtr, int _mediatype, char *pbuf, RTSP_FRAME_INFO *frameinfo) { if (_mediatype == EASY_SDK_VIDEO_FRAME_FLAG) { if(fPusherHandle == 0 ) return 0; if(frameinfo && frameinfo->length) { EASY_AV_Frame avFrame; memset(&avFrame, 0x00, sizeof(EASY_AV_Frame)); avFrame.u32AVFrameLen = frameinfo->length; avFrame.pBuffer = (unsigned char*)pbuf; avFrame.u32VFrameType = frameinfo->type; avFrame.u32AVFrameFlag = EASY_SDK_VIDEO_FRAME_FLAG; avFrame.u32TimestampSec = frameinfo->timestamp_sec; avFrame.u32TimestampUsec = frameinfo->timestamp_usec; EasyPusher_PushFrame(fPusherHandle, &avFrame); } } if (_mediatype == EASY_SDK_AUDIO_FRAME_FLAG) { if(fPusherHandle == 0 ) return 0; if(frameinfo && frameinfo->length) { EASY_AV_Frame avFrame; memset(&avFrame, 0x00, sizeof(EASY_AV_Frame)); avFrame.u32AVFrameLen = frameinfo->length; avFrame.pBuffer = (unsigned char*)pbuf; avFrame.u32VFrameType = frameinfo->type; avFrame.u32AVFrameFlag = EASY_SDK_AUDIO_FRAME_FLAG; avFrame.u32TimestampSec = frameinfo->timestamp_sec; avFrame.u32TimestampUsec = frameinfo->timestamp_usec; EasyPusher_PushFrame(fPusherHandle, &avFrame); } } if (_mediatype == EASY_SDK_MEDIA_INFO_FLAG) { if((pbuf != NULL) && (fPusherHandle == NULL)) { EASY_MEDIA_INFO_T mediainfo; memset(&mediainfo, 0x00, sizeof(EASY_MEDIA_INFO_T)); memcpy(&mediainfo, pbuf, sizeof(EASY_MEDIA_INFO_T)); fPusherHandle = EasyPusher_Create(); EasyPusher_SetEventCallback(fPusherHandle, __EasyPusher_Callback, 0, NULL); EasyPusher_StartStream(fPusherHandle, ConfigIP, atoi(ConfigPort), ConfigName, "admin", "admin", &mediainfo, 1024, false);//1M»º³åÇø printf("*** live streaming url:rtsp://%s:%d/%s ***\n", ConfigIP, atoi(ConfigPort), ConfigName); } } return 0; }
/* EasyRTSPClient数据回调 */ int CALLBACK __RTSPSourceCallBack( int _chid, int *_chPtr, int _mediatype, char *pbuf, RTSP_FRAME_INFO *frameinfo) { if (_mediatype == EASY_SDK_VIDEO_FRAME_FLAG) { if(fPusherHandle == 0 ) return 0; if(frameinfo && frameinfo->length) { EASY_AV_Frame avFrame; memset(&avFrame, 0x00, sizeof(EASY_AV_Frame)); avFrame.u32AVFrameLen = frameinfo->length; avFrame.pBuffer = (unsigned char*)pbuf; avFrame.u32VFrameType = frameinfo->type; avFrame.u32AVFrameFlag = EASY_SDK_VIDEO_FRAME_FLAG; EasyPusher_PushFrame(fPusherHandle, &avFrame); } } if (_mediatype == EASY_SDK_AUDIO_FRAME_FLAG) { if(fPusherHandle == 0 ) return 0; if(frameinfo && frameinfo->length) { EASY_AV_Frame avFrame; memset(&avFrame, 0x00, sizeof(EASY_AV_Frame)); avFrame.u32AVFrameLen = frameinfo->length; avFrame.pBuffer = (unsigned char*)pbuf; avFrame.u32VFrameType = frameinfo->type; avFrame.u32AVFrameFlag = EASY_SDK_AUDIO_FRAME_FLAG; EasyPusher_PushFrame(fPusherHandle, &avFrame); } } if (_mediatype == EASY_SDK_MEDIA_INFO_FLAG) { if((pbuf != NULL) && (fPusherHandle == NULL)) { EASY_MEDIA_INFO_T mediainfo; memset(&mediainfo, 0x00, sizeof(EASY_MEDIA_INFO_T)); memcpy(&mediainfo, pbuf, sizeof(EASY_MEDIA_INFO_T)); fPusherHandle = EasyPusher_Create(); EasyPusher_SetEventCallback(fPusherHandle, __EasyPusher_Callback, 0, NULL); EasyPusher_StartStream(fPusherHandle, SHOST, SPORT, SNAME, "admin", "admin", &mediainfo, 1024);//1M缓冲区 printf("*** live streaming url:rtsp://%s:%d/%s ***\n", SHOST, SPORT, SNAME); } } return 0; }
void CMaster::InitEncoderAndPusher(int nFileIndex) { if(!m_pEncConfigInfo) m_pEncConfigInfo = new Encoder_Config_Info; if (nFileIndex==0) { m_AACEncoderManager.Init(); m_pEncConfigInfo->nScrVideoWidth = 640; m_pEncConfigInfo->nScrVideoHeight = 480; m_pEncConfigInfo->nFps = 25; m_pEncConfigInfo->nMainKeyFrame = 50; m_pEncConfigInfo->nMainBitRate = 2048; m_pEncConfigInfo->nMainEncLevel = 1; m_pEncConfigInfo->nMainEncQuality = 20; m_pEncConfigInfo->nMainUseQuality = 0; m_H264EncoderManager.Init(nFileIndex,m_pEncConfigInfo->nScrVideoWidth, m_pEncConfigInfo->nScrVideoHeight,m_pEncConfigInfo->nFps,m_pEncConfigInfo->nMainKeyFrame, m_pEncConfigInfo->nMainBitRate,m_pEncConfigInfo->nMainEncLevel, m_pEncConfigInfo->nMainEncQuality,m_pEncConfigInfo->nMainUseQuality); } byte sps[100]; byte pps[100]; long spslen=0; long ppslen=0; m_H264EncoderManager.GetSPSAndPPS(nFileIndex,sps,spslen,pps,ppslen); memcpy(m_sps, sps,100) ; memcpy(m_pps, pps,100) ; m_spslen = spslen; m_ppslen = ppslen; // 测试代码 [8/5/2015-13:28:09 Dingshuai] EASY_MEDIA_INFO_T mediainfo; m_pFrameBuf = new byte[1024*512]; WSADATA wsaData; WSAStartup(MAKEWORD(2,2), &wsaData); memset(&mediainfo, 0x00, sizeof(EASY_MEDIA_INFO_T)); mediainfo.u32VideoCodec = EASY_SDK_VIDEO_CODEC_H264;//0x1C; mediainfo.u32AudioCodec = EASY_SDK_AUDIO_CODEC_AAC; mediainfo.u32AudioChannel = 2; mediainfo.u32AudioSamplerate = 44100; //推送器初始化 m_pusherId = EasyPusher_Create(); EasyPusher_SetEventCallback(m_pusherId, __EasyPusher_Callback, 0, NULL); EasyPusher_StartStream(m_pusherId, "127.0.0.1", 8554, "live.sdp", "admin", "admin", &mediainfo,1024, 0); m_bStartPusher = TRUE; }
//开始推流 int CSourceManager::StartPush(char* ServerIp, int nPushPort, char* sPushName, int nPushBufSize, bool bPushRtmp) { m_sPushInfo.pusherHandle = EasyPusher_Create(); strcpy(m_sPushInfo.pushServerAddr, ServerIp); m_sPushInfo.pushServerPort = nPushPort; strcpy(m_sPushInfo.sdpName, sPushName); Easy_U32 nRet = 0; if (NULL != m_sPushInfo.pusherHandle ) { EasyPusher_SetEventCallback(m_sPushInfo.pusherHandle, __EasyPusher_Callback, 0, NULL); nRet = EasyPusher_StartStream(m_sPushInfo.pusherHandle , ServerIp, nPushPort, sPushName, "admin", "admin", (EASY_MEDIA_INFO_T*)&m_mediainfo, nPushBufSize, 0);//512-2048 } else { nRet = -1; } m_bPushRtmp = bPushRtmp; if (bPushRtmp) { if (!m_pEasyrtmp) { m_pEasyrtmp=new EasyRtmp(); } char szURL[MAX_PATH]; memset(szURL, 0, sizeof(MAX_PATH)); sprintf(szURL, "rtmp://%s:1935/live/%s", ServerIp, sPushName); nRet = m_pEasyrtmp->Link(szURL,1280); } if(nRet>=0) { m_bPushing = TRUE; } else { StopPush(); } return nRet; }
QTSS_Error EasyCameraSource::StartStreaming(Easy_StartStream_Params* inParams) { QTSS_Error theErr = QTSS_NoErr; do { if (NULL == fPusherHandle) { if (!cameraLogin()) { theErr = QTSS_RequestFailed; break; } std::map<HI_U32, Easy_U32> mapSDK2This; mapSDK2This[HI_NET_DEV_AUDIO_TYPE_G711] = EASY_SDK_AUDIO_CODEC_G711A; mapSDK2This[HI_NET_DEV_AUDIO_TYPE_G726] = EASY_SDK_AUDIO_CODEC_G726; EASY_MEDIA_INFO_T mediainfo; memset(&mediainfo, 0x00, sizeof(EASY_MEDIA_INFO_T)); mediainfo.u32VideoCodec = EASY_SDK_VIDEO_CODEC_H264; HI_S32 s32Ret = HI_FAILURE; HI_S_Video sVideo; sVideo.u32Channel = HI_NET_DEV_CHANNEL_1; sVideo.blFlag = sStreamType ? HI_TRUE : HI_FALSE; s32Ret = HI_NET_DEV_GetConfig(m_u32Handle, HI_NET_DEV_CMD_VIDEO_PARAM, &sVideo, sizeof(HI_S_Video)); if (s32Ret == HI_SUCCESS) { mediainfo.u32VideoFps = sVideo.u32Frame; } else { mediainfo.u32VideoFps = 25; } HI_S_Audio sAudio; sAudio.u32Channel = HI_NET_DEV_CHANNEL_1; sAudio.blFlag = sStreamType ? HI_TRUE : HI_FALSE; s32Ret = HI_NET_DEV_GetConfig(m_u32Handle, HI_NET_DEV_CMD_AUDIO_PARAM, &sAudio, sizeof(HI_S_Audio)); if (s32Ret == HI_SUCCESS) { mediainfo.u32AudioCodec = mapSDK2This[sAudio.u32Type]; mediainfo.u32AudioChannel = sAudio.u32Channel; } else { mediainfo.u32AudioCodec = EASY_SDK_AUDIO_CODEC_G711A; mediainfo.u32AudioChannel = 1; } mediainfo.u32AudioSamplerate = 8000; fPusherHandle = EasyPusher_Create(); if (fPusherHandle == NULL) { //EasyPusher初始化创建失败,可能是EasyPusher SDK未授权 theErr = QTSS_Unimplemented; break; } // 注册流推送事件回调 EasyPusher_SetEventCallback(fPusherHandle, __EasyPusher_Callback, 0, NULL); // 根据接收到的命令生成流信息 char sdpName[128] = { 0 }; sprintf(sdpName, "%s/%s/%s.sdp", inParams->inStreamID, inParams->inSerial, inParams->inChannel); // 开始推送流媒体数据 EasyPusher_StartStream(fPusherHandle, (char*)inParams->inIP, inParams->inPort, sdpName, "", "", &mediainfo, 1024/* 1M Buffer*/, 0); saveStartStreamParams(inParams); } theErr = netDevStartStream(); } while (0); if (theErr != QTSS_NoErr) { // 如果推送不成功,需要释放之前已经开启的资源 StopStreaming(NULL); } else { // 推送成功,将当前正在推送的参数信息回调 inParams->inChannel = fStartStreamInfo.channel; inParams->inIP = fStartStreamInfo.ip; inParams->inPort = fStartStreamInfo.port; inParams->inProtocol = fStartStreamInfo.protocol; inParams->inSerial = fStartStreamInfo.serial; inParams->inStreamID = fStartStreamInfo.streamId; } return theErr; }
int main() { char szIP[16] = {0}; Easy_Pusher_Handle pusherId = 0; EASY_MEDIA_INFO_T mediainfo; int buf_size = 1024*512; char *pbuf = (char *) malloc(buf_size); FILE *fES = NULL; int position = 0; int iFrameNo = 0; #ifdef _WIN32 WSADATA wsaData; WSAStartup(MAKEWORD(2,2), &wsaData); #endif memset(&mediainfo, 0x00, sizeof(EASY_MEDIA_INFO_T)); mediainfo.u32VideoCodec = 0x1C; fES = fopen("./EasyPusher.264", "rb"); if (NULL == fES) return 0; pusherId = EasyPusher_Create(); EasyPusher_SetEventCallback(pusherId, __EasyPusher_Callback, 0, NULL); EasyPusher_StartStream(pusherId, "115.29.139.20", 554, "720p.sdp", "admin", "admin", &mediainfo, 2048); printf("*** live streaming url:rtsp://115.29.139.20/720p.sdp ***\n"); while (1) { int nReadBytes = fread(pbuf+position, 1, 1, fES); if (nReadBytes < 1) { if (feof(fES)) { position = 0; fseek(fES, 0, SEEK_SET); continue; } break; } position ++; if (position > 5) { unsigned char naltype = ( (unsigned char)pbuf[position-1] & 0x1F); if ( (unsigned char)pbuf[position-5]== 0x00 && (unsigned char)pbuf[position-4]== 0x00 && (unsigned char)pbuf[position-3] == 0x00 && (unsigned char)pbuf[position-2] == 0x01 && //(((unsigned char)pbuf[position-1] == 0x61) || //((unsigned char)pbuf[position-1] == 0x67) ) ) (naltype==0x07||naltype==0x01) ) { int framesize = position - 5; EASY_AV_Frame avFrame; naltype = (unsigned char)pbuf[4] & 0x1F; memset(&avFrame, 0x00, sizeof(EASY_AV_Frame)); avFrame.u32AVFrameLen = framesize; avFrame.pBuffer = (unsigned char*)pbuf; avFrame.u32VFrameType = (naltype==0x07)?EASY_SDK_VIDEO_FRAME_I:EASY_SDK_VIDEO_FRAME_P; EasyPusher_PushFrame(pusherId, &avFrame); #ifndef _WIN32 usleep(30*1000); #else Sleep(30); #endif memmove(pbuf, pbuf+position-5, 5); position = 5; iFrameNo ++; //if (iFrameNo > 100000) break; //break; } } } _TRACE("Press Enter exit...\n"); getchar(); EasyPusher_StopStream(pusherId); EasyPusher_Release(pusherId); #ifdef _WIN32 WSACleanup(); #endif return 0; }
int main(int argc, char * argv[]) { int isActivated = 0; #ifndef _WIN32 signal(SIGPIPE, SIG_IGN); #endif #ifdef _WIN32 extern char* optarg; #endif int ch; ProgName = argv[0]; PrintUsage(); while ((ch = getopt(argc,argv, "hd:p:n:N:P:H:T:")) != EOF) { switch(ch) { case 'h': PrintUsage(); return 0; break; case 'd': ConfigIP =optarg; break; case 'p': ConfigPort =optarg; break; case 'n': ConfigName =optarg; break; case 'N': ConfigUName =optarg; break; case 'P': ConfigPWD =optarg; break; case 'H': ConfigDHost =optarg; break; case 'T': ConfigDPort =optarg; break; case '?': return 0; break; default: break; } } isActivated = EasyPusher_Activate(KEY); switch(isActivated) { case EASY_ACTIVATE_INVALID_KEY: printf("KEY is EASY_ACTIVATE_INVALID_KEY!\n"); break; case EASY_ACTIVATE_TIME_ERR: printf("KEY is EASY_ACTIVATE_TIME_ERR!\n"); break; case EASY_ACTIVATE_PROCESS_NAME_LEN_ERR: printf("KEY is EASY_ACTIVATE_PROCESS_NAME_LEN_ERR!\n"); break; case EASY_ACTIVATE_PROCESS_NAME_ERR: printf("KEY is EASY_ACTIVATE_PROCESS_NAME_ERR!\n"); break; case EASY_ACTIVATE_VALIDITY_PERIOD_ERR: printf("KEY is EASY_ACTIVATE_VALIDITY_PERIOD_ERR!\n"); break; case EASY_ACTIVATE_SUCCESS: printf("KEY is EASY_ACTIVATE_SUCCESS!\n"); break; } if(EASY_ACTIVATE_SUCCESS != isActivated) return -1; HI_S32 s32Ret = HI_SUCCESS; HI_S_STREAM_INFO struStreamInfo; HI_NET_DEV_Init(); s32Ret = HI_NET_DEV_Login(&u32Handle, ConfigUName, ConfigPWD, ConfigDHost, atoi(ConfigDPort)); if (s32Ret != HI_SUCCESS) { HI_NET_DEV_DeInit(); return -1; } //HI_NET_DEV_SetEventCallBack(u32Handle, OnEventCallback, &a); HI_NET_DEV_SetStreamCallBack(u32Handle, (HI_ON_STREAM_CALLBACK)OnStreamCallback, NULL); //HI_NET_DEV_SetDataCallBack(u32Handle, OnDataCallback, &a); struStreamInfo.u32Channel = HI_NET_DEV_CHANNEL_1; struStreamInfo.blFlag = HI_TRUE;; struStreamInfo.u32Mode = HI_NET_DEV_STREAM_MODE_TCP; struStreamInfo.u8Type = HI_NET_DEV_STREAM_ALL; s32Ret = HI_NET_DEV_StartStream(u32Handle, &struStreamInfo); if (s32Ret != HI_SUCCESS) { HI_NET_DEV_Logout(u32Handle); u32Handle = 0; return -1; } EASY_MEDIA_INFO_T mediainfo; memset(&mediainfo, 0x00, sizeof(EASY_MEDIA_INFO_T)); mediainfo.u32VideoCodec = EASY_SDK_VIDEO_CODEC_H264; mediainfo.u32VideoFps = 25; mediainfo.u32AudioCodec = EASY_SDK_AUDIO_CODEC_G711A;//SDK output Audio PCMA mediainfo.u32AudioSamplerate = 8000; mediainfo.u32AudioChannel = 1; fPusherHandle = EasyPusher_Create(); EasyPusher_SetEventCallback(fPusherHandle, __EasyPusher_Callback, 0, NULL); EasyPusher_StartStream(fPusherHandle, ConfigIP, atoi(ConfigPort), ConfigName, "admin", "admin", &mediainfo, 1024, false);//1M缓冲区 printf("Press Enter exit...\n"); getchar(); EasyPusher_StopStream(fPusherHandle); EasyPusher_Release(fPusherHandle); fPusherHandle = 0; HI_NET_DEV_StopStream(u32Handle); HI_NET_DEV_Logout(u32Handle); HI_NET_DEV_DeInit(); return 0; }
int main() { HI_S32 s32Ret = HI_SUCCESS; HI_S_STREAM_INFO struStreamInfo; HI_U32 a; HI_NET_DEV_Init(); s32Ret = HI_NET_DEV_Login(&u32Handle, UNAME, PWORD, DHOST, DPORT); if (s32Ret != HI_SUCCESS) { HI_NET_DEV_DeInit(); return -1; } //HI_NET_DEV_SetEventCallBack(u32Handle, OnEventCallback, &a); HI_NET_DEV_SetStreamCallBack(u32Handle, (HI_ON_STREAM_CALLBACK)OnStreamCallback, &a); //HI_NET_DEV_SetDataCallBack(u32Handle, OnDataCallback, &a); struStreamInfo.u32Channel = HI_NET_DEV_CHANNEL_1; struStreamInfo.blFlag = HI_FALSE;//HI_FALSE; struStreamInfo.u32Mode = HI_NET_DEV_STREAM_MODE_TCP; struStreamInfo.u8Type = HI_NET_DEV_STREAM_ALL; s32Ret = HI_NET_DEV_StartStream(u32Handle, &struStreamInfo); if (s32Ret != HI_SUCCESS) { HI_NET_DEV_Logout(u32Handle); u32Handle = 0; return -1; } WSADATA wsaData; WSAStartup(MAKEWORD(2,2), &wsaData); EASY_MEDIA_INFO_T mediainfo; memset(&mediainfo, 0x00, sizeof(EASY_MEDIA_INFO_T)); mediainfo.u32VideoCodec = 0x1C; pusherHandle = EasyPusher_Create(); EasyPusher_SetEventCallback(pusherHandle, __EasyPusher_Callback, 0, NULL); EasyPusher_StartStream(pusherHandle, SHOST, SPORT, "live.sdp", "admin", "admin", &mediainfo); printf("*** live streaming url:rtsp://%s:%d/live.sdp ***\n", SHOST, SPORT); while(1) { Sleep(10); }; EasyPusher_StopStream(pusherHandle); EasyPusher_Release(pusherHandle); pusherHandle = 0; HI_NET_DEV_StopStream(u32Handle); HI_NET_DEV_Logout(u32Handle); HI_NET_DEV_DeInit(); return 0; }