bool RTSPServerIFace::_is_valid_stream_id(int stream_id) { bool valid = (stream_id >= 0 && stream_id < Stream::COUNT && cgi_server()->param_state().stream[stream_id].enable); if (!valid) { SBL_INFO("ERROR: Invalid stream_id = %d enable = %d", stream_id, (int)cgi_server()->param_state().stream[stream_id].enable); } return valid; }
/* * Returns the video encoder bit-rate for the given encoder stream ID. * * Returns '-1' if the given stream ID does not exist * */ int RTSPServerIFace::get_bitrate(int stream_id) { SBL_INFO("RTSP::get_bitrate() stream_id = %d", stream_id); if (!_is_valid_stream_id(stream_id)) return -1; return cgi_server()->param_state().stream[stream_id].bitrate;; }
int main(int argc, char **argv) { const char *tmp = getenv("TMPDIR"); if (tmp) TMPDIR = tmp; if (argc < 2) return cgi_server(); if (argc < 3) return run_server(atoi(argv[1])); return run_client(argc, argv); }
/* Describe a stream - The method is called by the RTSP server every time * a RTSP DESCRIBE request is received. We should validate the stream ID, and * return the requested information in the "stream_desc" parameter. * * Parameters: * * stream_id - stream_id of a valid stream * * stream_desc - output stream descriptor * * Return: * * 0 for success, -1 for errors (if stream_id is incorrect for example) */ int RTSPServerIFace::describe(int stream_id, StreamDesc& stream_desc) { int error = -1; // By default we assume error SBL_INFO("RTSP::DESCRIBE request. stream_id = %d", stream_id); if (!_is_valid_stream_id(stream_id)) { return error; } sdvr_venc_e encoder_type = str_encoder_to_sdk_id(cgi_server()->param_state().stream[stream_id].encoder); error = 0; // Success return; switch (encoder_type) { case SDVR_VIDEO_ENC_H264: stream_desc.encoder_type = RTSP::H264; stream_desc.width = cgi_server()->param_state().stream[stream_id].width; stream_desc.height = cgi_server()->param_state().stream[stream_id].height; stream_desc.bitrate = cgi_server()->param_state().stream[stream_id].bitrate; break; case SDVR_VIDEO_ENC_JPEG: stream_desc.encoder_type = RTSP::MJPEG; stream_desc.quality = cgi_server()->param_state().stream[stream_id].quality; stream_desc.width = cgi_server()->param_state().stream[stream_id].width; stream_desc.height = cgi_server()->param_state().stream[stream_id].height; stream_desc.bitrate = 4500; // kbps, estimate ?? break; case SDVR_VIDEO_ENC_MPEG4: stream_desc.encoder_type = RTSP::MPEG4; stream_desc.width = cgi_server()->param_state().stream[stream_id].width; stream_desc.height = cgi_server()->param_state().stream[stream_id].height; stream_desc.bitrate = cgi_server()->param_state().stream[stream_id].bitrate; break; default: error = -1; stream_desc.encoder_type = RTSP::UNKNOWN_ENCODER; break; } // switch (pStreamingChan->streamingChan.video.nVideoCodecType) return error; }