mirror of
https://github.com/ossrs/srs.git
synced 2025-02-13 11:51:57 +00:00
for #133, finish rtsp sdp, start rtp.
This commit is contained in:
parent
f14af45413
commit
45c0b12958
3 changed files with 48 additions and 3 deletions
|
@ -68,7 +68,7 @@ SrsRtspConn::SrsRtspConn(SrsRtspCaster* c, st_netfd_t fd, std::string o)
|
||||||
{
|
{
|
||||||
output = o;
|
output = o;
|
||||||
|
|
||||||
session = "O9EaZ4bf"; // TODO: FIXME: generate session id.
|
session = "";
|
||||||
video_rtp = NULL;
|
video_rtp = NULL;
|
||||||
audio_rtp = NULL;
|
audio_rtp = NULL;
|
||||||
|
|
||||||
|
@ -118,7 +118,9 @@ int SrsRtspConn::do_cycle()
|
||||||
srs_info("rtsp: got rtsp request");
|
srs_info("rtsp: got rtsp request");
|
||||||
|
|
||||||
if (req->is_options()) {
|
if (req->is_options()) {
|
||||||
if ((ret = rtsp->send_message(new SrsRtspOptionsResponse(req->seq))) != ERROR_SUCCESS) {
|
SrsRtspOptionsResponse* res = new SrsRtspOptionsResponse(req->seq);
|
||||||
|
res->session = session;
|
||||||
|
if ((ret = rtsp->send_message(res)) != ERROR_SUCCESS) {
|
||||||
if (!srs_is_client_gracefully_close(ret)) {
|
if (!srs_is_client_gracefully_close(ret)) {
|
||||||
srs_error("rtsp: send OPTIONS response failed. ret=%d", ret);
|
srs_error("rtsp: send OPTIONS response failed. ret=%d", ret);
|
||||||
}
|
}
|
||||||
|
@ -136,7 +138,10 @@ int SrsRtspConn::do_cycle()
|
||||||
req->sdp->audio_stream_id.c_str(), req->sdp->audio_codec.c_str(),
|
req->sdp->audio_stream_id.c_str(), req->sdp->audio_codec.c_str(),
|
||||||
req->sdp->audio_sample_rate.c_str(), req->sdp->audio_channel.c_str()
|
req->sdp->audio_sample_rate.c_str(), req->sdp->audio_channel.c_str()
|
||||||
);
|
);
|
||||||
if ((ret = rtsp->send_message(new SrsRtspResponse(req->seq))) != ERROR_SUCCESS) {
|
|
||||||
|
SrsRtspResponse* res = new SrsRtspResponse(req->seq);
|
||||||
|
res->session = session;
|
||||||
|
if ((ret = rtsp->send_message(res)) != ERROR_SUCCESS) {
|
||||||
if (!srs_is_client_gracefully_close(ret)) {
|
if (!srs_is_client_gracefully_close(ret)) {
|
||||||
srs_error("rtsp: send ANNOUNCE response failed. ret=%d", ret);
|
srs_error("rtsp: send ANNOUNCE response failed. ret=%d", ret);
|
||||||
}
|
}
|
||||||
|
@ -164,6 +169,11 @@ int SrsRtspConn::do_cycle()
|
||||||
}
|
}
|
||||||
srs_trace("rtsp: rtp listen at port=%d ok.", lpm);
|
srs_trace("rtsp: rtp listen at port=%d ok.", lpm);
|
||||||
|
|
||||||
|
// create session.
|
||||||
|
if (session.empty()) {
|
||||||
|
session = "O9EaZ4bf"; // TODO: FIXME: generate session id.
|
||||||
|
}
|
||||||
|
|
||||||
SrsRtspSetupResponse* res = new SrsRtspSetupResponse(req->seq);
|
SrsRtspSetupResponse* res = new SrsRtspSetupResponse(req->seq);
|
||||||
res->client_port_min = req->transport->client_port_min;
|
res->client_port_min = req->transport->client_port_min;
|
||||||
res->client_port_max = req->transport->client_port_max;
|
res->client_port_max = req->transport->client_port_max;
|
||||||
|
@ -176,6 +186,15 @@ int SrsRtspConn::do_cycle()
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
} else if (req->is_record()) {
|
||||||
|
SrsRtspResponse* res = new SrsRtspResponse(req->seq);
|
||||||
|
res->session = session;
|
||||||
|
if ((ret = rtsp->send_message(res)) != ERROR_SUCCESS) {
|
||||||
|
if (!srs_is_client_gracefully_close(ret)) {
|
||||||
|
srs_error("rtsp: send SETUP response failed. ret=%d", ret);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -486,6 +486,11 @@ bool SrsRtspRequest::is_setup()
|
||||||
return method == __SRS_METHOD_SETUP;
|
return method == __SRS_METHOD_SETUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SrsRtspRequest::is_record()
|
||||||
|
{
|
||||||
|
return method == __SRS_METHOD_RECORD;
|
||||||
|
}
|
||||||
|
|
||||||
SrsRtspResponse::SrsRtspResponse(int cseq)
|
SrsRtspResponse::SrsRtspResponse(int cseq)
|
||||||
{
|
{
|
||||||
seq = cseq;
|
seq = cseq;
|
||||||
|
@ -513,6 +518,11 @@ int SrsRtspResponse::encode(stringstream& ss)
|
||||||
<< "Pragma: no-cache" << __SRS_RTSP_CRLF
|
<< "Pragma: no-cache" << __SRS_RTSP_CRLF
|
||||||
<< "Server: " << RTMP_SIG_SRS_SERVER << __SRS_RTSP_CRLF;
|
<< "Server: " << RTMP_SIG_SRS_SERVER << __SRS_RTSP_CRLF;
|
||||||
|
|
||||||
|
// session if specified.
|
||||||
|
if (!session.empty()) {
|
||||||
|
ss << __SRS_TOKEN_SESSION << ":" << session << __SRS_RTSP_CRLF;
|
||||||
|
}
|
||||||
|
|
||||||
if ((ret = encode_header(ss)) != ERROR_SUCCESS) {
|
if ((ret = encode_header(ss)) != ERROR_SUCCESS) {
|
||||||
srs_error("rtsp: encode header failed. ret=%d", ret);
|
srs_error("rtsp: encode header failed. ret=%d", ret);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -730,6 +740,13 @@ int SrsRtspStack::do_recv_message(SrsRtspRequest* req)
|
||||||
srs_error("rtsp: parse transport failed, transport=%s. ret=%d", transport.c_str(), ret);
|
srs_error("rtsp: parse transport failed, transport=%s. ret=%d", transport.c_str(), ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
} else if (token == __SRS_TOKEN_SESSION) {
|
||||||
|
if ((ret = recv_token_eof(req->session)) != ERROR_SUCCESS) {
|
||||||
|
if (!srs_is_client_gracefully_close(ret)) {
|
||||||
|
srs_error("rtsp: parse %s failed. ret=%d", __SRS_TOKEN_SESSION, ret);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// unknown header name, parse util EOF.
|
// unknown header name, parse util EOF.
|
||||||
SrsRtspTokenState state = SrsRtspTokenStateNormal;
|
SrsRtspTokenState state = SrsRtspTokenStateNormal;
|
||||||
|
|
|
@ -337,6 +337,10 @@ public:
|
||||||
* assumed. It is interpreted according to [H14.14].
|
* assumed. It is interpreted according to [H14.14].
|
||||||
*/
|
*/
|
||||||
long content_length;
|
long content_length;
|
||||||
|
/**
|
||||||
|
* the session id.
|
||||||
|
*/
|
||||||
|
std::string session;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the sdp in announce, NULL for no sdp.
|
* the sdp in announce, NULL for no sdp.
|
||||||
|
@ -357,6 +361,7 @@ public:
|
||||||
virtual bool is_options();
|
virtual bool is_options();
|
||||||
virtual bool is_announce();
|
virtual bool is_announce();
|
||||||
virtual bool is_setup();
|
virtual bool is_setup();
|
||||||
|
virtual bool is_record();
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -401,6 +406,10 @@ public:
|
||||||
* for retransmissions of the same request).
|
* for retransmissions of the same request).
|
||||||
*/
|
*/
|
||||||
long seq;
|
long seq;
|
||||||
|
/**
|
||||||
|
* the session id.
|
||||||
|
*/
|
||||||
|
std::string session;
|
||||||
public:
|
public:
|
||||||
SrsRtspResponse(int cseq);
|
SrsRtspResponse(int cseq);
|
||||||
virtual ~SrsRtspResponse();
|
virtual ~SrsRtspResponse();
|
||||||
|
|
Loading…
Reference in a new issue