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-05-29 14:16:34 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
52735095545e8b5d856922fed452e812f9305301
52735095
1 parent
7ec202ee
refine log, to 0.9.123
显示空白字符变更
内嵌
并排对比
正在显示
13 个修改的文件
包含
149 行增加
和
45 行删除
trunk/research/librtmp/srs_flv_injecter.c
trunk/src/app/srs_app_edge.cpp
trunk/src/app/srs_app_rtmp_conn.cpp
trunk/src/app/srs_app_source.cpp
trunk/src/core/srs_core.hpp
trunk/src/libs/srs_librtmp.cpp
trunk/src/libs/srs_librtmp.hpp
trunk/src/rtmp/srs_protocol_amf0.cpp
trunk/src/rtmp/srs_protocol_amf0.hpp
trunk/src/rtmp/srs_protocol_handshake.cpp
trunk/src/rtmp/srs_protocol_rtmp.cpp
trunk/src/rtmp/srs_protocol_rtmp_stack.cpp
trunk/src/rtmp/srs_protocol_rtmp_stack.hpp
trunk/research/librtmp/srs_flv_injecter.c
查看文件 @
5273509
...
...
@@ -249,11 +249,11 @@ int build_keyframes(srs_flv_t ic, srs_amf0_t *pname, srs_amf0_t* pdata, srs_amf0
if
(
srs_amf0_is_object
(
amf0_data
))
{
keyframes
=
srs_amf0_object_property
(
amf0_data
,
"keyframes"
);
if
(
keyframes
==
NULL
)
{
keyframes
=
srs_amf0_create_ecma_array
();
}
keyframes
=
srs_amf0_create_object
();
srs_amf0_object_property_set
(
amf0_data
,
"keyframes"
,
keyframes
);
}
// always clear the old keyframes.
srs_amf0_
ecma_array
_clear
(
keyframes
);
srs_amf0_
object
_clear
(
keyframes
);
*
pfilepositions
=
filepositions
=
srs_amf0_create_strict_array
();
srs_amf0_object_property_set
(
keyframes
,
"filepositions"
,
filepositions
);
...
...
@@ -263,17 +263,17 @@ int build_keyframes(srs_flv_t ic, srs_amf0_t *pname, srs_amf0_t* pdata, srs_amf0
}
else
if
(
srs_amf0_is_ecma_array
(
amf0_data
))
{
keyframes
=
srs_amf0_ecma_array_property
(
amf0_data
,
"keyframes"
);
if
(
keyframes
==
NULL
)
{
keyframes
=
srs_amf0_create_ecma_array
();
}
keyframes
=
srs_amf0_create_object
();
srs_amf0_ecma_array_property_set
(
amf0_data
,
"keyframes"
,
keyframes
);
}
// always clear the old keyframes.
srs_amf0_
ecma_array
_clear
(
keyframes
);
srs_amf0_
object
_clear
(
keyframes
);
*
pfilepositions
=
filepositions
=
srs_amf0_create_strict_array
();
srs_amf0_
ecma_array
_property_set
(
keyframes
,
"filepositions"
,
filepositions
);
srs_amf0_
object
_property_set
(
keyframes
,
"filepositions"
,
filepositions
);
times
=
srs_amf0_create_strict_array
();
srs_amf0_
ecma_array
_property_set
(
keyframes
,
"times"
,
times
);
srs_amf0_
object
_property_set
(
keyframes
,
"times"
,
times
);
}
}
...
...
trunk/src/app/srs_app_edge.cpp
查看文件 @
5273509
...
...
@@ -152,8 +152,10 @@ int SrsEdgeIngester::cycle()
return
ret
;
}
if
((
ret
=
ingest
())
!=
ERROR_SUCCESS
)
{
return
ret
;
ret
=
ingest
();
if
(
srs_is_client_gracefully_close
(
ret
))
{
srs_warn
(
"origin disconnected, retry. ret=%d"
,
ret
);
ret
=
ERROR_SUCCESS
;
}
return
ret
;
...
...
@@ -186,7 +188,9 @@ int SrsEdgeIngester::ingest()
// read from client.
SrsMessage
*
msg
=
NULL
;
if
((
ret
=
client
->
recv_message
(
&
msg
))
!=
ERROR_SUCCESS
)
{
if
(
!
srs_is_client_gracefully_close
(
ret
))
{
srs_error
(
"ingest recv origin server message failed. ret=%d"
,
ret
);
}
return
ret
;
}
srs_verbose
(
"edge loop recv message. ret=%d"
,
ret
);
...
...
@@ -288,9 +292,6 @@ int SrsEdgeIngester::connect_server()
}
// open socket.
srs_trace
(
"edge connected, can_publish=%d, url=%s/%s, server=%s:%d"
,
_source
->
can_publish
(),
_req
->
tcUrl
.
c_str
(),
_req
->
stream
.
c_str
(),
server
.
c_str
(),
port
);
// TODO: FIXME: extract utility method
int
sock
=
socket
(
AF_INET
,
SOCK_STREAM
,
0
);
if
(
sock
==
-
1
){
...
...
@@ -332,7 +333,10 @@ int SrsEdgeIngester::connect_server()
srs_error
(
"connect to server error. ip=%s, port=%d, ret=%d"
,
ip
.
c_str
(),
port
,
ret
);
return
ret
;
}
srs_trace
(
"connect to server success. server=%s, ip=%s, port=%d"
,
server
.
c_str
(),
ip
.
c_str
(),
port
);
srs_info
(
"connect to server success. server=%s, ip=%s, port=%d"
,
server
.
c_str
(),
ip
.
c_str
(),
port
);
srs_trace
(
"edge connected, can_publish=%d, url=%s/%s, server=%s:%d"
,
_source
->
can_publish
(),
_req
->
tcUrl
.
c_str
(),
_req
->
stream
.
c_str
(),
server
.
c_str
(),
port
);
return
ret
;
}
...
...
trunk/src/app/srs_app_rtmp_conn.cpp
查看文件 @
5273509
...
...
@@ -99,7 +99,7 @@ int SrsRtmpConn::do_cycle()
{
int
ret
=
ERROR_SUCCESS
;
srs_trace
(
"serve client
, peer
ip=%s"
,
ip
.
c_str
());
srs_trace
(
"serve client ip=%s"
,
ip
.
c_str
());
rtmp
->
set_recv_timeout
(
SRS_RECV_TIMEOUT_US
);
rtmp
->
set_send_timeout
(
SRS_SEND_TIMEOUT_US
);
...
...
@@ -140,7 +140,7 @@ int SrsRtmpConn::do_cycle()
}
srs_verbose
(
"check vhost success."
);
srs_trace
(
"
rtmp connect app success.
"
srs_trace
(
"
connect app,
"
"tcUrl=%s, pageUrl=%s, swfUrl=%s, schema=%s, vhost=%s, port=%s, app=%s"
,
req
->
tcUrl
.
c_str
(),
req
->
pageUrl
.
c_str
(),
req
->
swfUrl
.
c_str
(),
req
->
schema
.
c_str
(),
req
->
vhost
.
c_str
(),
req
->
port
.
c_str
(),
...
...
@@ -254,11 +254,13 @@ int SrsRtmpConn::stream_service_cycle()
SrsRtmpConnType
type
;
if
((
ret
=
rtmp
->
identify_client
(
res
->
stream_id
,
type
,
req
->
stream
,
req
->
duration
))
!=
ERROR_SUCCESS
)
{
if
(
!
srs_is_client_gracefully_close
(
ret
))
{
srs_error
(
"identify client failed. ret=%d"
,
ret
);
}
return
ret
;
}
req
->
strip
();
srs_trace
(
"
identify client success.
type=%s, stream_name=%s, duration=%.2f"
,
srs_trace
(
"
client identified,
type=%s, stream_name=%s, duration=%.2f"
,
srs_client_type_string
(
type
).
c_str
(),
req
->
stream
.
c_str
(),
req
->
duration
);
// client is identified, set the timeout to service timeout.
...
...
trunk/src/app/srs_app_source.cpp
查看文件 @
5273509
...
...
@@ -23,6 +23,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <srs_app_source.hpp>
#include <sstream>
#include <algorithm>
using
namespace
std
;
...
...
@@ -851,10 +852,27 @@ int SrsSource::on_meta_data(SrsMessage* msg, SrsOnMetaDataPacket* metadata)
}
#endif
SrsAmf0Any
*
prop
=
NULL
;
// generate metadata info to print
std
::
stringstream
ss
;
if
((
prop
=
metadata
->
metadata
->
ensure_property_number
(
"width"
))
!=
NULL
)
{
ss
<<
", width="
<<
(
int
)
prop
->
to_number
();
}
if
((
prop
=
metadata
->
metadata
->
ensure_property_number
(
"height"
))
!=
NULL
)
{
ss
<<
", height="
<<
(
int
)
prop
->
to_number
();
}
if
((
prop
=
metadata
->
metadata
->
ensure_property_number
(
"videocodecid"
))
!=
NULL
)
{
ss
<<
", vcodec="
<<
(
int
)
prop
->
to_number
();
}
if
((
prop
=
metadata
->
metadata
->
ensure_property_number
(
"audiocodecid"
))
!=
NULL
)
{
ss
<<
", acodec="
<<
(
int
)
prop
->
to_number
();
}
// add server info to metadata
metadata
->
metadata
->
set
(
"server"
,
SrsAmf0Any
::
str
(
RTMP_SIG_SRS_KEY
" "
RTMP_SIG_SRS_VERSION
" ("
RTMP_SIG_SRS_URL_SHORT
")"
));
metadata
->
metadata
->
set
(
"authors"
,
SrsAmf0Any
::
str
(
RTMP_SIG_SRS_PRIMARY_AUTHROS
));
SrsAmf0Any
*
prop
=
NULL
;
if
((
prop
=
metadata
->
metadata
->
get_property
(
"audiosamplerate"
))
!=
NULL
)
{
if
(
prop
->
is_number
())
{
sample_rate
=
(
int
)
prop
->
to_number
();
...
...
@@ -912,7 +930,7 @@ int SrsSource::on_meta_data(SrsMessage* msg, SrsOnMetaDataPacket* metadata)
return
ret
;
}
}
srs_trace
(
"
dispatch metadata success."
);
srs_trace
(
"
got metadata%s"
,
ss
.
str
().
c_str
()
);
}
// copy to all forwarders
...
...
@@ -996,7 +1014,7 @@ int SrsSource::on_audio(SrsMessage* audio)
if
(
SrsCodec
::
audio_is_sequence_header
(
msg
->
payload
,
msg
->
size
))
{
srs_freep
(
cache_sh_audio
);
cache_sh_audio
=
msg
->
copy
();
srs_trace
(
"
update audio sequence header success.
size=%d"
,
msg
->
header
.
payload_length
);
srs_trace
(
"
got audio sh,
size=%d"
,
msg
->
header
.
payload_length
);
return
ret
;
}
...
...
@@ -1086,7 +1104,7 @@ int SrsSource::on_video(SrsMessage* video)
if
(
SrsCodec
::
video_is_sequence_header
(
msg
->
payload
,
msg
->
size
))
{
srs_freep
(
cache_sh_video
);
cache_sh_video
=
msg
->
copy
();
srs_trace
(
"
update video sequence header success.
size=%d"
,
msg
->
header
.
payload_length
);
srs_trace
(
"
got video sh,
size=%d"
,
msg
->
header
.
payload_length
);
return
ret
;
}
...
...
@@ -1277,7 +1295,8 @@ void SrsSource::on_unpublish()
srs_freep
(
cache_sh_video
);
srs_freep
(
cache_sh_audio
);
srs_trace
(
"clear cache/metadata/sequence-headers when unpublish."
);
srs_info
(
"clear cache/metadata/sequence-headers when unpublish."
);
srs_trace
(
"cleanup when unpublish"
);
_can_publish
=
true
;
_source_id
=
-
1
;
...
...
trunk/src/core/srs_core.hpp
查看文件 @
5273509
...
...
@@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// current release version
#define VERSION_MAJOR "0"
#define VERSION_MINOR "9"
#define VERSION_REVISION "12
2
"
#define VERSION_REVISION "12
3
"
#define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION
// server info.
#define RTMP_SIG_SRS_KEY "SRS"
...
...
trunk/src/libs/srs_librtmp.cpp
查看文件 @
5273509
...
...
@@ -594,6 +594,11 @@ srs_amf0_t srs_amf0_create_strict_array()
return
SrsAmf0Any
::
strict_array
();
}
srs_amf0_t
srs_amf0_create_object
()
{
return
SrsAmf0Any
::
object
();
}
void
srs_amf0_free
(
srs_amf0_t
amf0
)
{
SrsAmf0Any
*
any
=
(
SrsAmf0Any
*
)
amf0
;
...
...
@@ -697,88 +702,130 @@ void srs_amf0_set_number(srs_amf0_t amf0, amf0_number value)
int
srs_amf0_object_property_count
(
srs_amf0_t
amf0
)
{
SrsAmf0Any
*
any
=
(
SrsAmf0Any
*
)
amf0
;
srs_assert
(
any
->
is_object
());
SrsAmf0Object
*
obj
=
(
SrsAmf0Object
*
)
amf0
;
return
obj
->
count
();
}
const
char
*
srs_amf0_object_property_name_at
(
srs_amf0_t
amf0
,
int
index
)
{
SrsAmf0Any
*
any
=
(
SrsAmf0Any
*
)
amf0
;
srs_assert
(
any
->
is_object
());
SrsAmf0Object
*
obj
=
(
SrsAmf0Object
*
)
amf0
;
return
obj
->
key_raw_at
(
index
);
}
srs_amf0_t
srs_amf0_object_property_value_at
(
srs_amf0_t
amf0
,
int
index
)
{
SrsAmf0Any
*
any
=
(
SrsAmf0Any
*
)
amf0
;
srs_assert
(
any
->
is_object
());
SrsAmf0Object
*
obj
=
(
SrsAmf0Object
*
)
amf0
;
return
(
srs_amf0_t
)
obj
->
value_at
(
index
);
}
srs_amf0_t
srs_amf0_object_property
(
srs_amf0_t
amf0
,
const
char
*
name
)
{
SrsAmf0Any
*
any
=
(
SrsAmf0Any
*
)
amf0
;
srs_assert
(
any
->
is_object
());
SrsAmf0Object
*
obj
=
(
SrsAmf0Object
*
)
amf0
;
return
(
srs_amf0_t
)
obj
->
get_property
(
name
);
}
void
srs_amf0_object_property_set
(
srs_amf0_t
amf0
,
const
char
*
name
,
srs_amf0_t
value
)
{
SrsAmf0Any
*
any
=
(
SrsAmf0Any
*
)
amf0
;
srs_assert
(
any
->
is_object
());
SrsAmf0Object
*
obj
=
(
SrsAmf0Object
*
)
amf0
;
SrsAmf0Any
*
any
=
(
SrsAmf0Any
*
)
value
;
any
=
(
SrsAmf0Any
*
)
value
;
obj
->
set
(
name
,
any
);
}
void
srs_amf0_object_clear
(
srs_amf0_t
amf0
)
{
SrsAmf0Any
*
any
=
(
SrsAmf0Any
*
)
amf0
;
srs_assert
(
any
->
is_object
());
SrsAmf0Object
*
obj
=
(
SrsAmf0Object
*
)
amf0
;
obj
->
clear
();
}
int
srs_amf0_ecma_array_property_count
(
srs_amf0_t
amf0
)
{
SrsAmf0Any
*
any
=
(
SrsAmf0Any
*
)
amf0
;
srs_assert
(
any
->
is_ecma_array
());
SrsAmf0EcmaArray
*
obj
=
(
SrsAmf0EcmaArray
*
)
amf0
;
return
obj
->
count
();
}
const
char
*
srs_amf0_ecma_array_property_name_at
(
srs_amf0_t
amf0
,
int
index
)
{
SrsAmf0Any
*
any
=
(
SrsAmf0Any
*
)
amf0
;
srs_assert
(
any
->
is_ecma_array
());
SrsAmf0EcmaArray
*
obj
=
(
SrsAmf0EcmaArray
*
)
amf0
;
return
obj
->
key_raw_at
(
index
);
}
srs_amf0_t
srs_amf0_ecma_array_property_value_at
(
srs_amf0_t
amf0
,
int
index
)
{
SrsAmf0Any
*
any
=
(
SrsAmf0Any
*
)
amf0
;
srs_assert
(
any
->
is_ecma_array
());
SrsAmf0EcmaArray
*
obj
=
(
SrsAmf0EcmaArray
*
)
amf0
;
return
(
srs_amf0_t
)
obj
->
value_at
(
index
);
}
srs_amf0_t
srs_amf0_ecma_array_property
(
srs_amf0_t
amf0
,
const
char
*
name
)
{
SrsAmf0Any
*
any
=
(
SrsAmf0Any
*
)
amf0
;
srs_assert
(
any
->
is_ecma_array
());
SrsAmf0EcmaArray
*
obj
=
(
SrsAmf0EcmaArray
*
)
amf0
;
return
(
srs_amf0_t
)
obj
->
get_property
(
name
);
}
void
srs_amf0_ecma_array_property_set
(
srs_amf0_t
amf0
,
const
char
*
name
,
srs_amf0_t
value
)
{
SrsAmf0EcmaArray
*
obj
=
(
SrsAmf0EcmaArray
*
)
amf0
;
SrsAmf0Any
*
any
=
(
SrsAmf0Any
*
)
value
;
obj
->
set
(
name
,
any
);
}
SrsAmf0Any
*
any
=
(
SrsAmf0Any
*
)
amf0
;
srs_assert
(
any
->
is_ecma_array
());
void
srs_amf0_ecma_array_clear
(
srs_amf0_t
amf0
)
{
SrsAmf0EcmaArray
*
obj
=
(
SrsAmf0EcmaArray
*
)
amf0
;
obj
->
clear
();
any
=
(
SrsAmf0Any
*
)
value
;
obj
->
set
(
name
,
any
);
}
int
srs_amf0_strict_array_property_count
(
srs_amf0_t
amf0
)
{
SrsAmf0Any
*
any
=
(
SrsAmf0Any
*
)
amf0
;
srs_assert
(
any
->
is_strict_array
());
SrsAmf0StrictArray
*
obj
=
(
SrsAmf0StrictArray
*
)
amf0
;
return
obj
->
count
();
}
srs_amf0_t
srs_amf0_strict_array_property_at
(
srs_amf0_t
amf0
,
int
index
)
{
SrsAmf0Any
*
any
=
(
SrsAmf0Any
*
)
amf0
;
srs_assert
(
any
->
is_strict_array
());
SrsAmf0StrictArray
*
obj
=
(
SrsAmf0StrictArray
*
)
amf0
;
return
(
srs_amf0_t
)
obj
->
at
(
index
);
}
void
srs_amf0_strict_array_append
(
srs_amf0_t
amf0
,
srs_amf0_t
value
)
{
SrsAmf0Any
*
any
=
(
SrsAmf0Any
*
)
amf0
;
srs_assert
(
any
->
is_strict_array
());
SrsAmf0StrictArray
*
obj
=
(
SrsAmf0StrictArray
*
)
amf0
;
SrsAmf0Any
*
any
=
(
SrsAmf0Any
*
)
value
;
any
=
(
SrsAmf0Any
*
)
value
;
obj
->
append
(
any
);
}
...
...
trunk/src/libs/srs_librtmp.hpp
查看文件 @
5273509
...
...
@@ -196,6 +196,7 @@ srs_amf0_t srs_amf0_parse(char* data, int size, int* nparsed);
srs_amf0_t
srs_amf0_create_number
(
amf0_number
value
);
srs_amf0_t
srs_amf0_create_ecma_array
();
srs_amf0_t
srs_amf0_create_strict_array
();
srs_amf0_t
srs_amf0_create_object
();
void
srs_amf0_free
(
srs_amf0_t
amf0
);
void
srs_amf0_free_bytes
(
char
*
data
);
/* size and to bytes */
...
...
@@ -221,13 +222,13 @@ const char* srs_amf0_object_property_name_at(srs_amf0_t amf0, int index);
srs_amf0_t
srs_amf0_object_property_value_at
(
srs_amf0_t
amf0
,
int
index
);
srs_amf0_t
srs_amf0_object_property
(
srs_amf0_t
amf0
,
const
char
*
name
);
void
srs_amf0_object_property_set
(
srs_amf0_t
amf0
,
const
char
*
name
,
srs_amf0_t
value
);
void
srs_amf0_object_clear
(
srs_amf0_t
amf0
);
/* ecma array value converter */
int
srs_amf0_ecma_array_property_count
(
srs_amf0_t
amf0
);
const
char
*
srs_amf0_ecma_array_property_name_at
(
srs_amf0_t
amf0
,
int
index
);
srs_amf0_t
srs_amf0_ecma_array_property_value_at
(
srs_amf0_t
amf0
,
int
index
);
srs_amf0_t
srs_amf0_ecma_array_property
(
srs_amf0_t
amf0
,
const
char
*
name
);
void
srs_amf0_ecma_array_property_set
(
srs_amf0_t
amf0
,
const
char
*
name
,
srs_amf0_t
value
);
void
srs_amf0_ecma_array_clear
(
srs_amf0_t
amf0
);
/* strict array value converter */
int
srs_amf0_strict_array_property_count
(
srs_amf0_t
amf0
);
srs_amf0_t
srs_amf0_strict_array_property_at
(
srs_amf0_t
amf0
,
int
index
);
...
...
trunk/src/rtmp/srs_protocol_amf0.cpp
查看文件 @
5273509
...
...
@@ -788,6 +788,11 @@ SrsAmf0Any* SrsAmf0Object::copy()
return
copy
;
}
void
SrsAmf0Object
::
clear
()
{
properties
->
clear
();
}
int
SrsAmf0Object
::
count
()
{
return
properties
->
count
();
...
...
trunk/src/rtmp/srs_protocol_amf0.hpp
查看文件 @
5273509
...
...
@@ -190,6 +190,7 @@ public:
virtual
SrsAmf0Any
*
copy
();
public
:
virtual
void
clear
();
virtual
int
count
();
// @remark: max index is count().
virtual
std
::
string
key_at
(
int
index
);
...
...
trunk/src/rtmp/srs_protocol_handshake.cpp
查看文件 @
5273509
...
...
@@ -1041,7 +1041,7 @@ int SrsSimpleHandshake::handshake_with_client(SrsHandshakeBytes* hs_bytes, ISrsP
return
ret
;
}
srs_trace
(
"simple handshake
with client
success."
);
srs_trace
(
"simple handshake success."
);
return
ret
;
}
...
...
@@ -1083,7 +1083,7 @@ int SrsSimpleHandshake::handshake_with_server(SrsHandshakeBytes* hs_bytes, ISrsP
}
srs_verbose
(
"simple handshake write c2 success."
);
srs_trace
(
"simple handshake
with server
success."
);
srs_trace
(
"simple handshake success."
);
return
ret
;
}
...
...
@@ -1189,7 +1189,7 @@ int SrsComplexHandshake::handshake_with_client(SrsHandshakeBytes* hs_bytes, ISrs
// never verify c2, for ffmpeg will failed.
// it's ok for flash.
srs_trace
(
"complex handshake
with client
success"
);
srs_trace
(
"complex handshake success"
);
return
ret
;
}
...
...
@@ -1269,7 +1269,7 @@ int SrsComplexHandshake::handshake_with_server(SrsHandshakeBytes* hs_bytes, ISrs
}
srs_verbose
(
"complex handshake write c2 success."
);
srs_trace
(
"complex handshake
with server
success."
);
srs_trace
(
"complex handshake success."
);
return
ret
;
}
...
...
trunk/src/rtmp/srs_protocol_rtmp.cpp
查看文件 @
5273509
...
...
@@ -947,15 +947,22 @@ int SrsRtmpServer::identify_client(int stream_id, SrsRtmpConnType& type, string&
while
(
true
)
{
SrsMessage
*
msg
=
NULL
;
if
((
ret
=
protocol
->
recv_message
(
&
msg
))
!=
ERROR_SUCCESS
)
{
if
(
!
srs_is_client_gracefully_close
(
ret
))
{
srs_error
(
"recv identify client message failed. ret=%d"
,
ret
);
}
return
ret
;
}
SrsAutoFree
(
SrsMessage
,
msg
);
SrsMessageHeader
&
h
=
msg
->
header
;
if
(
h
.
is_ackledgement
()
||
h
.
is_set_chunk_size
()
||
h
.
is_window_ackledgement_size
()
||
h
.
is_user_control_message
())
{
continue
;
}
if
(
!
msg
->
header
.
is_amf0_command
()
&&
!
msg
->
header
.
is_amf3_command
())
{
if
(
!
h
.
is_amf0_command
()
&&
!
h
.
is_amf3_command
())
{
srs_trace
(
"identify ignore messages except "
"AMF0/AMF3 command message. type=%#x"
,
msg
->
header
.
message_type
);
"AMF0/AMF3 command message. type=%#x"
,
h
.
message_type
);
continue
;
}
...
...
@@ -1335,15 +1342,22 @@ int SrsRtmpServer::identify_create_stream_client(SrsCreateStreamPacket* req, int
while
(
true
)
{
SrsMessage
*
msg
=
NULL
;
if
((
ret
=
protocol
->
recv_message
(
&
msg
))
!=
ERROR_SUCCESS
)
{
if
(
!
srs_is_client_gracefully_close
(
ret
))
{
srs_error
(
"recv identify client message failed. ret=%d"
,
ret
);
}
return
ret
;
}
SrsAutoFree
(
SrsMessage
,
msg
);
SrsMessageHeader
&
h
=
msg
->
header
;
if
(
h
.
is_ackledgement
()
||
h
.
is_set_chunk_size
()
||
h
.
is_window_ackledgement_size
()
||
h
.
is_user_control_message
())
{
continue
;
}
if
(
!
msg
->
header
.
is_amf0_command
()
&&
!
msg
->
header
.
is_amf3_command
())
{
if
(
!
h
.
is_amf0_command
()
&&
!
h
.
is_amf3_command
())
{
srs_trace
(
"identify ignore messages except "
"AMF0/AMF3 command message. type=%#x"
,
msg
->
header
.
message_type
);
"AMF0/AMF3 command message. type=%#x"
,
h
.
message_type
);
continue
;
}
...
...
@@ -1408,7 +1422,7 @@ int SrsRtmpServer::identify_play_client(SrsPlayPacket* req, SrsRtmpConnType& typ
stream_name
=
req
->
stream_name
;
duration
=
req
->
duration
;
srs_
trace
(
"identity client type=play, stream_name=%s, duration=%.2f"
,
stream_name
.
c_str
(),
duration
);
srs_
info
(
"identity client type=play, stream_name=%s, duration=%.2f"
,
stream_name
.
c_str
(),
duration
);
return
ret
;
}
...
...
trunk/src/rtmp/srs_protocol_rtmp_stack.cpp
查看文件 @
5273509
...
...
@@ -719,8 +719,10 @@ int SrsProtocol::do_decode_message(SrsMessageHeader& header, SrsStream* stream,
*
ppacket
=
packet
=
new
SrsSetChunkSizePacket
();
return
packet
->
decode
(
stream
);
}
else
{
if
(
!
header
.
is_set_peer_bandwidth
())
{
srs_trace
(
"drop unknown message, type=%d"
,
header
.
message_type
);
}
}
return
ret
;
}
...
...
@@ -1289,7 +1291,10 @@ int SrsProtocol::on_recv_message(SrsMessage* msg)
if
(
pkt
->
ackowledgement_window_size
>
0
)
{
in_ack_size
.
ack_window_size
=
pkt
->
ackowledgement_window_size
;
srs_trace
(
"set ack window size to %d"
,
pkt
->
ackowledgement_window_size
);
// @remakr, we ignore this message, for user noneed to care.
// but it's important for dev, for client/server will block if required
// ack msg not arrived.
srs_info
(
"set ack window size to %d"
,
pkt
->
ackowledgement_window_size
);
}
else
{
srs_warn
(
"ignored. set ack window size is %d"
,
pkt
->
ackowledgement_window_size
);
}
...
...
@@ -1301,7 +1306,7 @@ int SrsProtocol::on_recv_message(SrsMessage* msg)
in_chunk_size
=
pkt
->
chunk_size
;
srs_trace
(
"
set
input chunk size to %d"
,
pkt
->
chunk_size
);
srs_trace
(
"input chunk size to %d"
,
pkt
->
chunk_size
);
break
;
}
case
RTMP_MSG_UserControlMessage
:
{
...
...
@@ -1339,7 +1344,7 @@ int SrsProtocol::on_send_message(SrsMessage* msg, SrsPacket* packet)
out_chunk_size
=
pkt
->
chunk_size
;
srs_trace
(
"
set outp
ut chunk size to %d"
,
pkt
->
chunk_size
);
srs_trace
(
"
o
ut chunk size to %d"
,
pkt
->
chunk_size
);
break
;
}
case
RTMP_MSG_AMF0CommandMessage
:
...
...
@@ -1473,6 +1478,11 @@ bool SrsMessageHeader::is_user_control_message()
return
message_type
==
RTMP_MSG_UserControlMessage
;
}
bool
SrsMessageHeader
::
is_set_peer_bandwidth
()
{
return
message_type
==
RTMP_MSG_SetPeerBandwidth
;
}
bool
SrsMessageHeader
::
is_aggregate
()
{
return
message_type
==
RTMP_MSG_AggregateMessage
;
...
...
trunk/src/rtmp/srs_protocol_rtmp_stack.hpp
查看文件 @
5273509
...
...
@@ -278,6 +278,7 @@ public:
bool
is_ackledgement
();
bool
is_set_chunk_size
();
bool
is_user_control_message
();
bool
is_set_peer_bandwidth
();
bool
is_aggregate
();
void
initialize_amf0_script
(
int
size
,
int
stream
);
...
...
请
注册
或
登录
后发表评论