Exemplo n.º 1
0
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;
    }
Exemplo n.º 2
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;
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
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;
}