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
2016-08-10 22:04:01 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
e00928557e269cf55a8104c1dfc67e8d024b039d
e0092855
1 parent
3fbe9d24
fix the timeout for librtmp
显示空白字符变更
内嵌
并排对比
正在显示
4 个修改的文件
包含
86 行增加
和
14 行删除
trunk/research/librtmp/srs_detect_rtmp.c
trunk/src/libs/srs_lib_simple_socket.cpp
trunk/src/libs/srs_librtmp.cpp
trunk/src/libs/srs_librtmp.hpp
trunk/research/librtmp/srs_detect_rtmp.c
查看文件 @
e009285
...
...
@@ -88,7 +88,15 @@ int main(int argc, char** argv)
exit
(
-
2
);
}
rtmp
=
srs_rtmp_create
(
rtmp_url
);
if
((
rtmp
=
srs_rtmp_create
(
rtmp_url
))
==
NULL
)
{
srs_human_trace
(
"create rtmp failed"
);
ret
=
-
1
;
goto
rtmp_destroy
;
}
if
((
ret
=
srs_rtmp_set_timeout
(
rtmp
,
timeout
*
1000
,
timeout
*
1000
))
!=
0
)
{
srs_human_trace
(
"set timeout for rtmp failed. errno=%d"
,
ret
);
goto
rtmp_destroy
;
}
if
((
ret
=
srs_rtmp_dns_resolve
(
rtmp
))
!=
0
)
{
srs_human_trace
(
"dns resolve failed. ret=%d"
,
ret
);
...
...
trunk/src/libs/srs_lib_simple_socket.cpp
查看文件 @
e009285
...
...
@@ -27,7 +27,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// for srs-librtmp, @see https://github.com/ossrs/srs/issues/213
#ifndef _WIN32
#define SOCKET_ETIME E
TIME
#define SOCKET_ETIME E
WOULDBLOCK
#define SOCKET_ECONNRESET ECONNRESET
#define SOCKET_ERRNO() errno
...
...
@@ -160,10 +160,23 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
return
ret
;
}
void
srs_hijack_io_set_recv_timeout
(
srs_hijack_io_t
ctx
,
int64_t
timeout_us
)
int
srs_hijack_io_set_recv_timeout
(
srs_hijack_io_t
ctx
,
int64_t
timeout_us
)
{
SrsBlockSyncSocket
*
skt
=
(
SrsBlockSyncSocket
*
)
ctx
;
int
sec
=
timeout_us
/
(
1000
*
1000LL
);
int
microsec
=
timeout_us
/
1000LL
%
1000
;
sec
=
srs_max
(
0
,
sec
);
microsec
=
srs_max
(
0
,
microsec
);
struct
timeval
tv
=
{
sec
,
microsec
};
if
(
setsockopt
(
skt
->
fd
,
SOL_SOCKET
,
SO_RCVTIMEO
,
&
tv
,
sizeof
(
tv
))
==
-
1
)
{
return
SOCKET_ERRNO
();
}
skt
->
recv_timeout
=
timeout_us
;
return
ERROR_SUCCESS
;
}
int64_t
srs_hijack_io_get_recv_timeout
(
srs_hijack_io_t
ctx
)
{
...
...
@@ -175,10 +188,24 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
SrsBlockSyncSocket
*
skt
=
(
SrsBlockSyncSocket
*
)
ctx
;
return
skt
->
recv_bytes
;
}
void
srs_hijack_io_set_send_timeout
(
srs_hijack_io_t
ctx
,
int64_t
timeout_us
)
int
srs_hijack_io_set_send_timeout
(
srs_hijack_io_t
ctx
,
int64_t
timeout_us
)
{
SrsBlockSyncSocket
*
skt
=
(
SrsBlockSyncSocket
*
)
ctx
;
int
sec
=
timeout_us
/
(
1000
*
1000LL
);
int
microsec
=
timeout_us
/
1000LL
%
1000
;
sec
=
srs_max
(
0
,
sec
);
microsec
=
srs_max
(
0
,
microsec
);
struct
timeval
tv
=
{
sec
,
microsec
};
if
(
setsockopt
(
skt
->
fd
,
SOL_SOCKET
,
SO_SNDTIMEO
,
&
tv
,
sizeof
(
tv
))
==
-
1
)
{
return
SOCKET_ERRNO
();
}
skt
->
send_timeout
=
timeout_us
;
return
ERROR_SUCCESS
;
}
int64_t
srs_hijack_io_get_send_timeout
(
srs_hijack_io_t
ctx
)
{
...
...
trunk/src/libs/srs_librtmp.cpp
查看文件 @
e009285
...
...
@@ -484,14 +484,6 @@ int srs_librtmp_context_resolve_host(Context* context)
{
int
ret
=
ERROR_SUCCESS
;
// create socket
srs_freep
(
context
->
skt
);
context
->
skt
=
new
SimpleSocketStream
();
if
((
ret
=
context
->
skt
->
create_socket
())
!=
ERROR_SUCCESS
)
{
return
ret
;
}
// connect to server:port
context
->
ip
=
srs_dns_resolve
(
context
->
host
);
if
(
context
->
ip
.
empty
())
{
...
...
@@ -540,6 +532,17 @@ srs_rtmp_t srs_rtmp_create(const char* url)
{
Context
*
context
=
new
Context
();
context
->
url
=
url
;
// create socket
srs_freep
(
context
->
skt
);
context
->
skt
=
new
SimpleSocketStream
();
if
(
context
->
skt
->
create_socket
()
!=
ERROR_SUCCESS
)
{
// free the context and return NULL
srs_freep
(
context
);
return
NULL
;
}
return
context
;
}
...
...
@@ -552,9 +555,35 @@ srs_rtmp_t srs_rtmp_create2(const char* url)
// auto append stream.
context
->
url
+=
"/livestream"
;
// create socket
srs_freep
(
context
->
skt
);
context
->
skt
=
new
SimpleSocketStream
();
if
(
context
->
skt
->
create_socket
()
!=
ERROR_SUCCESS
)
{
// free the context and return NULL
srs_freep
(
context
);
return
NULL
;
}
return
context
;
}
int
srs_rtmp_set_timeout
(
srs_rtmp_t
rtmp
,
int
recv_timeout_ms
,
int
send_timeout_ms
)
{
int
ret
=
ERROR_SUCCESS
;
if
(
!
rtmp
)
{
return
ret
;
}
Context
*
context
=
(
Context
*
)
rtmp
;
context
->
skt
->
set_recv_timeout
(
recv_timeout_ms
*
1000LL
);
context
->
skt
->
set_send_timeout
(
send_timeout_ms
*
1000LL
);
return
ret
;
}
void
srs_rtmp_destroy
(
srs_rtmp_t
rtmp
)
{
if
(
!
rtmp
)
{
...
...
trunk/src/libs/srs_librtmp.hpp
查看文件 @
e009285
...
...
@@ -108,6 +108,14 @@ extern srs_rtmp_t srs_rtmp_create(const char* url);
*/
extern
srs_rtmp_t
srs_rtmp_create2
(
const
char
*
url
);
/**
* set socket timeout
* @param recv_timeout_ms the timeout for receiving messages in ms.
* @param send_timeout_ms the timeout for sending message in ms.
*
* @return 0, success; otherswise, failed.
*/
extern
int
srs_rtmp_set_timeout
(
srs_rtmp_t
rtmp
,
int
recv_timeout_ms
,
int
send_timeout_ms
);
/**
* close and destroy the rtmp stack.
* @remark, user should never use the rtmp again.
*/
...
...
@@ -982,7 +990,7 @@ typedef void* srs_hijack_io_t;
* set the socket recv timeout.
* @return 0, success; otherswise, failed.
*/
extern
void
srs_hijack_io_set_recv_timeout
(
srs_hijack_io_t
ctx
,
int64_t
timeout_us
);
extern
int
srs_hijack_io_set_recv_timeout
(
srs_hijack_io_t
ctx
,
int64_t
timeout_us
);
/**
* get the socket recv timeout.
* @return 0, success; otherswise, failed.
...
...
@@ -997,7 +1005,7 @@ typedef void* srs_hijack_io_t;
* set the socket send timeout.
* @return 0, success; otherswise, failed.
*/
extern
void
srs_hijack_io_set_send_timeout
(
srs_hijack_io_t
ctx
,
int64_t
timeout_us
);
extern
int
srs_hijack_io_set_send_timeout
(
srs_hijack_io_t
ctx
,
int64_t
timeout_us
);
/**
* get the socket send timeout.
* @return 0, success; otherswise, failed.
...
...
请
注册
或
登录
后发表评论