diff --git a/trunk/research/librtmp/srs_flv_injecter.c b/trunk/research/librtmp/srs_flv_injecter.c index 9779081d6..3be014670 100644 --- a/trunk/research/librtmp/srs_flv_injecter.c +++ b/trunk/research/librtmp/srs_flv_injecter.c @@ -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); } - 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); } - 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); } } diff --git a/trunk/src/app/srs_app_edge.cpp b/trunk/src/app/srs_app_edge.cpp index aa54b4cd6..3350ee9de 100644 --- a/trunk/src/app/srs_app_edge.cpp +++ b/trunk/src/app/srs_app_edge.cpp @@ -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) { - srs_error("ingest recv origin server message failed. ret=%d", ret); + 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); @@ -286,11 +290,8 @@ int SrsEdgeIngester::connect_server() server = server.substr(0, pos); port = ::atoi(s_port.c_str()); } - - // 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); + // open socket. // 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; } diff --git a/trunk/src/app/srs_app_rtmp_conn.cpp b/trunk/src/app/srs_app_rtmp_conn.cpp index b4c9ddb94..dfab4d6fd 100644 --- a/trunk/src/app/srs_app_rtmp_conn.cpp +++ b/trunk/src/app/srs_app_rtmp_conn.cpp @@ -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) { - srs_error("identify client failed. ret=%d", ret); + 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. diff --git a/trunk/src/app/srs_app_source.cpp b/trunk/src/app/srs_app_source.cpp index 7b685f093..ebab9b77f 100644 --- a/trunk/src/app/srs_app_source.cpp +++ b/trunk/src/app/srs_app_source.cpp @@ -23,6 +23,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include +#include #include using namespace std; @@ -850,11 +851,28 @@ int SrsSource::on_meta_data(SrsMessage* msg, SrsOnMetaDataPacket* metadata) return ret; } #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; diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index 20bdac12d..dd505c78f 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -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 "122" +#define VERSION_REVISION "123" #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION // server info. #define RTMP_SIG_SRS_KEY "SRS" diff --git a/trunk/src/libs/srs_librtmp.cpp b/trunk/src/libs/srs_librtmp.cpp index f1d2d5451..d9c8bef99 100644 --- a/trunk/src/libs/srs_librtmp.cpp +++ b/trunk/src/libs/srs_librtmp.cpp @@ -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); } diff --git a/trunk/src/libs/srs_librtmp.hpp b/trunk/src/libs/srs_librtmp.hpp index c236ea710..2e7d1d13b 100644 --- a/trunk/src/libs/srs_librtmp.hpp +++ b/trunk/src/libs/srs_librtmp.hpp @@ -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); diff --git a/trunk/src/rtmp/srs_protocol_amf0.cpp b/trunk/src/rtmp/srs_protocol_amf0.cpp index 00c5bd22e..b5c6ab8fd 100644 --- a/trunk/src/rtmp/srs_protocol_amf0.cpp +++ b/trunk/src/rtmp/srs_protocol_amf0.cpp @@ -788,6 +788,11 @@ SrsAmf0Any* SrsAmf0Object::copy() return copy; } +void SrsAmf0Object::clear() +{ + properties->clear(); +} + int SrsAmf0Object::count() { return properties->count(); diff --git a/trunk/src/rtmp/srs_protocol_amf0.hpp b/trunk/src/rtmp/srs_protocol_amf0.hpp index 0b751dc9a..549eb174a 100644 --- a/trunk/src/rtmp/srs_protocol_amf0.hpp +++ b/trunk/src/rtmp/srs_protocol_amf0.hpp @@ -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); diff --git a/trunk/src/rtmp/srs_protocol_handshake.cpp b/trunk/src/rtmp/srs_protocol_handshake.cpp index e13d7545c..2098ff0ce 100644 --- a/trunk/src/rtmp/srs_protocol_handshake.cpp +++ b/trunk/src/rtmp/srs_protocol_handshake.cpp @@ -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; } diff --git a/trunk/src/rtmp/srs_protocol_rtmp.cpp b/trunk/src/rtmp/srs_protocol_rtmp.cpp index d06ac9c63..29dfdc181 100644 --- a/trunk/src/rtmp/srs_protocol_rtmp.cpp +++ b/trunk/src/rtmp/srs_protocol_rtmp.cpp @@ -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) { - srs_error("recv identify client message failed. ret=%d", ret); + if (!srs_is_client_gracefully_close(ret)) { + srs_error("recv identify client message failed. ret=%d", ret); + } return ret; } SrsAutoFree(SrsMessage, msg); - - if (!msg->header.is_amf0_command() && !msg->header.is_amf3_command()) { + 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 (!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) { - srs_error("recv identify client message failed. ret=%d", ret); + if (!srs_is_client_gracefully_close(ret)) { + srs_error("recv identify client message failed. ret=%d", ret); + } return ret; } SrsAutoFree(SrsMessage, msg); - - if (!msg->header.is_amf0_command() && !msg->header.is_amf3_command()) { + 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 (!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; } diff --git a/trunk/src/rtmp/srs_protocol_rtmp_stack.cpp b/trunk/src/rtmp/srs_protocol_rtmp_stack.cpp index 786a32ade..dbbc7a8cd 100644 --- a/trunk/src/rtmp/srs_protocol_rtmp_stack.cpp +++ b/trunk/src/rtmp/srs_protocol_rtmp_stack.cpp @@ -719,7 +719,9 @@ int SrsProtocol::do_decode_message(SrsMessageHeader& header, SrsStream* stream, *ppacket = packet = new SrsSetChunkSizePacket(); return packet->decode(stream); } else { - srs_trace("drop unknown message, type=%d", header.message_type); + 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 output chunk size to %d", pkt->chunk_size); + srs_trace("out 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; diff --git a/trunk/src/rtmp/srs_protocol_rtmp_stack.hpp b/trunk/src/rtmp/srs_protocol_rtmp_stack.hpp index d63ba0d59..7222aebde 100644 --- a/trunk/src/rtmp/srs_protocol_rtmp_stack.hpp +++ b/trunk/src/rtmp/srs_protocol_rtmp_stack.hpp @@ -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);