mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
For #307, correct the RTP packet stat.
This commit is contained in:
parent
9d5c855727
commit
8e4ef98629
2 changed files with 27 additions and 7 deletions
|
@ -654,8 +654,9 @@ srs_error_t SrsRtcSenderThread::cycle()
|
|||
pprint->elapse();
|
||||
if (pprint->can_print()) {
|
||||
// TODO: FIXME: Print stat like frame/s, packet/s, loss_packets.
|
||||
srs_trace("-> RTC PLAY %d msgs, %d packets, %d audios, %d extras, %d videos, %d samples, %d bytes",
|
||||
msg_count, pkts.nn_rtp_pkts, pkts.nn_audios, pkts.nn_extras, pkts.nn_videos, pkts.nn_samples, pkts.nn_bytes);
|
||||
srs_trace("-> RTC PLAY %d msgs, %d/%d packets, %d audios, %d extras, %d videos, %d samples, %d bytes",
|
||||
msg_count, pkts.packets.size(), pkts.nn_rtp_pkts, pkts.nn_audios, pkts.nn_extras, pkts.nn_videos,
|
||||
pkts.nn_samples, pkts.nn_bytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -674,8 +675,6 @@ srs_error_t SrsRtcSenderThread::send_messages(
|
|||
return srs_error_wrap(err, "messages to packets");
|
||||
}
|
||||
|
||||
packets.nn_rtp_pkts = (int)packets.packets.size();
|
||||
|
||||
#ifndef SRS_AUTO_OSX
|
||||
// If enabled GSO, send out some packets in a msghdr.
|
||||
if (packets.use_gso) {
|
||||
|
@ -820,6 +819,9 @@ srs_error_t SrsRtcSenderThread::send_packets(SrsUdpMuxSocket* skt, SrsRtcPackets
|
|||
mhdr->msg_hdr.msg_controllen = 0;
|
||||
mhdr->msg_len = 0;
|
||||
|
||||
// When we send out a packet, we commit a RTP packet.
|
||||
packets.nn_rtp_pkts++;
|
||||
|
||||
if ((err = sender->sendmmsg(mhdr)) != srs_success) {
|
||||
return srs_error_wrap(err, "send msghdr");
|
||||
}
|
||||
|
@ -833,13 +835,12 @@ srs_error_t SrsRtcSenderThread::send_packets_gso(SrsUdpMuxSocket* skt, SrsRtcPac
|
|||
{
|
||||
srs_error_t err = srs_success;
|
||||
|
||||
ISrsUdpSender* sender = skt->sender();
|
||||
|
||||
// Previous handler, if has the same size, we can use GSO.
|
||||
mmsghdr* gso_mhdr = NULL; int gso_size = 0; int gso_encrypt = 0; int gso_cursor = 0;
|
||||
// GSO, N packets has same length, the final one may not.
|
||||
bool use_gso = false; bool gso_final = false;
|
||||
|
||||
ISrsUdpSender* sender = skt->sender();
|
||||
int nn_packets = (int)packets.packets.size();
|
||||
for (int i = 0; i < nn_packets; i++) {
|
||||
SrsRtpPacket2* packet = packets.packets[i];
|
||||
|
@ -950,7 +951,8 @@ srs_error_t SrsRtcSenderThread::send_packets_gso(SrsUdpMuxSocket* skt, SrsRtcPac
|
|||
bool do_send = (i == nn_packets - 1 || gso_final || !use_gso);
|
||||
|
||||
#if defined(SRS_DEBUG)
|
||||
srs_trace("packet SSRC=%d, SN=%d, %d bytes", packet->rtp_header.get_ssrc(),
|
||||
bool is_video = packet->rtp_header.get_payload_type() == video_payload_type;
|
||||
srs_trace("Packet %s SSRC=%d, SN=%d, %d bytes", is_video? "Video":"Audio", packet->rtp_header.get_ssrc(),
|
||||
packet->rtp_header.get_sequence(), nn_packet);
|
||||
if (do_send) {
|
||||
for (int j = 0; j < (int)mhdr->msg_hdr.msg_iovlen; j++) {
|
||||
|
@ -988,6 +990,9 @@ srs_error_t SrsRtcSenderThread::send_packets_gso(SrsUdpMuxSocket* skt, SrsRtcPac
|
|||
}
|
||||
#endif
|
||||
|
||||
// When we send out a packet, we commit a RTP packet.
|
||||
packets.nn_rtp_pkts++;
|
||||
|
||||
if ((err = sender->sendmmsg(mhdr)) != srs_success) {
|
||||
return srs_error_wrap(err, "send msghdr");
|
||||
}
|
||||
|
@ -998,6 +1003,11 @@ srs_error_t SrsRtcSenderThread::send_packets_gso(SrsUdpMuxSocket* skt, SrsRtcPac
|
|||
}
|
||||
}
|
||||
|
||||
#if defined(SRS_DEBUG)
|
||||
srs_trace("GSO packets, rtp %d/%d, videos %d/%d", packets.packets.size(),
|
||||
packets.nn_rtp_pkts, packets.nn_videos, packets.nn_samples, packets.nn_audios, packets.nn_extras);
|
||||
#endif
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -1816,6 +1826,7 @@ srs_error_t SrsUdpMuxSender::cycle()
|
|||
mmsghdr* p = &hotspot[0]; mmsghdr* end = p + pos;
|
||||
for (p = &hotspot[0]; p < end; p++) {
|
||||
if (!p->msg_len) {
|
||||
stat->perf_gso_on_packets(1);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -117,17 +117,26 @@ private:
|
|||
srs_error_t srtp_recv_init();
|
||||
};
|
||||
|
||||
// A group of RTP packets.
|
||||
class SrsRtcPackets
|
||||
{
|
||||
public:
|
||||
bool use_gso;
|
||||
bool should_merge_nalus;
|
||||
public:
|
||||
// The total bytes of RTP packets.
|
||||
int nn_bytes;
|
||||
// The RTP packets send out by sendmmsg or sendmsg. Note that if many packets group to
|
||||
// one msghdr by GSO, it's only one RTP packet, because we only send once.
|
||||
int nn_rtp_pkts;
|
||||
// For video, the samples or NALUs.
|
||||
int nn_samples;
|
||||
// For audio, the generated extra audio packets.
|
||||
// For example, when transcoding AAC to opus, may many extra payloads for a audio.
|
||||
int nn_extras;
|
||||
// The original audio messages.
|
||||
int nn_audios;
|
||||
// The original video messages.
|
||||
int nn_videos;
|
||||
public:
|
||||
std::vector<SrsRtpPacket2*> packets;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue