static __inline__ int xmt_open_real_stream(xmt_service_t *xmt_srv, stream_info_t *strm_info) { int ret = -1; stream_info_t *real_strm; real_strm = find_stream_by_channel_and_level(&xmt_srv->rtsp.real_strm_list, strm_info->channel, strm_info->level); if (!real_strm) { real_strm = (stream_info_t*)nmp_new0(struct xmt_real_strm_info, 1); real_strm->handle = XMT_INVALID_HANDLE; real_strm->opened = strm_info->opened; real_strm->type = strm_info->type; real_strm->level = strm_info->level; real_strm->channel = strm_info->channel; real_strm->state = STATS_STREAM_STOP; real_strm->sdk_srv = (struct service*)xmt_srv; strcpy(real_strm->media_info, XMT_STREAM_HEAD_INFO); real_strm->media_size = strlen(XMT_STREAM_HEAD_INFO); set_stream_user_data((gpointer)real_strm->opened, (void*)real_strm); add_one_stream(&xmt_srv->rtsp.real_strm_list, real_strm); ret = 0; }
static __inline__ int hie_open_real_stream(hie_service_t *hie_srv, stream_info_t *strm_info) { int ret = -1; stream_info_t *real_strm; strm_info->media_size = hie_get_stream_header(&hie_srv->rtsp, strm_info->media_info, sizeof(strm_info->media_info)); if (strm_info->media_size) { real_strm = (stream_info_t*)nmp_new0(hie_real_strm_t, 1); real_strm->handle = HIE_INVALID_HANDLE; real_strm->opened = strm_info->opened; real_strm->type = strm_info->type; real_strm->level = strm_info->level; real_strm->channel = strm_info->channel; real_strm->state = STATS_STREAM_STOP; real_strm->sdk_srv = (struct service*)hie_srv; memcpy(real_strm->media_info, strm_info->media_info, strm_info->media_size); real_strm->media_size = strm_info->media_size; set_stream_user_data((gpointer)strm_info->opened, (void*)real_strm); add_one_stream(&hie_srv->rtsp.real_strm_list, real_strm); ret = 0; } return ret; }
static bool collect_one_stream(struct ea_struct *ea, void *private_data) { struct streaminfo_state *state = (struct streaminfo_state *)private_data; if (!add_one_stream(state->mem_ctx, &state->num_streams, &state->streams, ea->name, ea->value.length-1, smb_roundup(state->handle->conn, ea->value.length-1))) { state->status = NT_STATUS_NO_MEMORY; return false; } return true; }
static __inline__ int hie_open_record_stream(hie_service_t *hie_srv, stream_info_t *strm_info) { int ret = -1, offset = 0; stream_info_t *rec_strm; TimeInfo start_time = {0}; TimeInfo stop_time = {0}; HistoryStreamPara hsp; //历史流连接参数 if (J_SDK_NVR == hie_srv->owner->fastenings.dev_type) ;//offset = HB_NVR_CHANNEL_OFFSET; //配置历史流连接参数(HieClient_HistoryStreamCreate 仅支持单一录像类型或者所有录像类型) memset(&hsp, 0, sizeof(HistoryStreamPara)); hsp.dwDiskGroup = 1; //盘组1 hsp.dwChannel = strm_info->channel + offset; //通道16 hsp.eTransferMode = eGeneralTCP; //普通的TCP hsp.eStreamType = eAllStreamMedia; //所有录像类型 hsp.dwEnableEndTime = 1; //结束时间有效 hie_get_start_time((const char*)strm_info->pri_data, &hsp.cBeginTime); hie_get_end_time((const char*)strm_info->pri_data, &hsp.cEndTime); if (!hie_find_record_stream_by_channel_and_time(&hie_srv->rtsp.rec_strm_list, strm_info->channel, &start_time, &stop_time)) { HSTREAM user_id, handle = HIE_INVALID_HANDLE; user_id = hie_get_user_id(&hie_srv->parm); //创建历史流通道(HieClient_HistoryStreamCreate 仅支持单一录像类型或者所有录像类型) if (!(ret = HieClient_HistoryStreamCreate(&handle, user_id, &hsp, 0))) { //设置流媒体数据回调 if (!(ret = HieClient_StreamMediaCB(handle, hie_record_data_callback, 0))) { //启动历史流 if (!(ret = HieClient_StreamMediaControl(handle, eTaskStart))) { show_debug("HieClient_StreamMediaControl Success!\n"); //删除流媒体数据回调 HieClient_StreamMediaCB(handle, NULL, 0); //停止历史流 HieClient_StreamMediaControl(handle, eTaskStop); } else { //删除流媒体数据回调 HieClient_StreamMediaCB(handle, NULL, 0); show_warn("HieClient_StreamMediaControl failure, err: %d!!\n", ret); } } else show_warn("HieClient_StreamMediaCB failure, err: %d!!\n", ret); //销毁历史流通道 HieClient_HistoryStreamDestroy(handle); } else show_warn("HieClient_HistoryStreamCreate failure, err: %d!!\n", ret); } else show_warn("stream [channel:%d] [level:%d] already opened!!\n", strm_info->channel, strm_info->level); if (!ret) { rec_strm = (stream_info_t*)nmp_new0(hie_rec_strm_t, 1); rec_strm->handle = HIE_INVALID_HANDLE; rec_strm->opened = strm_info->opened; rec_strm->type = strm_info->type; rec_strm->level = strm_info->level; rec_strm->channel = strm_info->channel; rec_strm->state = STATS_STREAM_STOP; rec_strm->sdk_srv = (struct service*)hie_srv; memcpy(rec_strm->media_info, strm_info->media_info, strm_info->media_size); rec_strm->media_size = strm_info->media_size; ((hie_rec_strm_t*)rec_strm)->enable = 0; memcpy(&((hie_rec_strm_t*)rec_strm)->start_time, &start_time, sizeof(TimeInfo)); memcpy(&((hie_rec_strm_t*)rec_strm)->stop_time, &stop_time, sizeof(TimeInfo)); set_stream_user_data((gpointer)rec_strm->opened, (void*)rec_strm); add_one_stream(&hie_srv->rtsp.rec_strm_list, rec_strm); } return ret; }