mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
refine RTMP protocol completed, to 0.9.81
This commit is contained in:
parent
be4c182d11
commit
80ddddf823
20 changed files with 343 additions and 353 deletions
|
@ -372,24 +372,24 @@ int SrsRtmpClient::get_send_kbps()
|
|||
return protocol->get_send_kbps();
|
||||
}
|
||||
|
||||
int SrsRtmpClient::__recv_message(__SrsMessage** pmsg)
|
||||
int SrsRtmpClient::recv_message(SrsMessage** pmsg)
|
||||
{
|
||||
return protocol->__recv_message(pmsg);
|
||||
return protocol->recv_message(pmsg);
|
||||
}
|
||||
|
||||
int SrsRtmpClient::__decode_message(__SrsMessage* msg, SrsPacket** ppacket)
|
||||
int SrsRtmpClient::decode_message(SrsMessage* msg, SrsPacket** ppacket)
|
||||
{
|
||||
return protocol->__decode_message(msg, ppacket);
|
||||
return protocol->decode_message(msg, ppacket);
|
||||
}
|
||||
|
||||
int SrsRtmpClient::__send_and_free_message(__SrsMessage* msg)
|
||||
int SrsRtmpClient::send_and_free_message(SrsMessage* msg)
|
||||
{
|
||||
return protocol->__send_and_free_message(msg);
|
||||
return protocol->send_and_free_message(msg);
|
||||
}
|
||||
|
||||
int SrsRtmpClient::__send_and_free_packet(SrsPacket* packet, int stream_id)
|
||||
int SrsRtmpClient::send_and_free_packet(SrsPacket* packet, int stream_id)
|
||||
{
|
||||
return protocol->__send_and_free_packet(packet, stream_id);
|
||||
return protocol->send_and_free_packet(packet, stream_id);
|
||||
}
|
||||
|
||||
int SrsRtmpClient::handshake()
|
||||
|
@ -466,7 +466,7 @@ int SrsRtmpClient::connect_app(string app, string tc_url)
|
|||
pkt->command_object->set("pageUrl", SrsAmf0Any::str());
|
||||
pkt->command_object->set("objectEncoding", SrsAmf0Any::number(0));
|
||||
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
@ -475,19 +475,19 @@ int SrsRtmpClient::connect_app(string app, string tc_url)
|
|||
if (true) {
|
||||
SrsSetWindowAckSizePacket* pkt = new SrsSetWindowAckSizePacket();
|
||||
pkt->ackowledgement_window_size = 2500000;
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
// expect connect _result
|
||||
__SrsMessage* msg = NULL;
|
||||
SrsMessage* msg = NULL;
|
||||
SrsConnectAppResPacket* pkt = NULL;
|
||||
if ((ret = __srs_rtmp_expect_message<SrsConnectAppResPacket>(protocol, &msg, &pkt)) != ERROR_SUCCESS) {
|
||||
srs_error("expect connect app response message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
SrsAutoFree(__SrsMessage, msg, false);
|
||||
SrsAutoFree(SrsMessage, msg, false);
|
||||
SrsAutoFree(SrsConnectAppResPacket, pkt, false);
|
||||
srs_info("get connect app response message");
|
||||
|
||||
|
@ -501,20 +501,20 @@ int SrsRtmpClient::create_stream(int& stream_id)
|
|||
// CreateStream
|
||||
if (true) {
|
||||
SrsCreateStreamPacket* pkt = new SrsCreateStreamPacket();
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
// CreateStream _result.
|
||||
if (true) {
|
||||
__SrsMessage* msg = NULL;
|
||||
SrsMessage* msg = NULL;
|
||||
SrsCreateStreamResPacket* pkt = NULL;
|
||||
if ((ret = __srs_rtmp_expect_message<SrsCreateStreamResPacket>(protocol, &msg, &pkt)) != ERROR_SUCCESS) {
|
||||
srs_error("expect create stream response message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
SrsAutoFree(__SrsMessage, msg, false);
|
||||
SrsAutoFree(SrsMessage, msg, false);
|
||||
SrsAutoFree(SrsCreateStreamResPacket, pkt, false);
|
||||
srs_info("get create stream response message");
|
||||
|
||||
|
@ -532,7 +532,7 @@ int SrsRtmpClient::play(string stream, int stream_id)
|
|||
if (true) {
|
||||
SrsPlayPacket* pkt = new SrsPlayPacket();
|
||||
pkt->stream_name = stream;
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
srs_error("send play stream failed. "
|
||||
"stream=%s, stream_id=%d, ret=%d",
|
||||
stream.c_str(), stream_id, ret);
|
||||
|
@ -549,7 +549,7 @@ int SrsRtmpClient::play(string stream, int stream_id)
|
|||
pkt->event_data = stream_id;
|
||||
pkt->extra_data = buffer_length_ms;
|
||||
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
srs_error("send set buffer length failed. "
|
||||
"stream=%s, stream_id=%d, bufferLength=%d, ret=%d",
|
||||
stream.c_str(), stream_id, buffer_length_ms, ret);
|
||||
|
@ -561,7 +561,7 @@ int SrsRtmpClient::play(string stream, int stream_id)
|
|||
if (true) {
|
||||
SrsSetChunkSizePacket* pkt = new SrsSetChunkSizePacket();
|
||||
pkt->chunk_size = SRS_CONF_DEFAULT_CHUNK_SIZE;
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
srs_error("send set chunk size failed. "
|
||||
"stream=%s, chunk_size=%d, ret=%d",
|
||||
stream.c_str(), SRS_CONF_DEFAULT_CHUNK_SIZE, ret);
|
||||
|
@ -580,7 +580,7 @@ int SrsRtmpClient::publish(string stream, int stream_id)
|
|||
if (true) {
|
||||
SrsSetChunkSizePacket* pkt = new SrsSetChunkSizePacket();
|
||||
pkt->chunk_size = SRS_CONF_DEFAULT_CHUNK_SIZE;
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
srs_error("send set chunk size failed. "
|
||||
"stream=%s, chunk_size=%d, ret=%d",
|
||||
stream.c_str(), SRS_CONF_DEFAULT_CHUNK_SIZE, ret);
|
||||
|
@ -592,7 +592,7 @@ int SrsRtmpClient::publish(string stream, int stream_id)
|
|||
if (true) {
|
||||
SrsPublishPacket* pkt = new SrsPublishPacket();
|
||||
pkt->stream_name = stream;
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
srs_error("send publish message failed. "
|
||||
"stream=%s, stream_id=%d, ret=%d",
|
||||
stream.c_str(), stream_id, ret);
|
||||
|
@ -612,7 +612,7 @@ int SrsRtmpClient::fmle_publish(string stream, int& stream_id)
|
|||
// SrsFMLEStartPacket
|
||||
if (true) {
|
||||
SrsFMLEStartPacket* pkt = SrsFMLEStartPacket::create_release_stream(stream);
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
srs_error("send FMLE publish "
|
||||
"release stream failed. stream=%s, ret=%d", stream.c_str(), ret);
|
||||
return ret;
|
||||
|
@ -622,7 +622,7 @@ int SrsRtmpClient::fmle_publish(string stream, int& stream_id)
|
|||
// FCPublish
|
||||
if (true) {
|
||||
SrsFMLEStartPacket* pkt = SrsFMLEStartPacket::create_FC_publish(stream);
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
srs_error("send FMLE publish "
|
||||
"FCPublish failed. stream=%s, ret=%d", stream.c_str(), ret);
|
||||
return ret;
|
||||
|
@ -633,7 +633,7 @@ int SrsRtmpClient::fmle_publish(string stream, int& stream_id)
|
|||
if (true) {
|
||||
SrsCreateStreamPacket* pkt = new SrsCreateStreamPacket();
|
||||
pkt->transaction_id = 4;
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
srs_error("send FMLE publish "
|
||||
"createStream failed. stream=%s, ret=%d", stream.c_str(), ret);
|
||||
return ret;
|
||||
|
@ -642,13 +642,13 @@ int SrsRtmpClient::fmle_publish(string stream, int& stream_id)
|
|||
|
||||
// expect result of CreateStream
|
||||
if (true) {
|
||||
__SrsMessage* msg = NULL;
|
||||
SrsMessage* msg = NULL;
|
||||
SrsCreateStreamResPacket* pkt = NULL;
|
||||
if ((ret = __srs_rtmp_expect_message<SrsCreateStreamResPacket>(protocol, &msg, &pkt)) != ERROR_SUCCESS) {
|
||||
srs_error("expect create stream response message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
SrsAutoFree(__SrsMessage, msg, false);
|
||||
SrsAutoFree(SrsMessage, msg, false);
|
||||
SrsAutoFree(SrsCreateStreamResPacket, pkt, false);
|
||||
srs_info("get create stream response message");
|
||||
|
||||
|
@ -659,7 +659,7 @@ int SrsRtmpClient::fmle_publish(string stream, int& stream_id)
|
|||
if (true) {
|
||||
SrsPublishPacket* pkt = new SrsPublishPacket();
|
||||
pkt->stream_name = stream;
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
srs_error("send FMLE publish publish failed. "
|
||||
"stream=%s, stream_id=%d, ret=%d", stream.c_str(), stream_id, ret);
|
||||
return ret;
|
||||
|
@ -727,24 +727,24 @@ int SrsRtmpServer::get_send_kbps()
|
|||
return protocol->get_send_kbps();
|
||||
}
|
||||
|
||||
int SrsRtmpServer::__recv_message(__SrsMessage** pmsg)
|
||||
int SrsRtmpServer::recv_message(SrsMessage** pmsg)
|
||||
{
|
||||
return protocol->__recv_message(pmsg);
|
||||
return protocol->recv_message(pmsg);
|
||||
}
|
||||
|
||||
int SrsRtmpServer::__decode_message(__SrsMessage* msg, SrsPacket** ppacket)
|
||||
int SrsRtmpServer::decode_message(SrsMessage* msg, SrsPacket** ppacket)
|
||||
{
|
||||
return protocol->__decode_message(msg, ppacket);
|
||||
return protocol->decode_message(msg, ppacket);
|
||||
}
|
||||
|
||||
int SrsRtmpServer::__send_and_free_message(__SrsMessage* msg)
|
||||
int SrsRtmpServer::send_and_free_message(SrsMessage* msg)
|
||||
{
|
||||
return protocol->__send_and_free_message(msg);
|
||||
return protocol->send_and_free_message(msg);
|
||||
}
|
||||
|
||||
int SrsRtmpServer::__send_and_free_packet(SrsPacket* packet, int stream_id)
|
||||
int SrsRtmpServer::send_and_free_packet(SrsPacket* packet, int stream_id)
|
||||
{
|
||||
return protocol->__send_and_free_packet(packet, stream_id);
|
||||
return protocol->send_and_free_packet(packet, stream_id);
|
||||
}
|
||||
|
||||
int SrsRtmpServer::handshake()
|
||||
|
@ -773,13 +773,13 @@ int SrsRtmpServer::connect_app(SrsRequest* req)
|
|||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
__SrsMessage* msg = NULL;
|
||||
SrsMessage* msg = NULL;
|
||||
SrsConnectAppPacket* pkt = NULL;
|
||||
if ((ret = __srs_rtmp_expect_message<SrsConnectAppPacket>(protocol, &msg, &pkt)) != ERROR_SUCCESS) {
|
||||
srs_error("expect connect app message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
SrsAutoFree(__SrsMessage, msg, false);
|
||||
SrsAutoFree(SrsMessage, msg, false);
|
||||
SrsAutoFree(SrsConnectAppPacket, pkt, false);
|
||||
srs_info("get connect app message");
|
||||
|
||||
|
@ -815,7 +815,7 @@ int SrsRtmpServer::set_window_ack_size(int ack_size)
|
|||
|
||||
SrsSetWindowAckSizePacket* pkt = new SrsSetWindowAckSizePacket();
|
||||
pkt->ackowledgement_window_size = ack_size;
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
srs_error("send ack size message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -831,7 +831,7 @@ int SrsRtmpServer::set_peer_bandwidth(int bandwidth, int type)
|
|||
SrsSetPeerBandwidthPacket* pkt = new SrsSetPeerBandwidthPacket();
|
||||
pkt->bandwidth = bandwidth;
|
||||
pkt->type = type;
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
srs_error("send set bandwidth message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -874,7 +874,7 @@ int SrsRtmpServer::response_connect_app(SrsRequest *req, const char* server_ip)
|
|||
data->set("srs_server_ip", SrsAmf0Any::str(server_ip));
|
||||
}
|
||||
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
srs_error("send connect app response message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -894,7 +894,7 @@ void SrsRtmpServer::response_connect_reject(SrsRequest *req, const char* desc)
|
|||
pkt->props->set(StatusDescription, SrsAmf0Any::str(desc));
|
||||
//pkt->props->set("objectEncoding", SrsAmf0Any::number(req->objectEncoding));
|
||||
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
srs_error("send connect app response rejected message failed. ret=%d", ret);
|
||||
return;
|
||||
}
|
||||
|
@ -908,7 +908,7 @@ int SrsRtmpServer::on_bw_done()
|
|||
int ret = ERROR_SUCCESS;
|
||||
|
||||
SrsOnBWDonePacket* pkt = new SrsOnBWDonePacket();
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
srs_error("send onBWDone message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -923,13 +923,13 @@ int SrsRtmpServer::identify_client(int stream_id, SrsRtmpConnType& type, string&
|
|||
int ret = ERROR_SUCCESS;
|
||||
|
||||
while (true) {
|
||||
__SrsMessage* msg = NULL;
|
||||
if ((ret = protocol->__recv_message(&msg)) != ERROR_SUCCESS) {
|
||||
SrsMessage* msg = NULL;
|
||||
if ((ret = protocol->recv_message(&msg)) != ERROR_SUCCESS) {
|
||||
srs_error("recv identify client message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
SrsAutoFree(__SrsMessage, msg, false);
|
||||
SrsAutoFree(SrsMessage, msg, false);
|
||||
|
||||
if (!msg->header.is_amf0_command() && !msg->header.is_amf3_command()) {
|
||||
srs_trace("identify ignore messages except "
|
||||
|
@ -938,7 +938,7 @@ int SrsRtmpServer::identify_client(int stream_id, SrsRtmpConnType& type, string&
|
|||
}
|
||||
|
||||
SrsPacket* pkt = NULL;
|
||||
if ((ret = protocol->__decode_message(msg, &pkt)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->decode_message(msg, &pkt)) != ERROR_SUCCESS) {
|
||||
srs_error("identify decode message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -970,7 +970,7 @@ int SrsRtmpServer::set_chunk_size(int chunk_size)
|
|||
|
||||
SrsSetChunkSizePacket* pkt = new SrsSetChunkSizePacket();
|
||||
pkt->chunk_size = chunk_size;
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
srs_error("send set chunk size message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -988,7 +988,7 @@ int SrsRtmpServer::start_play(int stream_id)
|
|||
SrsUserControlPacket* pkt = new SrsUserControlPacket();
|
||||
pkt->event_type = SrcPCUCStreamBegin;
|
||||
pkt->event_data = stream_id;
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
srs_error("send PCUC(StreamBegin) message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1005,7 +1005,7 @@ int SrsRtmpServer::start_play(int stream_id)
|
|||
pkt->data->set(StatusDetails, SrsAmf0Any::str("stream"));
|
||||
pkt->data->set(StatusClientId, SrsAmf0Any::str(RTMP_SIG_CLIENT_ID));
|
||||
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
srs_error("send onStatus(NetStream.Play.Reset) message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1022,7 +1022,7 @@ int SrsRtmpServer::start_play(int stream_id)
|
|||
pkt->data->set(StatusDetails, SrsAmf0Any::str("stream"));
|
||||
pkt->data->set(StatusClientId, SrsAmf0Any::str(RTMP_SIG_CLIENT_ID));
|
||||
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
srs_error("send onStatus(NetStream.Play.Reset) message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1032,7 +1032,7 @@ int SrsRtmpServer::start_play(int stream_id)
|
|||
// |RtmpSampleAccess(false, false)
|
||||
if (true) {
|
||||
SrsSampleAccessPacket* pkt = new SrsSampleAccessPacket();
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
srs_error("send |RtmpSampleAccess(false, false) message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1043,7 +1043,7 @@ int SrsRtmpServer::start_play(int stream_id)
|
|||
if (true) {
|
||||
SrsOnStatusDataPacket* pkt = new SrsOnStatusDataPacket();
|
||||
pkt->data->set(StatusCode, SrsAmf0Any::str(StatusCodeDataStart));
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
srs_error("send onStatus(NetStream.Data.Start) message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1068,7 +1068,7 @@ int SrsRtmpServer::on_play_client_pause(int stream_id, bool is_pause)
|
|||
pkt->data->set(StatusCode, SrsAmf0Any::str(StatusCodeStreamPause));
|
||||
pkt->data->set(StatusDescription, SrsAmf0Any::str("Paused stream."));
|
||||
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
srs_error("send onStatus(NetStream.Pause.Notify) message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1081,7 +1081,7 @@ int SrsRtmpServer::on_play_client_pause(int stream_id, bool is_pause)
|
|||
pkt->event_type = SrcPCUCStreamEOF;
|
||||
pkt->event_data = stream_id;
|
||||
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
srs_error("send PCUC(StreamEOF) message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1096,7 +1096,7 @@ int SrsRtmpServer::on_play_client_pause(int stream_id, bool is_pause)
|
|||
pkt->data->set(StatusCode, SrsAmf0Any::str(StatusCodeStreamUnpause));
|
||||
pkt->data->set(StatusDescription, SrsAmf0Any::str("Unpaused stream."));
|
||||
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
srs_error("send onStatus(NetStream.Unpause.Notify) message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1109,7 +1109,7 @@ int SrsRtmpServer::on_play_client_pause(int stream_id, bool is_pause)
|
|||
pkt->event_type = SrcPCUCStreamBegin;
|
||||
pkt->event_data = stream_id;
|
||||
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
srs_error("send PCUC(StreanBegin) message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1127,7 +1127,7 @@ int SrsRtmpServer::start_fmle_publish(int stream_id)
|
|||
// FCPublish
|
||||
double fc_publish_tid = 0;
|
||||
if (true) {
|
||||
__SrsMessage* msg = NULL;
|
||||
SrsMessage* msg = NULL;
|
||||
SrsFMLEStartPacket* pkt = NULL;
|
||||
if ((ret = __srs_rtmp_expect_message<SrsFMLEStartPacket>(protocol, &msg, &pkt)) != ERROR_SUCCESS) {
|
||||
srs_error("recv FCPublish message failed. ret=%d", ret);
|
||||
|
@ -1135,7 +1135,7 @@ int SrsRtmpServer::start_fmle_publish(int stream_id)
|
|||
}
|
||||
srs_info("recv FCPublish request message success.");
|
||||
|
||||
SrsAutoFree(__SrsMessage, msg, false);
|
||||
SrsAutoFree(SrsMessage, msg, false);
|
||||
SrsAutoFree(SrsFMLEStartPacket, pkt, false);
|
||||
|
||||
fc_publish_tid = pkt->transaction_id;
|
||||
|
@ -1143,7 +1143,7 @@ int SrsRtmpServer::start_fmle_publish(int stream_id)
|
|||
// FCPublish response
|
||||
if (true) {
|
||||
SrsFMLEStartResPacket* pkt = new SrsFMLEStartResPacket(fc_publish_tid);
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
srs_error("send FCPublish response message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1153,7 +1153,7 @@ int SrsRtmpServer::start_fmle_publish(int stream_id)
|
|||
// createStream
|
||||
double create_stream_tid = 0;
|
||||
if (true) {
|
||||
__SrsMessage* msg = NULL;
|
||||
SrsMessage* msg = NULL;
|
||||
SrsCreateStreamPacket* pkt = NULL;
|
||||
if ((ret = __srs_rtmp_expect_message<SrsCreateStreamPacket>(protocol, &msg, &pkt)) != ERROR_SUCCESS) {
|
||||
srs_error("recv createStream message failed. ret=%d", ret);
|
||||
|
@ -1161,7 +1161,7 @@ int SrsRtmpServer::start_fmle_publish(int stream_id)
|
|||
}
|
||||
srs_info("recv createStream request message success.");
|
||||
|
||||
SrsAutoFree(__SrsMessage, msg, false);
|
||||
SrsAutoFree(SrsMessage, msg, false);
|
||||
SrsAutoFree(SrsCreateStreamPacket, pkt, false);
|
||||
|
||||
create_stream_tid = pkt->transaction_id;
|
||||
|
@ -1169,7 +1169,7 @@ int SrsRtmpServer::start_fmle_publish(int stream_id)
|
|||
// createStream response
|
||||
if (true) {
|
||||
SrsCreateStreamResPacket* pkt = new SrsCreateStreamResPacket(create_stream_tid, stream_id);
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
srs_error("send createStream response message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1178,7 +1178,7 @@ int SrsRtmpServer::start_fmle_publish(int stream_id)
|
|||
|
||||
// publish
|
||||
if (true) {
|
||||
__SrsMessage* msg = NULL;
|
||||
SrsMessage* msg = NULL;
|
||||
SrsPublishPacket* pkt = NULL;
|
||||
if ((ret = __srs_rtmp_expect_message<SrsPublishPacket>(protocol, &msg, &pkt)) != ERROR_SUCCESS) {
|
||||
srs_error("recv publish message failed. ret=%d", ret);
|
||||
|
@ -1186,7 +1186,7 @@ int SrsRtmpServer::start_fmle_publish(int stream_id)
|
|||
}
|
||||
srs_info("recv publish request message success.");
|
||||
|
||||
SrsAutoFree(__SrsMessage, msg, false);
|
||||
SrsAutoFree(SrsMessage, msg, false);
|
||||
SrsAutoFree(SrsPublishPacket, pkt, false);
|
||||
}
|
||||
// publish response onFCPublish(NetStream.Publish.Start)
|
||||
|
@ -1197,7 +1197,7 @@ int SrsRtmpServer::start_fmle_publish(int stream_id)
|
|||
pkt->data->set(StatusCode, SrsAmf0Any::str(StatusCodePublishStart));
|
||||
pkt->data->set(StatusDescription, SrsAmf0Any::str("Started publishing stream."));
|
||||
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
srs_error("send onFCPublish(NetStream.Publish.Start) message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1212,7 +1212,7 @@ int SrsRtmpServer::start_fmle_publish(int stream_id)
|
|||
pkt->data->set(StatusDescription, SrsAmf0Any::str("Started publishing stream."));
|
||||
pkt->data->set(StatusClientId, SrsAmf0Any::str(RTMP_SIG_CLIENT_ID));
|
||||
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
srs_error("send onStatus(NetStream.Publish.Start) message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1236,7 +1236,7 @@ int SrsRtmpServer::fmle_unpublish(int stream_id, double unpublish_tid)
|
|||
pkt->data->set(StatusCode, SrsAmf0Any::str(StatusCodeUnpublishSuccess));
|
||||
pkt->data->set(StatusDescription, SrsAmf0Any::str("Stop publishing stream."));
|
||||
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
srs_error("send onFCUnpublish(NetStream.unpublish.Success) message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1245,7 +1245,7 @@ int SrsRtmpServer::fmle_unpublish(int stream_id, double unpublish_tid)
|
|||
// FCUnpublish response
|
||||
if (true) {
|
||||
SrsFMLEStartResPacket* pkt = new SrsFMLEStartResPacket(unpublish_tid);
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
srs_error("send FCUnpublish response message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1260,7 +1260,7 @@ int SrsRtmpServer::fmle_unpublish(int stream_id, double unpublish_tid)
|
|||
pkt->data->set(StatusDescription, SrsAmf0Any::str("Stream is now unpublished"));
|
||||
pkt->data->set(StatusClientId, SrsAmf0Any::str(RTMP_SIG_CLIENT_ID));
|
||||
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
srs_error("send onStatus(NetStream.Unpublish.Success) message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1285,7 +1285,7 @@ int SrsRtmpServer::start_flash_publish(int stream_id)
|
|||
pkt->data->set(StatusDescription, SrsAmf0Any::str("Started publishing stream."));
|
||||
pkt->data->set(StatusClientId, SrsAmf0Any::str(RTMP_SIG_CLIENT_ID));
|
||||
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, stream_id)) != ERROR_SUCCESS) {
|
||||
srs_error("send onStatus(NetStream.Publish.Start) message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1303,7 +1303,7 @@ int SrsRtmpServer::identify_create_stream_client(SrsCreateStreamPacket* req, int
|
|||
|
||||
if (true) {
|
||||
SrsCreateStreamResPacket* pkt = new SrsCreateStreamResPacket(req->transaction_id, stream_id);
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
srs_error("send createStream response message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1311,13 +1311,13 @@ int SrsRtmpServer::identify_create_stream_client(SrsCreateStreamPacket* req, int
|
|||
}
|
||||
|
||||
while (true) {
|
||||
__SrsMessage* msg = NULL;
|
||||
if ((ret = protocol->__recv_message(&msg)) != ERROR_SUCCESS) {
|
||||
SrsMessage* msg = NULL;
|
||||
if ((ret = protocol->recv_message(&msg)) != ERROR_SUCCESS) {
|
||||
srs_error("recv identify client message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
SrsAutoFree(__SrsMessage, msg, false);
|
||||
SrsAutoFree(SrsMessage, msg, false);
|
||||
|
||||
if (!msg->header.is_amf0_command() && !msg->header.is_amf3_command()) {
|
||||
srs_trace("identify ignore messages except "
|
||||
|
@ -1326,7 +1326,7 @@ int SrsRtmpServer::identify_create_stream_client(SrsCreateStreamPacket* req, int
|
|||
}
|
||||
|
||||
SrsPacket* pkt = NULL;
|
||||
if ((ret = protocol->__decode_message(msg, &pkt)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->decode_message(msg, &pkt)) != ERROR_SUCCESS) {
|
||||
srs_error("identify decode message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1358,7 +1358,7 @@ int SrsRtmpServer::identify_fmle_publish_client(SrsFMLEStartPacket* req, SrsRtmp
|
|||
// releaseStream response
|
||||
if (true) {
|
||||
SrsFMLEStartResPacket* pkt = new SrsFMLEStartResPacket(req->transaction_id);
|
||||
if ((ret = protocol->__send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
srs_error("send releaseStream response message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -39,10 +39,9 @@ class SrsCommonMessage;
|
|||
class SrsCreateStreamPacket;
|
||||
class SrsFMLEStartPacket;
|
||||
class SrsPublishPacket;
|
||||
class SrsSharedPtrMessage;
|
||||
class SrsOnMetaDataPacket;
|
||||
class SrsPlayPacket;
|
||||
class __SrsMessage;
|
||||
class SrsMessage;
|
||||
class SrsPacket;
|
||||
|
||||
/**
|
||||
|
@ -164,10 +163,10 @@ public:
|
|||
virtual int64_t get_send_bytes();
|
||||
virtual int get_recv_kbps();
|
||||
virtual int get_send_kbps();
|
||||
virtual int __recv_message(__SrsMessage** pmsg);
|
||||
virtual int __decode_message(__SrsMessage* msg, SrsPacket** ppacket);
|
||||
virtual int __send_and_free_message(__SrsMessage* msg);
|
||||
virtual int __send_and_free_packet(SrsPacket* packet, int stream_id);
|
||||
virtual int recv_message(SrsMessage** pmsg);
|
||||
virtual int decode_message(SrsMessage* msg, SrsPacket** ppacket);
|
||||
virtual int send_and_free_message(SrsMessage* msg);
|
||||
virtual int send_and_free_packet(SrsPacket* packet, int stream_id);
|
||||
public:
|
||||
// try complex, then simple handshake.
|
||||
virtual int handshake();
|
||||
|
@ -211,10 +210,10 @@ public:
|
|||
virtual int64_t get_send_bytes();
|
||||
virtual int get_recv_kbps();
|
||||
virtual int get_send_kbps();
|
||||
virtual int __recv_message(__SrsMessage** pmsg);
|
||||
virtual int __decode_message(__SrsMessage* msg, SrsPacket** ppacket);
|
||||
virtual int __send_and_free_message(__SrsMessage* msg);
|
||||
virtual int __send_and_free_packet(SrsPacket* packet, int stream_id);
|
||||
virtual int recv_message(SrsMessage** pmsg);
|
||||
virtual int decode_message(SrsMessage* msg, SrsPacket** ppacket);
|
||||
virtual int send_and_free_message(SrsMessage* msg);
|
||||
virtual int send_and_free_packet(SrsPacket* packet, int stream_id);
|
||||
public:
|
||||
virtual int handshake();
|
||||
virtual int connect_app(SrsRequest* req);
|
||||
|
|
|
@ -306,14 +306,14 @@ SrsProtocol::SrsProtocol(ISrsProtocolReaderWriter* io)
|
|||
SrsProtocol::~SrsProtocol()
|
||||
{
|
||||
if (true) {
|
||||
std::map<int, __SrsChunkStream*>::iterator it;
|
||||
std::map<int, SrsChunkStream*>::iterator it;
|
||||
|
||||
for (it = __chunk_streams.begin(); it != __chunk_streams.end(); ++it) {
|
||||
__SrsChunkStream* stream = it->second;
|
||||
for (it = chunk_streams.begin(); it != chunk_streams.end(); ++it) {
|
||||
SrsChunkStream* stream = it->second;
|
||||
srs_freep(stream);
|
||||
}
|
||||
|
||||
__chunk_streams.clear();
|
||||
chunk_streams.clear();
|
||||
}
|
||||
|
||||
srs_freep(decode_stream);
|
||||
|
@ -369,16 +369,16 @@ int SrsProtocol::get_send_kbps()
|
|||
return skt->get_send_kbps();
|
||||
}
|
||||
|
||||
int SrsProtocol::__recv_message(__SrsMessage** pmsg)
|
||||
int SrsProtocol::recv_message(SrsMessage** pmsg)
|
||||
{
|
||||
*pmsg = NULL;
|
||||
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
while (true) {
|
||||
__SrsMessage* msg = NULL;
|
||||
SrsMessage* msg = NULL;
|
||||
|
||||
if ((ret = __recv_interlaced_message(&msg)) != ERROR_SUCCESS) {
|
||||
if ((ret = recv_interlaced_message(&msg)) != ERROR_SUCCESS) {
|
||||
if (ret != ERROR_SOCKET_TIMEOUT && !srs_is_client_gracefully_close(ret)) {
|
||||
srs_error("recv interlaced message failed. ret=%d", ret);
|
||||
}
|
||||
|
@ -398,7 +398,7 @@ int SrsProtocol::__recv_message(__SrsMessage** pmsg)
|
|||
continue;
|
||||
}
|
||||
|
||||
if ((ret = __on_recv_message(msg)) != ERROR_SUCCESS) {
|
||||
if ((ret = on_recv_message(msg)) != ERROR_SUCCESS) {
|
||||
srs_error("hook the received msg failed. ret=%d", ret);
|
||||
srs_freep(msg);
|
||||
return ret;
|
||||
|
@ -412,7 +412,7 @@ int SrsProtocol::__recv_message(__SrsMessage** pmsg)
|
|||
return ret;
|
||||
}
|
||||
|
||||
int SrsProtocol::__decode_message(__SrsMessage* msg, SrsPacket** ppacket)
|
||||
int SrsProtocol::decode_message(SrsMessage* msg, SrsPacket** ppacket)
|
||||
{
|
||||
*ppacket = NULL;
|
||||
|
||||
|
@ -432,7 +432,7 @@ int SrsProtocol::__decode_message(__SrsMessage* msg, SrsPacket** ppacket)
|
|||
|
||||
// decode the packet.
|
||||
SrsPacket* packet = NULL;
|
||||
if ((ret = __do_decode_message(msg->header, decode_stream, &packet)) != ERROR_SUCCESS) {
|
||||
if ((ret = do_decode_message(msg->header, decode_stream, &packet)) != ERROR_SUCCESS) {
|
||||
srs_freep(packet);
|
||||
return ret;
|
||||
}
|
||||
|
@ -443,7 +443,7 @@ int SrsProtocol::__decode_message(__SrsMessage* msg, SrsPacket** ppacket)
|
|||
return ret;
|
||||
}
|
||||
|
||||
int SrsProtocol::__do_send_and_free_message(__SrsMessage* msg, SrsPacket* packet)
|
||||
int SrsProtocol::do_send_and_free_message(SrsMessage* msg, SrsPacket* packet)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
|
@ -561,7 +561,7 @@ int SrsProtocol::__do_send_and_free_message(__SrsMessage* msg, SrsPacket* packet
|
|||
}
|
||||
} while (p < (char*)msg->payload + msg->size);
|
||||
|
||||
if ((ret = __on_send_message(msg, packet)) != ERROR_SUCCESS) {
|
||||
if ((ret = on_send_message(msg, packet)) != ERROR_SUCCESS) {
|
||||
srs_error("hook the send message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -569,7 +569,7 @@ int SrsProtocol::__do_send_and_free_message(__SrsMessage* msg, SrsPacket* packet
|
|||
return ret;
|
||||
}
|
||||
|
||||
int SrsProtocol::__do_decode_message(SrsMessageHeader& header, SrsStream* stream, SrsPacket** ppacket)
|
||||
int SrsProtocol::do_decode_message(SrsMessageHeader& header, SrsStream* stream, SrsPacket** ppacket)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
|
@ -728,15 +728,15 @@ int SrsProtocol::__do_decode_message(SrsMessageHeader& header, SrsStream* stream
|
|||
return ret;
|
||||
}
|
||||
|
||||
int SrsProtocol::__send_and_free_message(__SrsMessage* msg)
|
||||
int SrsProtocol::send_and_free_message(SrsMessage* msg)
|
||||
{
|
||||
srs_assert(msg);
|
||||
SrsAutoFree(__SrsMessage, msg, false);
|
||||
SrsAutoFree(SrsMessage, msg, false);
|
||||
|
||||
return __do_send_and_free_message(msg, NULL);
|
||||
return do_send_and_free_message(msg, NULL);
|
||||
}
|
||||
|
||||
int SrsProtocol::__send_and_free_packet(SrsPacket* packet, int stream_id)
|
||||
int SrsProtocol::send_and_free_packet(SrsPacket* packet, int stream_id)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
|
@ -757,7 +757,7 @@ int SrsProtocol::__send_and_free_packet(SrsPacket* packet, int stream_id)
|
|||
}
|
||||
|
||||
// to message
|
||||
__SrsMessage* msg = new __SrsMessage();
|
||||
SrsMessage* msg = new SrsMessage();
|
||||
|
||||
msg->payload = (int8_t*)payload;
|
||||
msg->size = (int32_t)size;
|
||||
|
@ -767,14 +767,14 @@ int SrsProtocol::__send_and_free_packet(SrsPacket* packet, int stream_id)
|
|||
msg->header.stream_id = stream_id;
|
||||
msg->header.perfer_cid = packet->get_perfer_cid();
|
||||
|
||||
if ((ret = __do_send_and_free_message(msg, packet)) != ERROR_SUCCESS) {
|
||||
if ((ret = do_send_and_free_message(msg, packet)) != ERROR_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int SrsProtocol::__recv_interlaced_message(__SrsMessage** pmsg)
|
||||
int SrsProtocol::recv_interlaced_message(SrsMessage** pmsg)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
|
@ -782,7 +782,7 @@ int SrsProtocol::__recv_interlaced_message(__SrsMessage** pmsg)
|
|||
char fmt = 0;
|
||||
int cid = 0;
|
||||
int bh_size = 0;
|
||||
if ((ret = __read_basic_header(fmt, cid, bh_size)) != ERROR_SUCCESS) {
|
||||
if ((ret = read_basic_header(fmt, cid, bh_size)) != ERROR_SUCCESS) {
|
||||
if (ret != ERROR_SOCKET_TIMEOUT && !srs_is_client_gracefully_close(ret)) {
|
||||
srs_error("read basic header failed. ret=%d", ret);
|
||||
}
|
||||
|
@ -805,16 +805,16 @@ int SrsProtocol::__recv_interlaced_message(__SrsMessage** pmsg)
|
|||
}
|
||||
|
||||
// get the cached chunk stream.
|
||||
__SrsChunkStream* chunk = NULL;
|
||||
SrsChunkStream* chunk = NULL;
|
||||
|
||||
if (__chunk_streams.find(cid) == __chunk_streams.end()) {
|
||||
chunk = __chunk_streams[cid] = new __SrsChunkStream(cid);
|
||||
if (chunk_streams.find(cid) == chunk_streams.end()) {
|
||||
chunk = chunk_streams[cid] = new SrsChunkStream(cid);
|
||||
// set the perfer cid of chunk,
|
||||
// which will copy to the message received.
|
||||
chunk->header.perfer_cid = cid;
|
||||
srs_verbose("cache new chunk stream: fmt=%d, cid=%d", fmt, cid);
|
||||
} else {
|
||||
chunk = __chunk_streams[cid];
|
||||
chunk = chunk_streams[cid];
|
||||
srs_verbose("cached chunk stream: fmt=%d, cid=%d, size=%d, message(type=%d, size=%d, time=%"PRId64", sid=%d)",
|
||||
chunk->fmt, chunk->cid, (chunk->msg? chunk->msg->size : 0), chunk->header.message_type, chunk->header.payload_length,
|
||||
chunk->header.timestamp, chunk->header.stream_id);
|
||||
|
@ -822,7 +822,7 @@ int SrsProtocol::__recv_interlaced_message(__SrsMessage** pmsg)
|
|||
|
||||
// chunk stream message header
|
||||
int mh_size = 0;
|
||||
if ((ret = __read_message_header(chunk, fmt, bh_size, mh_size)) != ERROR_SUCCESS) {
|
||||
if ((ret = read_message_header(chunk, fmt, bh_size, mh_size)) != ERROR_SUCCESS) {
|
||||
if (ret != ERROR_SOCKET_TIMEOUT && !srs_is_client_gracefully_close(ret)) {
|
||||
srs_error("read message header failed. ret=%d", ret);
|
||||
}
|
||||
|
@ -834,9 +834,9 @@ int SrsProtocol::__recv_interlaced_message(__SrsMessage** pmsg)
|
|||
chunk->header.payload_length, chunk->header.timestamp, chunk->header.stream_id);
|
||||
|
||||
// read msg payload from chunk stream.
|
||||
__SrsMessage* msg = NULL;
|
||||
SrsMessage* msg = NULL;
|
||||
int payload_size = 0;
|
||||
if ((ret = __read_message_payload(chunk, bh_size, mh_size, payload_size, &msg)) != ERROR_SUCCESS) {
|
||||
if ((ret = read_message_payload(chunk, bh_size, mh_size, payload_size, &msg)) != ERROR_SUCCESS) {
|
||||
if (ret != ERROR_SOCKET_TIMEOUT && !srs_is_client_gracefully_close(ret)) {
|
||||
srs_error("read message payload failed. ret=%d", ret);
|
||||
}
|
||||
|
@ -865,7 +865,7 @@ int SrsProtocol::__recv_interlaced_message(__SrsMessage** pmsg)
|
|||
return ret;
|
||||
}
|
||||
|
||||
int SrsProtocol::__read_basic_header(char& fmt, int& cid, int& bh_size)
|
||||
int SrsProtocol::read_basic_header(char& fmt, int& cid, int& bh_size)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
|
@ -923,7 +923,7 @@ int SrsProtocol::__read_basic_header(char& fmt, int& cid, int& bh_size)
|
|||
return ret;
|
||||
}
|
||||
|
||||
int SrsProtocol::__read_message_header(__SrsChunkStream* chunk, char fmt, int bh_size, int& mh_size)
|
||||
int SrsProtocol::read_message_header(SrsChunkStream* chunk, char fmt, int bh_size, int& mh_size)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
|
@ -971,7 +971,7 @@ int SrsProtocol::__read_message_header(__SrsChunkStream* chunk, char fmt, int bh
|
|||
|
||||
// create msg when new chunk stream start
|
||||
if (!chunk->msg) {
|
||||
chunk->msg = new __SrsMessage();
|
||||
chunk->msg = new SrsMessage();
|
||||
srs_verbose("create message for new chunk, fmt=%d, cid=%d", fmt, chunk->cid);
|
||||
}
|
||||
|
||||
|
@ -1157,7 +1157,7 @@ int SrsProtocol::__read_message_header(__SrsChunkStream* chunk, char fmt, int bh
|
|||
return ret;
|
||||
}
|
||||
|
||||
int SrsProtocol::__read_message_payload(__SrsChunkStream* chunk, int bh_size, int mh_size, int& payload_size, __SrsMessage** pmsg)
|
||||
int SrsProtocol::read_message_payload(SrsChunkStream* chunk, int bh_size, int mh_size, int& payload_size, SrsMessage** pmsg)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
|
@ -1222,7 +1222,7 @@ int SrsProtocol::__read_message_payload(__SrsChunkStream* chunk, int bh_size, in
|
|||
return ret;
|
||||
}
|
||||
|
||||
int SrsProtocol::__on_recv_message(__SrsMessage* msg)
|
||||
int SrsProtocol::on_recv_message(SrsMessage* msg)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
|
@ -1242,7 +1242,7 @@ int SrsProtocol::__on_recv_message(__SrsMessage* msg)
|
|||
case RTMP_MSG_SetChunkSize:
|
||||
case RTMP_MSG_UserControlMessage:
|
||||
case RTMP_MSG_WindowAcknowledgementSize:
|
||||
if ((ret = __decode_message(msg, &packet)) != ERROR_SUCCESS) {
|
||||
if ((ret = decode_message(msg, &packet)) != ERROR_SUCCESS) {
|
||||
srs_error("decode packet from message payload failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1298,7 +1298,7 @@ int SrsProtocol::__on_recv_message(__SrsMessage* msg)
|
|||
return ret;
|
||||
}
|
||||
|
||||
int SrsProtocol::__on_send_message(__SrsMessage* msg, SrsPacket* packet)
|
||||
int SrsProtocol::on_send_message(SrsMessage* msg, SrsPacket* packet)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
|
@ -1353,7 +1353,7 @@ int SrsProtocol::response_acknowledgement_message()
|
|||
|
||||
SrsAcknowledgementPacket* pkt = new SrsAcknowledgementPacket();
|
||||
in_ack_size.acked_size = pkt->sequence_number = skt->get_recv_bytes();
|
||||
if ((ret = __send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
srs_error("send acknowledgement failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1373,7 +1373,7 @@ int SrsProtocol::response_ping_message(int32_t timestamp)
|
|||
pkt->event_type = SrcPCUCPingResponse;
|
||||
pkt->event_data = timestamp;
|
||||
|
||||
if ((ret = __send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
if ((ret = send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) {
|
||||
srs_error("send ping response failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1474,7 +1474,7 @@ void SrsMessageHeader::initialize_video(int size, u_int32_t time, int stream)
|
|||
stream_id = (int32_t)stream;
|
||||
}
|
||||
|
||||
__SrsChunkStream::__SrsChunkStream(int _cid)
|
||||
SrsChunkStream::SrsChunkStream(int _cid)
|
||||
{
|
||||
fmt = 0;
|
||||
cid = _cid;
|
||||
|
@ -1483,39 +1483,39 @@ __SrsChunkStream::__SrsChunkStream(int _cid)
|
|||
msg_count = 0;
|
||||
}
|
||||
|
||||
__SrsChunkStream::~__SrsChunkStream()
|
||||
SrsChunkStream::~SrsChunkStream()
|
||||
{
|
||||
srs_freep(msg);
|
||||
}
|
||||
|
||||
__SrsMessage::__SrsMessage()
|
||||
SrsMessage::SrsMessage()
|
||||
{
|
||||
payload = NULL;
|
||||
size = 0;
|
||||
}
|
||||
|
||||
__SrsMessage::~__SrsMessage()
|
||||
SrsMessage::~SrsMessage()
|
||||
{
|
||||
}
|
||||
|
||||
__SrsSharedPtrMessage::__SrsSharedPtr::__SrsSharedPtr()
|
||||
SrsSharedPtrMessage::__SrsSharedPtr::__SrsSharedPtr()
|
||||
{
|
||||
payload = NULL;
|
||||
size = 0;
|
||||
shared_count = 0;
|
||||
}
|
||||
|
||||
__SrsSharedPtrMessage::__SrsSharedPtr::~__SrsSharedPtr()
|
||||
SrsSharedPtrMessage::__SrsSharedPtr::~__SrsSharedPtr()
|
||||
{
|
||||
srs_freepa(payload);
|
||||
}
|
||||
|
||||
__SrsSharedPtrMessage::__SrsSharedPtrMessage()
|
||||
SrsSharedPtrMessage::SrsSharedPtrMessage()
|
||||
{
|
||||
ptr = NULL;
|
||||
}
|
||||
|
||||
__SrsSharedPtrMessage::~__SrsSharedPtrMessage()
|
||||
SrsSharedPtrMessage::~SrsSharedPtrMessage()
|
||||
{
|
||||
if (ptr) {
|
||||
if (ptr->shared_count == 0) {
|
||||
|
@ -1526,7 +1526,7 @@ __SrsSharedPtrMessage::~__SrsSharedPtrMessage()
|
|||
}
|
||||
}
|
||||
|
||||
int __SrsSharedPtrMessage::initialize(__SrsMessage* source)
|
||||
int SrsSharedPtrMessage::initialize(SrsMessage* source)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
|
@ -1541,7 +1541,7 @@ int __SrsSharedPtrMessage::initialize(__SrsMessage* source)
|
|||
return ret;
|
||||
}
|
||||
|
||||
int __SrsSharedPtrMessage::initialize(SrsMessageHeader* source, char* payload, int size)
|
||||
int SrsSharedPtrMessage::initialize(SrsMessageHeader* source, char* payload, int size)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
|
@ -1563,13 +1563,13 @@ int __SrsSharedPtrMessage::initialize(SrsMessageHeader* source, char* payload, i
|
|||
ptr->payload = payload;
|
||||
ptr->size = size;
|
||||
|
||||
__SrsMessage::payload = (int8_t*)ptr->payload;
|
||||
__SrsMessage::size = ptr->size;
|
||||
SrsMessage::payload = (int8_t*)ptr->payload;
|
||||
SrsMessage::size = ptr->size;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
__SrsSharedPtrMessage* __SrsSharedPtrMessage::copy()
|
||||
SrsSharedPtrMessage* SrsSharedPtrMessage::copy()
|
||||
{
|
||||
if (!ptr) {
|
||||
srs_error("invoke initialize to initialize the ptr.");
|
||||
|
@ -1577,7 +1577,7 @@ __SrsSharedPtrMessage* __SrsSharedPtrMessage::copy()
|
|||
return NULL;
|
||||
}
|
||||
|
||||
__SrsSharedPtrMessage* copy = new __SrsSharedPtrMessage();
|
||||
SrsSharedPtrMessage* copy = new SrsSharedPtrMessage();
|
||||
|
||||
copy->header = header;
|
||||
|
||||
|
@ -1621,11 +1621,6 @@ int SrsPacket::get_message_type()
|
|||
return 0;
|
||||
}
|
||||
|
||||
int SrsPacket::get_payload_length()
|
||||
{
|
||||
return get_size();
|
||||
}
|
||||
|
||||
int SrsPacket::encode(int& psize, char*& ppayload)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
|
|
@ -43,8 +43,8 @@ class SrsStream;
|
|||
class SrsAmf0Object;
|
||||
class SrsAmf0Any;
|
||||
class SrsMessageHeader;
|
||||
class __SrsMessage;
|
||||
class __SrsChunkStream;
|
||||
class SrsMessage;
|
||||
class SrsChunkStream;
|
||||
|
||||
// the following is the timeout for rtmp protocol,
|
||||
// to avoid death connection.
|
||||
|
@ -109,8 +109,7 @@ private:
|
|||
std::map<double, std::string> requests;
|
||||
// peer in
|
||||
private:
|
||||
// TODO: FIXME: rename to chunk_streams
|
||||
std::map<int, __SrsChunkStream*> __chunk_streams;
|
||||
std::map<int, SrsChunkStream*> chunk_streams;
|
||||
SrsStream* decode_stream;
|
||||
SrsBuffer* buffer;
|
||||
int32_t in_chunk_size;
|
||||
|
@ -150,21 +149,21 @@ public:
|
|||
* NULL for unknown packet but return success.
|
||||
* never NULL if decode success.
|
||||
*/
|
||||
virtual int __recv_message(__SrsMessage** pmsg);
|
||||
virtual int recv_message(SrsMessage** pmsg);
|
||||
/**
|
||||
* decode bytes oriented RTMP message to RTMP packet,
|
||||
* @param ppacket, output decoded packet,
|
||||
* always NULL if error, never NULL if success.
|
||||
* @return error when unknown packet, error when decode failed.
|
||||
*/
|
||||
virtual int __decode_message(__SrsMessage* msg, SrsPacket** ppacket);
|
||||
virtual int decode_message(SrsMessage* msg, SrsPacket** ppacket);
|
||||
/**
|
||||
* send the RTMP message and always free it.
|
||||
* user must never free or use the msg after this method,
|
||||
* for it will always free the msg.
|
||||
* @param msg, the msg to send out, never be NULL.
|
||||
*/
|
||||
virtual int __send_and_free_message(__SrsMessage* msg);
|
||||
virtual int send_and_free_message(SrsMessage* msg);
|
||||
/**
|
||||
* send the RTMP packet and always free it.
|
||||
* user must never free or use the packet after this method,
|
||||
|
@ -172,50 +171,50 @@ public:
|
|||
* @param packet, the packet to send out, never be NULL.
|
||||
* @param stream_id, the stream id of packet to send over, 0 for control message.
|
||||
*/
|
||||
virtual int __send_and_free_packet(SrsPacket* packet, int stream_id);
|
||||
virtual int send_and_free_packet(SrsPacket* packet, int stream_id);
|
||||
private:
|
||||
/**
|
||||
* imp for __send_and_free_message
|
||||
* imp for send_and_free_message
|
||||
* @param packet the packet of message, NULL for raw message.
|
||||
*/
|
||||
virtual int __do_send_and_free_message(__SrsMessage* msg, SrsPacket* packet);
|
||||
virtual int do_send_and_free_message(SrsMessage* msg, SrsPacket* packet);
|
||||
/**
|
||||
* imp for __decode_message
|
||||
* imp for decode_message
|
||||
*/
|
||||
virtual int __do_decode_message(SrsMessageHeader& header, SrsStream* stream, SrsPacket** ppacket);
|
||||
virtual int do_decode_message(SrsMessageHeader& header, SrsStream* stream, SrsPacket** ppacket);
|
||||
/**
|
||||
* recv bytes oriented RTMP message from protocol stack.
|
||||
* return error if error occur and nerver set the pmsg,
|
||||
* return success and pmsg set to NULL if no entire message got,
|
||||
* return success and pmsg set to entire message if got one.
|
||||
*/
|
||||
virtual int __recv_interlaced_message(__SrsMessage** pmsg);
|
||||
virtual int recv_interlaced_message(SrsMessage** pmsg);
|
||||
/**
|
||||
* read the chunk basic header(fmt, cid) from chunk stream.
|
||||
* user can discovery a SrsChunkStream by cid.
|
||||
* @bh_size return the chunk basic header size, to remove the used bytes when finished.
|
||||
*/
|
||||
virtual int __read_basic_header(char& fmt, int& cid, int& bh_size);
|
||||
virtual int read_basic_header(char& fmt, int& cid, int& bh_size);
|
||||
/**
|
||||
* read the chunk message header(timestamp, payload_length, message_type, stream_id)
|
||||
* from chunk stream and save to SrsChunkStream.
|
||||
* @mh_size return the chunk message header size, to remove the used bytes when finished.
|
||||
*/
|
||||
virtual int __read_message_header(__SrsChunkStream* chunk, char fmt, int bh_size, int& mh_size);
|
||||
virtual int read_message_header(SrsChunkStream* chunk, char fmt, int bh_size, int& mh_size);
|
||||
/**
|
||||
* read the chunk payload, remove the used bytes in buffer,
|
||||
* if got entire message, set the pmsg.
|
||||
* @payload_size read size in this roundtrip, generally a chunk size or left message size.
|
||||
*/
|
||||
virtual int __read_message_payload(__SrsChunkStream* chunk, int bh_size, int mh_size, int& payload_size, __SrsMessage** pmsg);
|
||||
virtual int read_message_payload(SrsChunkStream* chunk, int bh_size, int mh_size, int& payload_size, SrsMessage** pmsg);
|
||||
/**
|
||||
* when recv message, update the context.
|
||||
*/
|
||||
virtual int __on_recv_message(__SrsMessage* msg);
|
||||
virtual int on_recv_message(SrsMessage* msg);
|
||||
/**
|
||||
* when message sentout, update the context.
|
||||
*/
|
||||
virtual int __on_send_message(__SrsMessage* msg, SrsPacket* packet);
|
||||
virtual int on_send_message(SrsMessage* msg, SrsPacket* packet);
|
||||
private:
|
||||
virtual int response_acknowledgement_message();
|
||||
virtual int response_ping_message(int32_t timestamp);
|
||||
|
@ -261,7 +260,6 @@ public:
|
|||
* get the perfered cid(chunk stream id) which sendout over.
|
||||
* set at decoding, and canbe used for directly send message,
|
||||
* for example, dispatch to all connections.
|
||||
* @see: SrsSharedPtrMessage.SrsSharedPtr.perfer_cid
|
||||
*/
|
||||
int perfer_cid;
|
||||
|
||||
|
@ -289,7 +287,7 @@ public:
|
|||
* incoming chunk stream maybe interlaced,
|
||||
* use the chunk stream to cache the input RTMP chunk streams.
|
||||
*/
|
||||
class __SrsChunkStream
|
||||
class SrsChunkStream
|
||||
{
|
||||
public:
|
||||
/**
|
||||
|
@ -313,14 +311,14 @@ public:
|
|||
/**
|
||||
* partially read message.
|
||||
*/
|
||||
__SrsMessage* msg;
|
||||
SrsMessage* msg;
|
||||
/**
|
||||
* decoded msg count, to identify whether the chunk stream is fresh.
|
||||
*/
|
||||
int64_t msg_count;
|
||||
public:
|
||||
__SrsChunkStream(int _cid);
|
||||
virtual ~__SrsChunkStream();
|
||||
SrsChunkStream(int _cid);
|
||||
virtual ~SrsChunkStream();
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -328,7 +326,7 @@ public:
|
|||
* protcol always recv RTMP message, and can send RTMP message or RTMP packet.
|
||||
* the shared-ptr message is a special RTMP message, use ref-count for performance issue.
|
||||
*/
|
||||
class __SrsMessage
|
||||
class SrsMessage
|
||||
{
|
||||
// 4.1. Message Header
|
||||
public:
|
||||
|
@ -344,8 +342,8 @@ public:
|
|||
int32_t size;
|
||||
int8_t* payload;
|
||||
public:
|
||||
__SrsMessage();
|
||||
virtual ~__SrsMessage();
|
||||
SrsMessage();
|
||||
virtual ~SrsMessage();
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -353,7 +351,7 @@ public:
|
|||
* for audio/video/data message that need less memory copy.
|
||||
* and only for output.
|
||||
*/
|
||||
class __SrsSharedPtrMessage : public __SrsMessage
|
||||
class SrsSharedPtrMessage : public SrsMessage
|
||||
{
|
||||
private:
|
||||
struct __SrsSharedPtr
|
||||
|
@ -367,15 +365,15 @@ private:
|
|||
};
|
||||
__SrsSharedPtr* ptr;
|
||||
public:
|
||||
__SrsSharedPtrMessage();
|
||||
virtual ~__SrsSharedPtrMessage();
|
||||
SrsSharedPtrMessage();
|
||||
virtual ~SrsSharedPtrMessage();
|
||||
public:
|
||||
/**
|
||||
* set the shared payload.
|
||||
* we will detach the payload of source,
|
||||
* so ensure donot use it before.
|
||||
*/
|
||||
virtual int initialize(__SrsMessage* source);
|
||||
virtual int initialize(SrsMessage* source);
|
||||
/**
|
||||
* set the shared payload.
|
||||
* use source header, and specified param payload.
|
||||
|
@ -385,7 +383,7 @@ public:
|
|||
/**
|
||||
* copy current shared ptr message, use ref-count.
|
||||
*/
|
||||
virtual __SrsSharedPtrMessage* copy();
|
||||
virtual SrsSharedPtrMessage* copy();
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -423,7 +421,6 @@ public:
|
|||
*/
|
||||
public:
|
||||
virtual int get_perfer_cid();
|
||||
virtual int get_payload_length();
|
||||
public:
|
||||
/**
|
||||
* subpacket must override to provide the right message type.
|
||||
|
@ -1133,7 +1130,7 @@ protected:
|
|||
* if need to set timeout, use set timeout of SrsProtocol.
|
||||
*/
|
||||
template<class T>
|
||||
int __srs_rtmp_expect_message(SrsProtocol* protocol, __SrsMessage** pmsg, T** ppacket)
|
||||
int __srs_rtmp_expect_message(SrsProtocol* protocol, SrsMessage** pmsg, T** ppacket)
|
||||
{
|
||||
*pmsg = NULL;
|
||||
*ppacket = NULL;
|
||||
|
@ -1141,15 +1138,15 @@ int __srs_rtmp_expect_message(SrsProtocol* protocol, __SrsMessage** pmsg, T** pp
|
|||
int ret = ERROR_SUCCESS;
|
||||
|
||||
while (true) {
|
||||
__SrsMessage* msg = NULL;
|
||||
if ((ret = protocol->__recv_message(&msg)) != ERROR_SUCCESS) {
|
||||
SrsMessage* msg = NULL;
|
||||
if ((ret = protocol->recv_message(&msg)) != ERROR_SUCCESS) {
|
||||
srs_error("recv message failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
srs_verbose("recv message success.");
|
||||
|
||||
SrsPacket* packet = NULL;
|
||||
if ((ret = protocol->__decode_message(msg, &packet)) != ERROR_SUCCESS) {
|
||||
if ((ret = protocol->decode_message(msg, &packet)) != ERROR_SUCCESS) {
|
||||
srs_error("decode message failed. ret=%d", ret);
|
||||
srs_freep(msg);
|
||||
return ret;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue