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:
parent
b452144fb7
commit
173c683566
13 changed files with 601 additions and 762 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue