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
2013-10-20 15:59:26 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
57dd58d557547b1b1dee2150da05c4a170c19f12
57dd58d5
1 parent
2abfcee1
send set peer bandwidth packet.
隐藏空白字符变更
内嵌
并排对比
正在显示
9 个修改的文件
包含
155 行增加
和
53 行删除
trunk/src/core/srs_core_amf0.cpp
trunk/src/core/srs_core_client.cpp
trunk/src/core/srs_core_protocol.cpp
trunk/src/core/srs_core_protocol.hpp
trunk/src/core/srs_core_rtmp.cpp
trunk/src/core/srs_core_rtmp.hpp
trunk/src/core/srs_core_stream.cpp
trunk/src/core/srs_core_stream.hpp
trunk/src/main/srs_main_server.cpp
trunk/src/core/srs_core_amf0.cpp
查看文件 @
57dd58d
...
...
@@ -225,7 +225,7 @@ int srs_amf0_read_string(SrsStream* stream, std::string& value)
return
ret
;
}
char
marker
=
stream
->
read_
char
();
char
marker
=
stream
->
read_
1bytes
();
if
(
marker
!=
RTMP_AMF0_String
)
{
ret
=
ERROR_RTMP_AMF0_DECODE
;
srs_error
(
"amf0 check string marker failed. "
...
...
@@ -248,7 +248,7 @@ int srs_amf0_read_boolean(SrsStream* stream, bool& value)
return
ret
;
}
char
marker
=
stream
->
read_
char
();
char
marker
=
stream
->
read_
1bytes
();
if
(
marker
!=
RTMP_AMF0_Boolean
)
{
ret
=
ERROR_RTMP_AMF0_DECODE
;
srs_error
(
"amf0 check bool marker failed. "
...
...
@@ -264,7 +264,7 @@ int srs_amf0_read_boolean(SrsStream* stream, bool& value)
return
ret
;
}
if
(
stream
->
read_
char
()
==
0
)
{
if
(
stream
->
read_
1bytes
()
==
0
)
{
value
=
false
;
}
else
{
value
=
true
;
...
...
@@ -286,7 +286,7 @@ int srs_amf0_read_number(SrsStream* stream, double& value)
return
ret
;
}
char
marker
=
stream
->
read_
char
();
char
marker
=
stream
->
read_
1bytes
();
if
(
marker
!=
RTMP_AMF0_Number
)
{
ret
=
ERROR_RTMP_AMF0_DECODE
;
srs_error
(
"amf0 check number marker failed. "
...
...
@@ -321,7 +321,7 @@ int srs_amf0_read_any(SrsStream* stream, SrsAmf0Any*& value)
return
ret
;
}
char
marker
=
stream
->
read_
char
();
char
marker
=
stream
->
read_
1bytes
();
srs_verbose
(
"amf0 any marker success"
);
// backward the 1byte marker.
...
...
@@ -393,7 +393,7 @@ int srs_amf0_read_object_eof(SrsStream* stream, SrsAmf0ObjectEOF*& value)
return
ret
;
}
char
marker
=
stream
->
read_
char
();
char
marker
=
stream
->
read_
1bytes
();
if
(
marker
!=
RTMP_AMF0_ObjectEnd
)
{
ret
=
ERROR_RTMP_AMF0_DECODE
;
srs_error
(
"amf0 check object eof marker failed. "
...
...
@@ -420,7 +420,7 @@ int srs_amf0_read_object(SrsStream* stream, SrsAmf0Object*& value)
return
ret
;
}
char
marker
=
stream
->
read_
char
();
char
marker
=
stream
->
read_
1bytes
();
if
(
marker
!=
RTMP_AMF0_Object
)
{
ret
=
ERROR_RTMP_AMF0_DECODE
;
srs_error
(
"amf0 check object marker failed. "
...
...
trunk/src/core/srs_core_client.cpp
查看文件 @
57dd58d
...
...
@@ -86,6 +86,12 @@ int SrsClient::do_cycle()
return
ret
;
}
srs_verbose
(
"set window acknowledgement size success"
);
if
((
ret
=
rtmp
->
set_peer_bandwidth
(
2.5
*
1000
*
1000
,
2
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"set peer bandwidth failed. ret=%d"
,
ret
);
return
ret
;
}
srs_verbose
(
"set peer bandwidth success"
);
return
ret
;
}
...
...
trunk/src/core/srs_core_protocol.cpp
查看文件 @
57dd58d
...
...
@@ -923,9 +923,16 @@ SrsPacket::~SrsPacket()
{
}
int
SrsPacket
::
decode
(
SrsStream
*
/*stream*/
)
int
SrsPacket
::
decode
(
SrsStream
*
stream
)
{
int
ret
=
ERROR_SUCCESS
;
srs_assert
(
stream
!=
NULL
);
ret
=
ERROR_SYSTEM_PACKET_INVALID
;
srs_error
(
"current packet is not support to decode. "
"paket=%s, ret=%d"
,
get_class_name
(),
ret
);
return
ret
;
}
...
...
@@ -988,7 +995,7 @@ int SrsPacket::encode_packet(SrsStream* stream)
srs_assert
(
stream
!=
NULL
);
ret
=
ERROR_SYSTEM_PACKET_INVALID
;
srs_error
(
"current packet is not support to
sendout
. "
srs_error
(
"current packet is not support to
encode
. "
"paket=%s, ret=%d"
,
get_class_name
(),
ret
);
return
ret
;
...
...
@@ -1008,10 +1015,6 @@ SrsConnectAppPacket::~SrsConnectAppPacket()
int
SrsConnectAppPacket
::
decode
(
SrsStream
*
stream
)
{
int
ret
=
ERROR_SUCCESS
;
if
((
ret
=
super
::
decode
(
stream
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
if
((
ret
=
srs_amf0_read_string
(
stream
,
command_name
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"amf0 decode connect command_name failed. ret=%d"
,
ret
);
...
...
@@ -1059,26 +1062,6 @@ SrsSetWindowAckSizePacket::~SrsSetWindowAckSizePacket()
{
}
int
SrsSetWindowAckSizePacket
::
decode
(
SrsStream
*
stream
)
{
int
ret
=
ERROR_SUCCESS
;
if
((
ret
=
super
::
decode
(
stream
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
if
(
!
stream
->
require
(
4
))
{
ret
=
ERROR_RTMP_MESSAGE_DECODE
;
srs_error
(
"set window ack size failed. ret=%d"
,
ret
);
return
ret
;
}
ackowledgement_window_size
=
stream
->
read_4bytes
();
srs_info
(
"decode window ack size success. ack_size=%d"
,
ackowledgement_window_size
);
return
ret
;
}
int
SrsSetWindowAckSizePacket
::
get_perfer_cid
()
{
return
RTMP_CID_ProtocolControl
;
...
...
@@ -1112,3 +1095,47 @@ int SrsSetWindowAckSizePacket::encode_packet(SrsStream* stream)
return
ret
;
}
SrsSetPeerBandwidthPacket
::
SrsSetPeerBandwidthPacket
()
{
bandwidth
=
0
;
type
=
2
;
}
SrsSetPeerBandwidthPacket
::~
SrsSetPeerBandwidthPacket
()
{
}
int
SrsSetPeerBandwidthPacket
::
get_perfer_cid
()
{
return
RTMP_CID_ProtocolControl
;
}
int
SrsSetPeerBandwidthPacket
::
get_message_type
()
{
return
RTMP_MSG_SetPeerBandwidth
;
}
int
SrsSetPeerBandwidthPacket
::
get_size
()
{
return
5
;
}
int
SrsSetPeerBandwidthPacket
::
encode_packet
(
SrsStream
*
stream
)
{
int
ret
=
ERROR_SUCCESS
;
if
(
!
stream
->
require
(
5
))
{
ret
=
ERROR_RTMP_MESSAGE_ENCODE
;
srs_error
(
"encode set bandwidth packet failed. ret=%d"
,
ret
);
return
ret
;
}
stream
->
write_4bytes
(
bandwidth
);
stream
->
write_1bytes
(
type
);
srs_verbose
(
"encode set bandwidth packet "
"success. bandwidth=%d, type=%d"
,
bandwidth
,
type
);
return
ret
;
}
...
...
trunk/src/core/srs_core_protocol.hpp
查看文件 @
57dd58d
...
...
@@ -256,10 +256,22 @@ public:
*/
class
SrsPacket
{
protected
:
/**
* subpacket must override to provide the right class name.
*/
virtual
const
char
*
get_class_name
()
{
return
CLASS_NAME_STRING
(
SrsPacket
);
}
public
:
SrsPacket
();
virtual
~
SrsPacket
();
public
:
/**
* subpacket must override to decode packet from stream.
* @remark never invoke the super.decode, it always failed.
*/
virtual
int
decode
(
SrsStream
*
stream
);
public
:
virtual
int
get_perfer_cid
();
...
...
@@ -283,16 +295,9 @@ protected:
virtual
int
get_size
();
/**
* subpacket can override to encode the payload to stream.
* @remark never invoke the super.encode_packet, it always failed.
*/
virtual
int
encode_packet
(
SrsStream
*
stream
);
protected
:
/**
* subpacket must override to provide the right class name.
*/
virtual
const
char
*
get_class_name
()
{
return
CLASS_NAME_STRING
(
SrsPacket
);
}
};
/**
...
...
@@ -304,6 +309,11 @@ class SrsConnectAppPacket : public SrsPacket
{
private
:
typedef
SrsPacket
super
;
protected
:
virtual
const
char
*
get_class_name
()
{
return
CLASS_NAME_STRING
(
SrsConnectAppPacket
);
}
public
:
std
::
string
command_name
;
double
transaction_id
;
...
...
@@ -313,11 +323,6 @@ public:
virtual
~
SrsConnectAppPacket
();
public
:
virtual
int
decode
(
SrsStream
*
stream
);
protected
:
virtual
const
char
*
get_class_name
()
{
return
CLASS_NAME_STRING
(
SrsConnectAppPacket
);
}
};
/**
...
...
@@ -329,25 +334,52 @@ class SrsSetWindowAckSizePacket : public SrsPacket
{
private
:
typedef
SrsPacket
super
;
protected
:
virtual
const
char
*
get_class_name
()
{
return
CLASS_NAME_STRING
(
SrsSetWindowAckSizePacket
);
}
public
:
int32_t
ackowledgement_window_size
;
public
:
SrsSetWindowAckSizePacket
();
virtual
~
SrsSetWindowAckSizePacket
();
public
:
virtual
int
decode
(
SrsStream
*
stream
);
public
:
virtual
int
get_perfer_cid
();
public
:
virtual
int
get_message_type
();
protected
:
virtual
int
get_size
();
virtual
int
encode_packet
(
SrsStream
*
stream
);
};
/**
* 5.6. Set Peer Bandwidth (6)
* The client or the server sends this message to update the output
* bandwidth of the peer.
*/
class
SrsSetPeerBandwidthPacket
:
public
SrsPacket
{
private
:
typedef
SrsPacket
super
;
protected
:
virtual
const
char
*
get_class_name
()
{
return
CLASS_NAME_STRING
(
SrsSet
WindowAckSize
Packet
);
return
CLASS_NAME_STRING
(
SrsSet
PeerBandwidth
Packet
);
}
public
:
int32_t
bandwidth
;
int8_t
type
;
public
:
SrsSetPeerBandwidthPacket
();
virtual
~
SrsSetPeerBandwidthPacket
();
public
:
virtual
int
get_perfer_cid
();
public
:
virtual
int
get_message_type
();
protected
:
virtual
int
get_size
();
virtual
int
encode_packet
(
SrsStream
*
stream
);
};
/**
...
...
trunk/src/core/srs_core_rtmp.cpp
查看文件 @
57dd58d
...
...
@@ -184,3 +184,24 @@ int SrsRtmp::set_window_ack_size(int ack_size)
return
ret
;
}
int
SrsRtmp
::
set_peer_bandwidth
(
int
bandwidth
,
int
type
)
{
int
ret
=
ERROR_SUCCESS
;
SrsMessage
*
msg
=
new
SrsMessage
();
SrsSetPeerBandwidthPacket
*
pkt
=
new
SrsSetPeerBandwidthPacket
();
pkt
->
bandwidth
=
bandwidth
;
pkt
->
type
=
type
;
msg
->
set_packet
(
pkt
);
if
((
ret
=
protocol
->
send_message
(
msg
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"send set bandwidth message failed. ret=%d"
,
ret
);
return
ret
;
}
srs_info
(
"send set bandwidth message "
"success. bandwidth=%d, type=%d"
,
bandwidth
,
type
);
return
ret
;
}
...
...
trunk/src/core/srs_core_rtmp.hpp
查看文件 @
57dd58d
...
...
@@ -74,6 +74,11 @@ public:
virtual
int
handshake
();
virtual
int
connect_app
(
SrsRequest
*
req
);
virtual
int
set_window_ack_size
(
int
ack_size
);
/**
* @type: The sender can mark this message hard (0), soft (1), or dynamic (2)
* using the Limit type field.
*/
virtual
int
set_peer_bandwidth
(
int
bandwidth
,
int
type
);
};
#endif
\ No newline at end of file
...
...
trunk/src/core/srs_core_stream.cpp
查看文件 @
57dd58d
...
...
@@ -78,11 +78,11 @@ void SrsStream::skip(int size)
p
+=
size
;
}
char
SrsStream
::
read_char
()
int8_t
SrsStream
::
read_1bytes
()
{
srs_assert
(
require
(
1
));
return
*
p
++
;
return
(
int8_t
)
*
p
++
;
}
int16_t
SrsStream
::
read_2bytes
()
...
...
@@ -152,3 +152,10 @@ void SrsStream::write_4bytes(int32_t value)
*
p
++
=
pp
[
0
];
}
void
SrsStream
::
write_1bytes
(
int8_t
value
)
{
srs_assert
(
require
(
1
));
*
p
++
=
value
;
}
...
...
trunk/src/core/srs_core_stream.hpp
查看文件 @
57dd58d
...
...
@@ -74,7 +74,7 @@ public:
/**
* get 1bytes char from stream.
*/
virtual
char
read_char
();
virtual
int8_t
read_1bytes
();
/**
* get 2bytes int from stream.
*/
...
...
@@ -96,6 +96,10 @@ public:
* write 4bytes int to stream.
*/
virtual
void
write_4bytes
(
int32_t
value
);
/**
* write 1bytes char to stream.
*/
virtual
void
write_1bytes
(
int8_t
value
);
};
#endif
\ No newline at end of file
...
...
trunk/src/main/srs_main_server.cpp
查看文件 @
57dd58d
...
...
@@ -34,7 +34,7 @@ int main(int /*argc*/, char** /*argv*/){
return
ret
;
}
if
((
ret
=
server
.
listen
(
1935
0
))
!=
ERROR_SUCCESS
)
{
if
((
ret
=
server
.
listen
(
1935
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
...
...
请
注册
或
登录
后发表评论