mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
Refactor GB28181 code
This commit is contained in:
parent
7bec73f224
commit
82396ec112
2 changed files with 150 additions and 164 deletions
|
@ -1672,6 +1672,19 @@ srs_error_t SrsGoApiGb28181::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessa
|
||||||
{
|
{
|
||||||
srs_error_t err = srs_success;
|
srs_error_t err = srs_success;
|
||||||
|
|
||||||
|
if ((err = do_serve_http(w, r)) != srs_success) {
|
||||||
|
srs_warn("Server GB28181 err %s", srs_error_desc(err).c_str());
|
||||||
|
int code = srs_error_code(err); srs_error_reset(err);
|
||||||
|
return srs_api_response_code(w, r, code);
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
srs_error_t SrsGoApiGb28181::do_serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
|
||||||
|
{
|
||||||
|
srs_error_t err = srs_success;
|
||||||
|
|
||||||
SrsJsonObject* obj = SrsJsonAny::object();
|
SrsJsonObject* obj = SrsJsonAny::object();
|
||||||
SrsAutoFree(SrsJsonObject, obj);
|
SrsAutoFree(SrsJsonObject, obj);
|
||||||
|
|
||||||
|
@ -1687,10 +1700,13 @@ srs_error_t SrsGoApiGb28181::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessa
|
||||||
//fixed, random
|
//fixed, random
|
||||||
string port_mode = r->query_get("port_mode");
|
string port_mode = r->query_get("port_mode");
|
||||||
|
|
||||||
if (_srs_gb28181) {
|
if (!_srs_gb28181) {
|
||||||
|
return srs_error_new(ERROR_GB28181_SERVER_NOT_RUN, "no gb28181 engine");
|
||||||
|
}
|
||||||
|
|
||||||
if(action == "create_channel"){
|
if(action == "create_channel"){
|
||||||
if (id.empty()){
|
if (id.empty()){
|
||||||
return srs_api_response_code(w, r, ERROR_GB28181_VALUE_EMPTY);
|
return srs_error_new(ERROR_GB28181_VALUE_EMPTY, "no id");
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsGb28181StreamChannel channel;
|
SrsGb28181StreamChannel channel;
|
||||||
|
@ -1700,8 +1716,7 @@ srs_error_t SrsGoApiGb28181::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessa
|
||||||
channel.set_port_mode(port_mode);
|
channel.set_port_mode(port_mode);
|
||||||
|
|
||||||
if ((err = _srs_gb28181->create_stream_channel(&channel)) != srs_success) {
|
if ((err = _srs_gb28181->create_stream_channel(&channel)) != srs_success) {
|
||||||
int code = srs_error_code(err); srs_error_reset(err);
|
return srs_error_wrap(err, "create stream channel");
|
||||||
return srs_api_response_code(w, r, code);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
data->set("query", SrsJsonAny::object()
|
data->set("query", SrsJsonAny::object()
|
||||||
|
@ -1714,35 +1729,29 @@ srs_error_t SrsGoApiGb28181::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessa
|
||||||
->set("ssrc", SrsJsonAny::integer(channel.get_ssrc())));
|
->set("ssrc", SrsJsonAny::integer(channel.get_ssrc())));
|
||||||
return srs_api_response(w, r, obj->dumps());
|
return srs_api_response(w, r, obj->dumps());
|
||||||
|
|
||||||
}
|
} else if(action == "delete_channel"){
|
||||||
else if(action == "delete_channel"){
|
|
||||||
if (id.empty()){
|
if (id.empty()){
|
||||||
return srs_api_response_code(w, r, ERROR_GB28181_VALUE_EMPTY);
|
return srs_error_new(ERROR_GB28181_VALUE_EMPTY, "no id");
|
||||||
}
|
}
|
||||||
|
|
||||||
err =_srs_gb28181->delete_stream_channel(id);
|
if ((err = _srs_gb28181->delete_stream_channel(id)) != srs_success) {
|
||||||
int code = srs_error_code(err);
|
return srs_error_wrap(err, "delete stream channel");
|
||||||
if (err != srs_success) {
|
|
||||||
srs_error_reset(err);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return srs_api_response_code(w, r, code);
|
return srs_api_response_code(w, r, code);
|
||||||
}
|
} else if(action == "query_channel") {
|
||||||
else if(action == "query_channel") {
|
|
||||||
SrsJsonArray* arr = SrsJsonAny::array();
|
SrsJsonArray* arr = SrsJsonAny::array();
|
||||||
data->set("channels", arr);
|
data->set("channels", arr);
|
||||||
|
|
||||||
if ((err = _srs_gb28181->query_stream_channel(id, arr)) != srs_success) {
|
if ((err = _srs_gb28181->query_stream_channel(id, arr)) != srs_success) {
|
||||||
int code = srs_error_code(err); srs_error_reset(err);
|
return srs_error_wrap(err, "query stream channel");
|
||||||
return srs_api_response_code(w, r, code);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return srs_api_response(w, r, obj->dumps());
|
return srs_api_response(w, r, obj->dumps());
|
||||||
}
|
} else if(action == "sip_invite"){
|
||||||
else if(action == "sip_invite"){
|
|
||||||
string chid = r->query_get("chid");
|
string chid = r->query_get("chid");
|
||||||
if (id.empty() || chid.empty()){
|
if (id.empty() || chid.empty()){
|
||||||
return srs_api_response_code(w, r, ERROR_GB28181_VALUE_EMPTY);
|
return srs_error_new(ERROR_GB28181_VALUE_EMPTY, "no id or chid");
|
||||||
}
|
}
|
||||||
|
|
||||||
string ssrc = r->query_get("ssrc");
|
string ssrc = r->query_get("ssrc");
|
||||||
|
@ -1752,108 +1761,83 @@ srs_error_t SrsGoApiGb28181::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessa
|
||||||
int _port = strtoul(rtp_port.c_str(), NULL, 10);
|
int _port = strtoul(rtp_port.c_str(), NULL, 10);
|
||||||
uint32_t _ssrc = (uint32_t)(strtoul(ssrc.c_str(), NULL, 10));
|
uint32_t _ssrc = (uint32_t)(strtoul(ssrc.c_str(), NULL, 10));
|
||||||
|
|
||||||
err = _srs_gb28181->notify_sip_invite(id, ip, _port, _ssrc, chid);
|
if ((err = _srs_gb28181->notify_sip_invite(id, ip, _port, _ssrc, chid)) != srs_success) {
|
||||||
int code = srs_error_code(err);
|
return srs_error_wrap(err, "notify sip invite");
|
||||||
if (err != srs_success) {
|
|
||||||
srs_error_reset(err);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return srs_api_response_code(w, r, code);
|
return srs_api_response_code(w, r, code);
|
||||||
}
|
} else if(action == "sip_bye"){
|
||||||
else if(action == "sip_bye"){
|
|
||||||
string chid = r->query_get("chid");
|
string chid = r->query_get("chid");
|
||||||
if (id.empty() || chid.empty()){
|
if (id.empty() || chid.empty()){
|
||||||
return srs_api_response_code(w, r, ERROR_GB28181_VALUE_EMPTY);
|
return srs_error_new(ERROR_GB28181_VALUE_EMPTY, "no id or chid");
|
||||||
}
|
}
|
||||||
|
|
||||||
err = _srs_gb28181->notify_sip_bye(id, chid);
|
if ((err = _srs_gb28181->notify_sip_bye(id, chid)) != srs_success) {
|
||||||
int code = srs_error_code(err);
|
return srs_error_wrap(err, "notify sip bye");
|
||||||
if (err != srs_success) {
|
|
||||||
srs_error_reset(err);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return srs_api_response_code(w, r, code);
|
return srs_api_response_code(w, r, code);
|
||||||
}
|
} else if(action == "sip_ptz"){
|
||||||
else if(action == "sip_ptz"){
|
|
||||||
string chid = r->query_get("chid");
|
string chid = r->query_get("chid");
|
||||||
string ptzcmd = r->query_get("ptzcmd");
|
string ptzcmd = r->query_get("ptzcmd");
|
||||||
string speed = r->query_get("speed");
|
string speed = r->query_get("speed");
|
||||||
string priority = r->query_get("priority");
|
string priority = r->query_get("priority");
|
||||||
if (id.empty() || chid.empty() || ptzcmd.empty() || speed.empty()){
|
if (id.empty() || chid.empty() || ptzcmd.empty() || speed.empty()){
|
||||||
return srs_api_response_code(w, r, ERROR_GB28181_VALUE_EMPTY);
|
return srs_error_new(ERROR_GB28181_VALUE_EMPTY, "no id or chid or ptzcmd or speed");
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t _speed = (uint8_t)(strtoul(speed.c_str(), NULL, 10));
|
uint8_t _speed = (uint8_t)(strtoul(speed.c_str(), NULL, 10));
|
||||||
int _priority = (int)(strtoul(priority.c_str(), NULL, 10));
|
int _priority = (int)(strtoul(priority.c_str(), NULL, 10));
|
||||||
|
|
||||||
err = _srs_gb28181->notify_sip_ptz(id, chid, ptzcmd, _speed, _priority);
|
if ((err = _srs_gb28181->notify_sip_ptz(id, chid, ptzcmd, _speed, _priority)) != srs_success) {
|
||||||
int code = srs_error_code(err);
|
return srs_error_wrap(err, "notify sip ptz");
|
||||||
if (err != srs_success) {
|
|
||||||
srs_error_reset(err);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return srs_api_response_code(w, r, code);
|
return srs_api_response_code(w, r, code);
|
||||||
}
|
} else if(action == "sip_raw_data"){
|
||||||
else if(action == "sip_raw_data"){
|
|
||||||
if (id.empty()){
|
if (id.empty()){
|
||||||
return srs_api_response_code(w, r, ERROR_GB28181_VALUE_EMPTY);
|
return srs_error_new(ERROR_GB28181_VALUE_EMPTY, "no id");
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string body;
|
std::string body;
|
||||||
r->body_read_all(body);
|
r->body_read_all(body);
|
||||||
|
|
||||||
err = _srs_gb28181->notify_sip_raw_data(id, body);
|
if ((err = _srs_gb28181->notify_sip_raw_data(id, body)) != srs_success) {
|
||||||
int code = srs_error_code(err);
|
return srs_error_wrap(err, "notify sip raw data");
|
||||||
if (err != srs_success) {
|
|
||||||
srs_error_reset(err);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return srs_api_response_code(w, r, code);
|
return srs_api_response_code(w, r, code);
|
||||||
}
|
} else if(action == "sip_unregister"){
|
||||||
else if(action == "sip_unregister"){
|
|
||||||
if (id.empty()){
|
if (id.empty()){
|
||||||
return srs_api_response_code(w, r, ERROR_GB28181_VALUE_EMPTY);
|
return srs_error_new(ERROR_GB28181_VALUE_EMPTY, "no id");
|
||||||
}
|
}
|
||||||
|
|
||||||
err = _srs_gb28181->notify_sip_unregister(id);
|
if ((err = _srs_gb28181->notify_sip_unregister(id)) != srs_success) {
|
||||||
int code = srs_error_code(err);
|
return srs_error_wrap(err, "notify sip unregister");
|
||||||
if (err != srs_success) {
|
|
||||||
srs_error_reset(err);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return srs_api_response_code(w, r, code);
|
return srs_api_response_code(w, r, code);
|
||||||
}
|
} else if(action == "sip_query_catalog"){
|
||||||
else if(action == "sip_query_catalog"){
|
|
||||||
if (id.empty()){
|
if (id.empty()){
|
||||||
return srs_api_response_code(w, r, ERROR_GB28181_VALUE_EMPTY);
|
return srs_error_new(ERROR_GB28181_VALUE_EMPTY, "no id");
|
||||||
}
|
}
|
||||||
|
|
||||||
err = _srs_gb28181->notify_sip_query_catalog(id);
|
if ((err = _srs_gb28181->notify_sip_query_catalog(id)) != srs_success) {
|
||||||
int code = srs_error_code(err);
|
return srs_error_wrap(err, "notify sip query catelog");
|
||||||
if (err != srs_success) {
|
|
||||||
srs_error_reset(err);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return srs_api_response_code(w, r, code);
|
return srs_api_response_code(w, r, code);
|
||||||
}
|
} else if(action == "sip_query_session"){
|
||||||
else if(action == "sip_query_session"){
|
|
||||||
SrsJsonArray* arr = SrsJsonAny::array();
|
SrsJsonArray* arr = SrsJsonAny::array();
|
||||||
data->set("sessions", arr);
|
data->set("sessions", arr);
|
||||||
|
|
||||||
if ((err = _srs_gb28181->query_sip_session(id, arr)) != srs_success) {
|
if ((err = _srs_gb28181->query_sip_session(id, arr)) != srs_success) {
|
||||||
int code = srs_error_code(err); srs_error_reset(err);
|
return srs_error_wrap(err, "notify sip session");
|
||||||
return srs_api_response_code(w, r, code);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return srs_api_response(w, r, obj->dumps());
|
return srs_api_response(w, r, obj->dumps());
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return srs_api_response_code(w, r, ERROR_GB28181_ACTION_INVALID);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return srs_api_response_code(w, r, ERROR_GB28181_SERVER_NOT_RUN);
|
return srs_error_new(ERROR_GB28181_ACTION_INVALID, "action %s", action.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -249,6 +249,8 @@ public:
|
||||||
virtual ~SrsGoApiGb28181();
|
virtual ~SrsGoApiGb28181();
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r);
|
virtual srs_error_t serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r);
|
||||||
|
private:
|
||||||
|
virtual srs_error_t do_serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r);
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue