Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
胡斌
/
srs
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
winlin
2014-12-03 21:46:47 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
aee00877df9f4bb2c044dbc4151625f9c0dc8e52
aee00877
1 parent
19b1d750
for bug #241, change buffer size when chunk size changed.
显示空白字符变更
内嵌
并排对比
正在显示
6 个修改的文件
包含
50 行增加
和
18 行删除
trunk/src/app/srs_app_recv_thread.cpp
trunk/src/app/srs_app_recv_thread.hpp
trunk/src/qt/srs/srs-qt.pro.user
trunk/src/rtmp/srs_protocol_buffer.cpp
trunk/src/rtmp/srs_protocol_buffer.hpp
trunk/src/rtmp/srs_protocol_stack.cpp
trunk/src/app/srs_app_recv_thread.cpp
查看文件 @
aee0087
...
...
@@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// when we read from socket less than this value,
// sleep a while to merge read.
// @see https://github.com/winlinvip/simple-rtmp-server/issues/241
#define SRS_MERGED_READ_SIZE
(SOCKET_READ_SIZE
/ 10)
#define SRS_MERGED_READ_SIZE
(buffer) (buffer
/ 10)
// the time to sleep to merge read, to read more bytes.
#define SRS_MERGED_READ_US (300 * 1000)
...
...
@@ -334,7 +334,7 @@ void SrsPublishRecvThread::on_recv_error(int ret)
st_cond_signal
(
error
);
}
void
SrsPublishRecvThread
::
on_read
(
ssize_t
nread
)
void
SrsPublishRecvThread
::
on_read
(
int
nb_buffer
,
ssize_t
nread
)
{
if
(
nread
<
0
)
{
return
;
...
...
@@ -346,7 +346,7 @@ void SrsPublishRecvThread::on_read(ssize_t nread)
* that is, we merge some data to read together.
* @see https://github.com/winlinvip/simple-rtmp-server/issues/241
*/
if
(
nread
<
SRS_MERGED_READ_SIZE
)
{
if
(
nread
<
SRS_MERGED_READ_SIZE
(
nb_buffer
)
)
{
st_usleep
(
SRS_MERGED_READ_US
);
}
}
...
...
trunk/src/app/srs_app_recv_thread.hpp
查看文件 @
aee0087
...
...
@@ -173,7 +173,7 @@ public:
virtual
void
on_recv_error
(
int
ret
);
// interface IMergeReadHandler
public:
virtual
void
on_read
(
ssize_t
nread
);
virtual
void
on_read
(
int
nb_buffer
,
ssize_t
nread
);
};
#endif
...
...
trunk/src/qt/srs/srs-qt.pro.user
查看文件 @
aee0087
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 3.1.1, 2014-12-01T23:49:21. -->
<qtcreator>
<data>
<variable>
ProjectExplorer.Project.ActiveTarget
</variable>
...
...
trunk/src/rtmp/srs_protocol_buffer.cpp
查看文件 @
aee0087
...
...
@@ -26,6 +26,14 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <srs_kernel_error.hpp>
#include <srs_kernel_log.hpp>
// 4KB=4096
// 8KB=8192
// 16KB=16384
// 32KB=32768
// 64KB=65536
// @see https://github.com/winlinvip/simple-rtmp-server/issues/241
#define SOCKET_READ_SIZE 4096
IMergeReadHandler
::
IMergeReadHandler
()
{
}
...
...
@@ -39,7 +47,8 @@ SrsBuffer::SrsBuffer()
merged_read
=
false
;
_handler
=
NULL
;
buffer
=
new
char
[
SOCKET_READ_SIZE
];
nb_buffer
=
SOCKET_READ_SIZE
;
buffer
=
new
char
[
nb_buffer
];
}
SrsBuffer
::~
SrsBuffer
()
...
...
@@ -92,7 +101,7 @@ int SrsBuffer::grow(ISrsBufferReader* reader, int required_size)
while
(
length
()
<
required_size
)
{
ssize_t
nread
;
if
((
ret
=
reader
->
read
(
buffer
,
SOCKET_READ_SIZE
,
&
nread
))
!=
ERROR_SUCCESS
)
{
if
((
ret
=
reader
->
read
(
buffer
,
nb_buffer
,
&
nread
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
...
...
@@ -103,7 +112,7 @@ int SrsBuffer::grow(ISrsBufferReader* reader, int required_size)
* @see https://github.com/winlinvip/simple-rtmp-server/issues/241
*/
if
(
merged_read
&&
_handler
)
{
_handler
->
on_read
(
nread
);
_handler
->
on_read
(
n
b_buffer
,
n
read
);
}
srs_assert
((
int
)
nread
>
0
);
...
...
@@ -119,4 +128,21 @@ void SrsBuffer::set_merge_read(bool v, IMergeReadHandler* handler)
_handler
=
handler
;
}
void
SrsBuffer
::
on_chunk_size
(
int32_t
chunk_size
)
{
if
(
nb_buffer
>=
chunk_size
)
{
return
;
}
srs_freep
(
buffer
);
nb_buffer
=
chunk_size
;
buffer
=
new
char
[
nb_buffer
];
}
int
SrsBuffer
::
buffer_size
()
{
return
nb_buffer
;
}
...
...
trunk/src/rtmp/srs_protocol_buffer.hpp
查看文件 @
aee0087
...
...
@@ -34,14 +34,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <srs_protocol_io.hpp>
// 4KB=4096
// 8KB=8192
// 16KB=16384
// 32KB=32768
// 64KB=65536
// @see https://github.com/winlinvip/simple-rtmp-server/issues/241
#define SOCKET_READ_SIZE 4096
/**
* to improve read performance, merge some packets then read,
* when it on and read small bytes, we sleep to wait more data.,
...
...
@@ -59,7 +51,7 @@ public:
* some small bytes.
* @remark, it only for server-side, client srs-librtmp just ignore.
*/
virtual
void
on_read
(
ssize_t
nread
)
=
0
;
virtual
void
on_read
(
int
nb_buffer
,
ssize_t
nread
)
=
0
;
};
/**
...
...
@@ -75,6 +67,7 @@ private:
// data and socket buffer
std
::
vector
<
char
>
data
;
char
*
buffer
;
int
nb_buffer
;
public
:
SrsBuffer
();
virtual
~
SrsBuffer
();
...
...
@@ -121,6 +114,17 @@ public:
* @see https://github.com/winlinvip/simple-rtmp-server/issues/241
*/
virtual
void
set_merge_read
(
bool
v
,
IMergeReadHandler
*
handler
);
public
:
/**
* when chunk size changed, the buffer should change the buffer also.
* to keep the socket buffer size always greater than chunk size.
* @see https://github.com/winlinvip/simple-rtmp-server/issues/241
*/
virtual
void
on_chunk_size
(
int32_t
chunk_size
);
/**
* get the size of socket buffer to read.
*/
virtual
int
buffer_size
();
};
#endif
...
...
trunk/src/rtmp/srs_protocol_stack.cpp
查看文件 @
aee0087
...
...
@@ -1689,9 +1689,12 @@ int SrsProtocol::on_recv_message(SrsMessage* msg)
SRS_CONSTS_RTMP_MAX_CHUNK_SIZE
);
}
int
sock_buffer
=
in_buffer
->
buffer_size
();
in_chunk_size
=
pkt
->
chunk_size
;
in_buffer
->
on_chunk_size
(
pkt
->
chunk_size
);
srs_trace
(
"input chunk size to %d, sock buf %d=>%d"
,
pkt
->
chunk_size
,
sock_buffer
,
in_buffer
->
buffer_size
());
srs_trace
(
"input chunk size to %d"
,
pkt
->
chunk_size
);
break
;
}
case
RTMP_MSG_UserControlMessage
:
{
...
...
请
注册
或
登录
后发表评论