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; }
static int bsm_get_device_config(struct service *srv, int parm_id, void *parm) { int ret = HI_FAILURE; int user_id; JDevCap *dev_cap; bsm_config_t *config; bsm_service_t*bsm_srv; NMP_ASSERT(srv && parm); bsm_srv = (bsm_service_t*)srv; user_id = bsm_get_user_id(&bsm_srv->parm); if (BSM_LOGOUT == user_id) { show_debug("Proxy device logout!!!!!!!!!!!!!!\n"); return -1; } switch (parm_id) { case GET_DEVICE_CONFIG: goto GET_CFG; case GET_NETWORK_CONFIG: goto GET_CFG; case GET_FTP_CONFIG: goto GET_CFG; case GET_SMTP_CONFIG: goto GET_CFG; case GET_DDNS_CONFIG: goto GET_CFG; case GET_DISK_LIST: goto GET_CFG; case GET_ENCODE_CONFIG: goto GET_CFG; case GET_DISPLAY_CONFIG: goto GET_CFG; case GET_OSD_CONFIG: goto GET_CFG; case GET_PTZ_CONFIG: goto GET_CFG; case GET_MOTION_CONFIG: goto GET_CFG; case GET_CAPABILITY_SET: dev_cap = (JDevCap*)parm; dev_cap->cap0 = DEV_CAP_VIDEO_IN | DEV_CAP_AUDIO | DEV_CAP_IRIS | DEV_CAP_PTZ | DEV_CAP_ALARM_IN | DEV_CAP_ALARM_OUT | DEV_CAP_STORAGE | DEV_CAP_WEB | DEV_CAP_PLATFORM | DEV_CAP_INTELLIGENT_ANALYSIS | DEV_CAP_UPDATE | DEV_CAP_VIDEO_OUT;// | DEV_CAP_IR; dev_cap->ftp_enable = 1; dev_cap->upnp_enable = 0; dev_cap->chn_cap.size = sizeof(JChnCap); dev_cap->chn_cap.encode = VIDEO_ENCODE_H264_E | VIDEO_ENCODE_MJPEG_E | VIDEO_ENCODE_JPEG_E | VIDEO_ENCODE_MPEG4_E; dev_cap->chn_cap.supp_mask = 1; dev_cap->chn_cap.mask_count = 4; dev_cap->chn_cap.supp_hide_alarm = 1; dev_cap->chn_cap.hide_alarm_count = 1; dev_cap->chn_cap.supp_move_alarm = 1; dev_cap->chn_cap.move_alarm_count = 1; dev_cap->chn_cap.supp_video_lost_alarm = 1; dev_cap->chn_cap.osd_count = 1; dev_cap->chn_cap.stream_count = 2; dev_cap->chn_cap.stream_supp_resolution[0] = CAP_VIDEO_QCIF | CAP_VIDEO_CIF | CAP_VIDEO_D1 | CAP_VIDEO_QQVGA | CAP_VIDEO_QVGA | CAP_VIDEO_VGA | CAP_VIDEO_720P; dev_cap->chn_cap.stream_supp_resolution[1] = CAP_VIDEO_QCIF | CAP_VIDEO_CIF | CAP_VIDEO_D1 | CAP_VIDEO_QQVGA | CAP_VIDEO_QVGA | CAP_VIDEO_VGA | CAP_VIDEO_720P; dev_cap->chn_cap.stream_supp_resolution[2] = CAP_VIDEO_QCIF | CAP_VIDEO_CIF | CAP_VIDEO_D1 | CAP_VIDEO_QQVGA | CAP_VIDEO_QVGA | CAP_VIDEO_VGA | CAP_VIDEO_720P; dev_cap->chn_cap.stream_supp_resolution[3] = CAP_VIDEO_QCIF | CAP_VIDEO_CIF | CAP_VIDEO_D1 | CAP_VIDEO_QQVGA | CAP_VIDEO_QVGA | CAP_VIDEO_VGA | CAP_VIDEO_720P; dev_cap->chn_cap.stream_max_frate_rate[0] = 25; dev_cap->chn_cap.img_cap = IMA_BRIGHTNESS | IMA_CONTRAST | IMA_SATURATION | IMA_HUE; ret = HI_SUCCESS; break; default: ret = HI_FAILURE; show_warn("parm_id Invalid!!!!!\n"); break; } if (HI_SUCCESS == ret) return 0; else return -1; GET_CFG: config = (bsm_config_t*)parm; ret = HI_NET_DEV_GetConfig( (HI_U32) user_id, (HI_U32) config->command, (HI_VOID*)config->buffer, (HI_U32) config->b_size); show_debug("HI_NET_DEV_GetConfig: %s<-------------------------------\n", (ret == HI_SUCCESS) ? "Success" : "Failure"); if (HI_SUCCESS == ret) return 0; else return -1; }