1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

refine config, check chunk size.

This commit is contained in:
winlin 2014-07-25 11:04:13 +08:00
parent 630bdf0c80
commit 7865b0e935
3 changed files with 43 additions and 19 deletions

View file

@ -1180,6 +1180,8 @@ int SrsConfig::parse_file(const char* filename)
int SrsConfig::check_config() int SrsConfig::check_config()
{ {
int ret = ERROR_SUCCESS; int ret = ERROR_SUCCESS;
vector<SrsConfDirective*> vhosts = get_vhosts();
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
// check empty // check empty
@ -1256,7 +1258,6 @@ int SrsConfig::check_config()
} }
} }
if (true) { if (true) {
vector<SrsConfDirective*> vhosts = get_vhosts();
for (int i = 0; i < (int)vhosts.size(); i++) { for (int i = 0; i < (int)vhosts.size(); i++) {
SrsConfDirective* conf = vhosts[i]; SrsConfDirective* conf = vhosts[i];
for (int i = 0; conf && i < (int)conf->directives.size(); i++) { for (int i = 0; conf && i < (int)conf->directives.size(); i++) {
@ -1441,7 +1442,30 @@ int SrsConfig::check_config()
return ret; return ret;
} }
// TODO: FIXME: check others. ////////////////////////////////////////////////////////////////////////
// check chunk size
////////////////////////////////////////////////////////////////////////
if (get_global_chunk_size() < SRS_CONSTS_RTMP_MIN_CHUNK_SIZE
|| get_global_chunk_size() > SRS_CONSTS_RTMP_MAX_CHUNK_SIZE
) {
ret = ERROR_SYSTEM_CONFIG_INVALID;
srs_error("directive chunk_size invalid, chunk_size=%d, must in [%d, %d], ret=%d",
get_global_chunk_size(), SRS_CONSTS_RTMP_MIN_CHUNK_SIZE,
SRS_CONSTS_RTMP_MAX_CHUNK_SIZE, ret);
return ret;
}
for (int i = 0; i < (int)vhosts.size(); i++) {
SrsConfDirective* vhost = vhosts[i];
if (get_chunk_size(vhost->arg0()) < SRS_CONSTS_RTMP_MIN_CHUNK_SIZE
|| get_chunk_size(vhost->arg0()) > SRS_CONSTS_RTMP_MAX_CHUNK_SIZE
) {
ret = ERROR_SYSTEM_CONFIG_INVALID;
srs_error("directive vhost %s chunk_size invalid, chunk_size=%d, must in [%d, %d], ret=%d",
vhost->arg0().c_str(), get_chunk_size(vhost->arg0()), SRS_CONSTS_RTMP_MIN_CHUNK_SIZE,
SRS_CONSTS_RTMP_MAX_CHUNK_SIZE, ret);
return ret;
}
}
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
// check log name and level // check log name and level
@ -1475,7 +1499,6 @@ int SrsConfig::check_config()
srs_warn("http_api is disabled by configure"); srs_warn("http_api is disabled by configure");
} }
#endif #endif
vector<SrsConfDirective*> vhosts = get_vhosts();
for (int i = 0; i < (int)vhosts.size(); i++) { for (int i = 0; i < (int)vhosts.size(); i++) {
SrsConfDirective* vhost = vhosts[i]; SrsConfDirective* vhost = vhosts[i];
srs_assert(vhost != NULL); srs_assert(vhost != NULL);

View file

@ -49,6 +49,20 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define SRS_CONSTS_RTMP_SRS_CHUNK_SIZE 60000 #define SRS_CONSTS_RTMP_SRS_CHUNK_SIZE 60000
// 6. Chunking, RTMP protocol default chunk size. // 6. Chunking, RTMP protocol default chunk size.
#define SRS_CONSTS_RTMP_PROTOCOL_CHUNK_SIZE 128 #define SRS_CONSTS_RTMP_PROTOCOL_CHUNK_SIZE 128
/**
* 6. Chunking
* The chunk size is configurable. It can be set using a control
* message(Set Chunk Size) as described in section 7.1. The maximum
* chunk size can be 65536 bytes and minimum 128 bytes. Larger values
* reduce CPU usage, but also commit to larger writes that can delay
* other content on lower bandwidth connections. Smaller chunks are not
* good for high-bit rate streaming. Chunk size is maintained
* independently for each direction.
*/
#define SRS_CONSTS_RTMP_MIN_CHUNK_SIZE 128
#define SRS_CONSTS_RTMP_MAX_CHUNK_SIZE 65536
// the following is the timeout for rtmp protocol, // the following is the timeout for rtmp protocol,
// to avoid death connection. // to avoid death connection.

View file

@ -168,19 +168,6 @@ messages.
/**************************************************************************** /****************************************************************************
***************************************************************************** *****************************************************************************
****************************************************************************/ ****************************************************************************/
/**
* 6. Chunking
* The chunk size is configurable. It can be set using a control
* message(Set Chunk Size) as described in section 7.1. The maximum
* chunk size can be 65536 bytes and minimum 128 bytes. Larger values
* reduce CPU usage, but also commit to larger writes that can delay
* other content on lower bandwidth connections. Smaller chunks are not
* good for high-bit rate streaming. Chunk size is maintained
* independently for each direction.
*/
#define RTMP_MIN_CHUNK_SIZE 128
#define RTMP_MAX_CHUNK_SIZE 65536
/** /**
* 6.1. Chunk Format * 6.1. Chunk Format
* Extended timestamp: 0 or 4 bytes * Extended timestamp: 0 or 4 bytes
@ -3724,16 +3711,16 @@ int SrsSetChunkSizePacket::decode(SrsStream* stream)
chunk_size = stream->read_4bytes(); chunk_size = stream->read_4bytes();
srs_info("decode chunk size success. chunk_size=%d", chunk_size); srs_info("decode chunk size success. chunk_size=%d", chunk_size);
if (chunk_size < RTMP_MIN_CHUNK_SIZE) { if (chunk_size < SRS_CONSTS_RTMP_MIN_CHUNK_SIZE) {
ret = ERROR_RTMP_CHUNK_SIZE; ret = ERROR_RTMP_CHUNK_SIZE;
srs_error("invalid chunk size. min=%d, actual=%d, ret=%d", srs_error("invalid chunk size. min=%d, actual=%d, ret=%d",
ERROR_RTMP_CHUNK_SIZE, chunk_size, ret); ERROR_RTMP_CHUNK_SIZE, chunk_size, ret);
return ret; return ret;
} }
if (chunk_size > RTMP_MAX_CHUNK_SIZE) { if (chunk_size > SRS_CONSTS_RTMP_MAX_CHUNK_SIZE) {
ret = ERROR_RTMP_CHUNK_SIZE; ret = ERROR_RTMP_CHUNK_SIZE;
srs_error("invalid chunk size. max=%d, actual=%d, ret=%d", srs_error("invalid chunk size. max=%d, actual=%d, ret=%d",
RTMP_MAX_CHUNK_SIZE, chunk_size, ret); SRS_CONSTS_RTMP_MAX_CHUNK_SIZE, chunk_size, ret);
return ret; return ret;
} }