refine log, to 0.9.123

pull/133/head
winlin 11 years ago
parent 7ec202ee41
commit 5273509554

@ -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);
}
}

@ -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;
}

@ -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.

@ -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;
@ -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;

@ -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"

@ -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);
}

@ -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);

@ -788,6 +788,11 @@ SrsAmf0Any* SrsAmf0Object::copy()
return copy;
}
void SrsAmf0Object::clear()
{
properties->clear();
}
int SrsAmf0Object::count()
{
return properties->count();

@ -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);

@ -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;
}

@ -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;
}

@ -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;

@ -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);

Loading…
Cancel
Save