1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-02-13 11:51:57 +00:00

SRT: Wrap SRT stat object.

This commit is contained in:
winlin 2022-06-07 20:24:43 +08:00
parent 78b778fb93
commit 94cc50d146
3 changed files with 87 additions and 21 deletions

View file

@ -384,14 +384,12 @@ srs_error_t SrsMpegtsSrtConn::do_publishing()
// reportable
if (pprint->can_print()) {
SRT_TRACEBSTATS srt_stats;
srs_error_t err_tmp = srs_srt_get_stats(srt_fd_, &srt_stats, true);
if (err_tmp != srs_success) {
srs_freep(err_tmp);
SrsSrtStat s;
if ((err = s.fetch(srt_fd_, true)) != srs_success) {
srs_freep(err);
} else {
srs_trace("<- " SRS_CONSTS_LOG_SRT_PUBLISH " Transport Stats # "
"pktRecv=%ld, pktRcvLoss=%d, pktRcvRetrans=%d, pktRcvDrop=%d",
srt_stats.pktRecv, srt_stats.pktRcvLoss, srt_stats.pktRcvRetrans, srt_stats.pktRcvDrop);
srs_trace("<- " SRS_CONSTS_LOG_SRT_PUBLISH " Transport Stats # pktRecv=%" PRId64 ", pktRcvLoss=%d, pktRcvRetrans=%d, pktRcvDrop=%d",
s.pktRecv(), s.pktRcvLoss(), s.pktRcvRetrans(), s.pktRcvDrop());
}
kbps_->sample();
@ -467,14 +465,12 @@ srs_error_t SrsMpegtsSrtConn::do_playing()
// reportable
if (pprint->can_print()) {
SRT_TRACEBSTATS srt_stats;
srs_error_t err_tmp = srs_srt_get_stats(srt_fd_, &srt_stats, true);
if (err_tmp != srs_success) {
srs_freep(err_tmp);
SrsSrtStat s;
if ((err = s.fetch(srt_fd_, true)) != srs_success) {
srs_freep(err);
} else {
srs_trace("-> " SRS_CONSTS_LOG_SRT_PLAY " Transport Stats # "
"pktSent=%ld, pktSndLoss=%d, pktRetrans=%d, pktSndDrop=%d",
srt_stats.pktSent, srt_stats.pktSndLoss, srt_stats.pktRetrans, srt_stats.pktSndDrop);
srs_trace("-> " SRS_CONSTS_LOG_SRT_PLAY " Transport Stats # pktSent=%" PRId64 ", pktSndLoss=%d, pktRetrans=%d, pktSndDrop=%d",
s.pktSent(), s.pktSndLoss(), s.pktRetrans(), s.pktSndDrop());
}
kbps_->sample();

View file

@ -376,13 +376,64 @@ srs_error_t srs_srt_get_remote_ip_port(SRTSOCKET srt_fd, std::string& ip, int& p
return err;
}
srs_error_t srs_srt_get_stats(SRTSOCKET srt_fd, SRT_TRACEBSTATS* srt_stats, bool clear)
SrsSrtStat::SrsSrtStat()
{
stat_ = new SRT_TRACEBSTATS();
}
SrsSrtStat::~SrsSrtStat()
{
SRT_TRACEBSTATS* p = (SRT_TRACEBSTATS*)stat_;
srs_freep(p);
}
int64_t SrsSrtStat::pktRecv()
{
return ((SRT_TRACEBSTATS*)stat_)->pktRecv;
}
int SrsSrtStat::pktRcvLoss()
{
return ((SRT_TRACEBSTATS*)stat_)->pktRcvLoss;
}
int SrsSrtStat::pktRcvRetrans()
{
return ((SRT_TRACEBSTATS*)stat_)->pktRcvRetrans;
}
int SrsSrtStat::pktRcvDrop()
{
return ((SRT_TRACEBSTATS*)stat_)->pktRcvDrop;
}
int64_t SrsSrtStat::pktSent()
{
return ((SRT_TRACEBSTATS*)stat_)->pktSent;
}
int SrsSrtStat::pktSndLoss()
{
return ((SRT_TRACEBSTATS*)stat_)->pktSndLoss;
}
int SrsSrtStat::pktRetrans()
{
return ((SRT_TRACEBSTATS*)stat_)->pktRetrans;
}
int SrsSrtStat::pktSndDrop()
{
return ((SRT_TRACEBSTATS*)stat_)->pktSndDrop;
}
srs_error_t SrsSrtStat::fetch(SRTSOCKET srt_fd, bool clear)
{
srs_error_t err = srs_success;
int ret = srt_bstats(srt_fd, srt_stats, clear);
if (ret != 0) {
return srs_error_new(ERROR_SRT_STATS, "srt_bstats");
int r0 = srt_bstats(srt_fd, (SRT_TRACEBSTATS*)stat_, clear);
if (r0) {
return srs_error_new(ERROR_SRT_STATS, "srt_bstats r0=%d", r0);
}
return err;

View file

@ -15,6 +15,8 @@
#include <srt/srt.h>
class SrsSrtSocket;
// Create srt socket only, with libsrt's default option.
extern srs_error_t srs_srt_socket(SRTSOCKET* pfd);
@ -62,9 +64,26 @@ extern srs_error_t srs_srt_get_local_ip_port(SRTSOCKET srt_fd, std::string& ip,
extern srs_error_t srs_srt_get_remote_ip_port(SRTSOCKET srt_fd, std::string& ip, int& port);
// Get SRT stats.
extern srs_error_t srs_srt_get_stats(SRTSOCKET srt_fd, SRT_TRACEBSTATS* srt_stats, bool clear);
class SrsSrtSocket;
class SrsSrtStat
{
private:
void* stat_;
public:
SrsSrtStat();
virtual ~SrsSrtStat();
public:
int64_t pktRecv();
int pktRcvLoss();
int pktRcvRetrans();
int pktRcvDrop();
public:
int64_t pktSent();
int pktSndLoss();
int pktRetrans();
int pktSndDrop();
public:
srs_error_t fetch(SRTSOCKET srt_fd, bool clear);
};
// Srt poller, subscribe/unsubscribed events and wait them fired.
class SrsSrtPoller