mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
Merge branch 'dev-28181' of https://github.com/xialixin/srs into xialixin-dev-28181
This commit is contained in:
commit
33455867f9
15 changed files with 2524 additions and 980 deletions
|
@ -53,6 +53,7 @@ using namespace std;
|
|||
#include <srs_app_thread.hpp>
|
||||
#include <srs_app_coworkers.hpp>
|
||||
#include <srs_app_gb28181.hpp>
|
||||
#include <srs_app_gb28181_sip.hpp>
|
||||
|
||||
// system interval in srs_utime_t,
|
||||
// all resolution times should be times togother,
|
||||
|
@ -110,8 +111,10 @@ std::string srs_listener_type2string(SrsListenerType type)
|
|||
return "RTSP";
|
||||
case SrsListenerFlv:
|
||||
return "HTTP-FLV";
|
||||
case SrsListenerGb28181:
|
||||
case SrsListenerGb28181Sip:
|
||||
return "GB28181-SIP over UDP";
|
||||
case SrsListenerGb28181RtpMux:
|
||||
return "GB28181-Stream over RTP";
|
||||
default:
|
||||
return "UNKONWN";
|
||||
}
|
||||
|
@ -304,7 +307,9 @@ srs_error_t SrsUdpStreamListener::listen(string i, int p)
|
|||
|
||||
// the caller already ensure the type is ok,
|
||||
// we just assert here for unknown stream caster.
|
||||
srs_assert(type == SrsListenerMpegTsOverUdp || type == SrsListenerGb28181);
|
||||
srs_assert(type == SrsListenerMpegTsOverUdp
|
||||
|| type == SrsListenerGb28181Sip
|
||||
|| type == SrsListenerGb28181RtpMux);
|
||||
|
||||
ip = i;
|
||||
port = p;
|
||||
|
@ -347,9 +352,13 @@ SrsGb28181Listener::SrsGb28181Listener(SrsServer* svr, SrsListenerType t, SrsCon
|
|||
{
|
||||
// the caller already ensure the type is ok,
|
||||
// we just assert here for unknown stream caster.
|
||||
srs_assert(type == SrsListenerGb28181);
|
||||
if (type == SrsListenerGb28181) {
|
||||
caster = new SrsGb28181Caster(c);
|
||||
srs_assert(type == SrsListenerGb28181Sip
|
||||
||type == SrsListenerGb28181RtpMux);
|
||||
|
||||
if (type == SrsListenerGb28181Sip) {
|
||||
caster = new SrsGb28181SipService(c);
|
||||
}else if(type == SrsListenerGb28181RtpMux){
|
||||
caster = new SrsGb28181RtpMuxService(c);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -676,6 +685,9 @@ void SrsServer::destroy()
|
|||
|
||||
srs_freep(signal_manager);
|
||||
srs_freep(conn_manager);
|
||||
|
||||
//free global gb28281 manager
|
||||
srs_freep(_srs_gb28181);
|
||||
}
|
||||
|
||||
void SrsServer::dispose()
|
||||
|
@ -966,6 +978,10 @@ srs_error_t SrsServer::http_handle()
|
|||
if ((err = http_api_mux->handle("/api/v1/clusters", new SrsGoApiClusters())) != srs_success) {
|
||||
return srs_error_wrap(err, "handle raw");
|
||||
}
|
||||
|
||||
if ((err = http_api_mux->handle("/api/v1/gb28181", new SrsGoApiGb28181())) != srs_success) {
|
||||
return srs_error_wrap(err, "handle raw");
|
||||
}
|
||||
|
||||
// test the request info.
|
||||
if ((err = http_api_mux->handle("/api/v1/tests/requests", new SrsGoApiRequests())) != srs_success) {
|
||||
|
@ -1320,6 +1336,30 @@ srs_error_t SrsServer::listen_http_stream()
|
|||
return err;
|
||||
}
|
||||
|
||||
srs_error_t SrsServer::listen_gb28281_sip(SrsConfDirective* stream_caster)
|
||||
{
|
||||
srs_error_t err = srs_success;
|
||||
|
||||
SrsListener* sip_listener = NULL;
|
||||
sip_listener = new SrsGb28181Listener(this, SrsListenerGb28181Sip, stream_caster);
|
||||
|
||||
int port = _srs_config->get_stream_caster_gb28181_sip_listen(stream_caster);
|
||||
if (port <= 0) {
|
||||
return srs_error_new(ERROR_STREAM_CASTER_PORT, "invalid sip port=%d", port);
|
||||
}
|
||||
|
||||
srs_assert(sip_listener != NULL);
|
||||
|
||||
listeners.push_back(sip_listener);
|
||||
|
||||
// TODO: support listen at <[ip:]port>
|
||||
if ((err = sip_listener->listen(srs_any_address_for_listener(), port)) != srs_success) {
|
||||
return srs_error_wrap(err, "listen at %d", port);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
srs_error_t SrsServer::listen_stream_caster()
|
||||
{
|
||||
srs_error_t err = srs_success;
|
||||
|
@ -1345,19 +1385,33 @@ srs_error_t SrsServer::listen_stream_caster()
|
|||
} else if (srs_stream_caster_is_flv(caster)) {
|
||||
listener = new SrsHttpFlvListener(this, SrsListenerFlv, stream_caster);
|
||||
} else if (srs_stream_caster_is_gb28181(caster)) {
|
||||
listener = new SrsGb28181Listener(this, SrsListenerGb28181, stream_caster);
|
||||
//init global gb28281 manger
|
||||
if (_srs_gb28181 == NULL){
|
||||
_srs_gb28181 = new SrsGb28181Manger(stream_caster);
|
||||
if ((err = _srs_gb28181->initialize()) != srs_success){
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
//sip listener
|
||||
if (_srs_config->get_stream_caster_gb28181_sip_enable(stream_caster)){
|
||||
if ((err = listen_gb28281_sip(stream_caster)) != srs_success){
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
//gb28281 stream listener
|
||||
listener = new SrsGb28181Listener(this, SrsListenerGb28181RtpMux, stream_caster);
|
||||
} else {
|
||||
return srs_error_new(ERROR_STREAM_CASTER_ENGINE, "invalid caster %s", caster.c_str());
|
||||
}
|
||||
srs_assert(listener != NULL);
|
||||
|
||||
listeners.push_back(listener);
|
||||
|
||||
int port = _srs_config->get_stream_caster_listen(stream_caster);
|
||||
if (port <= 0) {
|
||||
return srs_error_new(ERROR_STREAM_CASTER_PORT, "invalid port=%d", port);
|
||||
}
|
||||
|
||||
// TODO: support listen at <[ip:]port>
|
||||
if ((err = listener->listen(srs_any_address_for_listener(), port)) != srs_success) {
|
||||
return srs_error_wrap(err, "listen at %d", port);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue