diff --git a/trunk/src/app/srs_app_recv_thread.cpp b/trunk/src/app/srs_app_recv_thread.cpp index 04abe5e2b..16ef3bc1e 100644 --- a/trunk/src/app/srs_app_recv_thread.cpp +++ b/trunk/src/app/srs_app_recv_thread.cpp @@ -42,6 +42,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #define SRS_MR_SMALL_BYTES 64 // the percent of buffer to set as small bytes #define SRS_MR_SMALL_PERCENT 100 +// set the socket buffer to specified KB. +// the underlayer api will set to 2*SRS_MR_SOCKET_BUFFER KB. +#define SRS_MR_SOCKET_BUFFER 32 ISrsMessageHandler::ISrsMessageHandler() { @@ -296,14 +299,16 @@ void SrsPublishRecvThread::on_thread_start() // we donot set the auto response to false, // for the main thread never send message. - // 128KB recv buffer. - int nb_rbuf = 128 * 1024; + // socket recv buffer. + int nb_rbuf = SRS_MR_SOCKET_BUFFER * 1024; socklen_t sock_buf_size = sizeof(int); if (setsockopt(mr_fd, SOL_SOCKET, SO_RCVBUF, &nb_rbuf, sock_buf_size) < 0) { srs_warn("set sock SO_RCVBUF=%d failed.", nb_rbuf); } getsockopt(mr_fd, SOL_SOCKET, SO_RCVBUF, &nb_rbuf, &sock_buf_size); + srs_trace("set socket buffer to %d, actual %d KB", SRS_MR_SOCKET_BUFFER, nb_rbuf / 1024); + // enable the merge read // @see https://github.com/winlinvip/simple-rtmp-server/issues/241 rtmp->set_merge_read(true, nb_rbuf, this); diff --git a/trunk/src/rtmp/srs_protocol_buffer.cpp b/trunk/src/rtmp/srs_protocol_buffer.cpp index cf17aa1d2..f78f6b49f 100644 --- a/trunk/src/rtmp/srs_protocol_buffer.cpp +++ b/trunk/src/rtmp/srs_protocol_buffer.cpp @@ -33,7 +33,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // 32KB=32768 // 64KB=65536 // @see https://github.com/winlinvip/simple-rtmp-server/issues/241 -#define SOCKET_READ_SIZE 4096 +#define SOCKET_READ_SIZE 65536 // the max buffer for user space socket buffer. #define SOCKET_MAX_BUF 65536 @@ -136,6 +136,10 @@ void SrsBuffer::set_merge_read(bool v, int max_buffer, IMergeReadHandler* handle if (v && buffer_size != nb_buffer) { reset_buffer(buffer_size); } + + if (_handler) { + _handler->on_buffer_change(nb_buffer); + } } void SrsBuffer::on_chunk_size(int32_t chunk_size) @@ -145,6 +149,10 @@ void SrsBuffer::on_chunk_size(int32_t chunk_size) } reset_buffer(chunk_size); + + if (_handler) { + _handler->on_buffer_change(nb_buffer); + } } int SrsBuffer::buffer_size() @@ -158,8 +166,4 @@ void SrsBuffer::reset_buffer(int size) nb_buffer = size; buffer = new char[nb_buffer]; - - if (_handler) { - _handler->on_buffer_change(nb_buffer); - } }