1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

GB28181: Refine SRS listeners without wrapper.

This commit is contained in:
winlin 2022-09-17 13:38:28 +08:00
parent b452144fb7
commit 173c683566
13 changed files with 601 additions and 762 deletions

View file

@ -34,6 +34,52 @@ using namespace std;
#include <srs_app_rtmp_conn.hpp>
#include <srs_protocol_utility.hpp>
SrsUdpCasterListener::SrsUdpCasterListener()
{
caster_ = new SrsMpegtsOverUdp();
listener_ = new SrsUdpListener(caster_);
}
SrsUdpCasterListener::~SrsUdpCasterListener()
{
srs_freep(listener_);
srs_freep(caster_);
}
srs_error_t SrsUdpCasterListener::initialize(SrsConfDirective* conf)
{
srs_error_t err = srs_success;
int port = _srs_config->get_stream_caster_listen(conf);
if (port <= 0) {
return srs_error_new(ERROR_STREAM_CASTER_PORT, "invalid port=%d", port);
}
listener_->set_endpoint(srs_any_address_for_listener(), port)->set_label("MPEGTS");
if ((err = caster_->initialize(conf)) != srs_success) {
return srs_error_wrap(err, "init caster port=%d", port);
}
return err;
}
srs_error_t SrsUdpCasterListener::listen()
{
srs_error_t err = srs_success;
if ((err = listener_->listen()) != srs_success) {
return srs_error_wrap(err, "listen");
}
return err;
}
void SrsUdpCasterListener::close()
{
listener_->close();
}
SrsMpegtsQueue::SrsMpegtsQueue()
{
nb_audios = nb_videos = 0;
@ -62,7 +108,7 @@ srs_error_t SrsMpegtsQueue::push(SrsSharedPtrMessage* msg)
// adjust the ts, add 1ms.
msg->timestamp += 1;
if (i >= 5) {
if (i >= 100) {
srs_warn("mpegts: free the msg for dts exists, dts=%" PRId64, msg->timestamp);
srs_freep(msg);
return err;
@ -108,11 +154,10 @@ SrsSharedPtrMessage* SrsMpegtsQueue::dequeue()
return NULL;
}
SrsMpegtsOverUdp::SrsMpegtsOverUdp(SrsConfDirective* c)
SrsMpegtsOverUdp::SrsMpegtsOverUdp()
{
context = new SrsTsContext();
buffer = new SrsSimpleStream();
output = _srs_config->get_stream_caster_output(c);
sdk = NULL;
@ -137,6 +182,12 @@ SrsMpegtsOverUdp::~SrsMpegtsOverUdp()
srs_freep(pprint);
}
srs_error_t SrsMpegtsOverUdp::initialize(SrsConfDirective* c)
{
output = _srs_config->get_stream_caster_output(c);
return srs_success;
}
srs_error_t SrsMpegtsOverUdp::on_udp_packet(const sockaddr* from, const int fromlen, char* buf, int nb_buf)
{
char address_string[64];
@ -223,7 +274,7 @@ srs_error_t SrsMpegtsOverUdp::on_udp_bytes(string host, int port, char* buf, int
// process each ts packet
if ((err = context->decode(stream, this)) != srs_success) {
srs_warn("parse ts packet err=%s", srs_error_desc(err).c_str());
srs_info("parse ts packet err=%s", srs_error_desc(err).c_str());
srs_error_reset(err);
continue;
}