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

Support fast padding

This commit is contained in:
winlin 2020-04-17 18:04:52 +08:00
parent e4eb501c57
commit cf52390cf2
7 changed files with 37 additions and 6 deletions

View file

@ -195,15 +195,19 @@ srs_error_t SrsRtpOpusMuxer::transcode(SrsSharedPtrMessage* shared_audio, char*
return err;
}
int nn_max_extra_payload = 0;
SrsSample samples[nn_opus_packets];
for (int i = 0; i < nn_opus_packets; i++) {
SrsSample* p = samples + i;
p->size = opus_sizes[i];
p->bytes = new char[p->size];
memcpy(p->bytes, opus_payloads[i], p->size);
nn_max_extra_payload = srs_max(nn_max_extra_payload, p->size);
}
shared_audio->set_extra_payloads(samples, nn_opus_packets);
shared_audio->set_max_extra_payload(nn_max_extra_payload);
return err;
}

View file

@ -830,7 +830,7 @@ srs_error_t SrsRtcSenderThread::messages_to_packets(
for (int i = 0; i < nn_extra_payloads; i++) {
SrsSample* sample = msg->extra_payloads() + i;
if ((err = packet_opus(sample, packets)) != srs_success) {
if ((err = packet_opus(sample, packets, msg->nn_max_extra_payloads())) != srs_success) {
return srs_error_wrap(err, "opus package");
}
}
@ -1003,7 +1003,7 @@ srs_error_t SrsRtcSenderThread::send_packets_gso(SrsRtcPackets& packets)
srs_trace("#%d, Padding %d bytes %d=>%d, packets %d, max_padding %d", packets.debug_id,
padding, nn_packet, nn_packet + padding, nn_packets, max_padding);
#endif
packet->set_padding(padding);
packet->add_padding(padding);
nn_packet += padding;
packets.nn_paddings++;
packets.nn_padding_bytes += padding;
@ -1232,7 +1232,7 @@ srs_error_t SrsRtcSenderThread::packet_nalus(SrsSharedPtrMessage* msg, SrsRtcPac
return err;
}
srs_error_t SrsRtcSenderThread::packet_opus(SrsSample* sample, SrsRtcPackets& packets)
srs_error_t SrsRtcSenderThread::packet_opus(SrsSample* sample, SrsRtcPackets& packets, int nn_max_payload)
{
srs_error_t err = srs_success;
@ -1247,6 +1247,18 @@ srs_error_t SrsRtcSenderThread::packet_opus(SrsSample* sample, SrsRtcPackets& pa
raw->payload = sample->bytes;
raw->nn_payload = sample->size;
if (max_padding > 0) {
if (sample->size < nn_max_payload && nn_max_payload - sample->size < max_padding) {
int padding = nn_max_payload - sample->size;
packet->set_padding(padding);
#if defined(SRS_DEBUG)
srs_trace("#%d, Fast Padding %d bytes %d=>%d, SN=%d, max_payload %d, max_padding %d", packets.debug_id,
padding, sample->size, sample->size + padding, packet->rtp_header.get_sequence(), nn_max_payload, max_padding);
#endif
}
}
// TODO: FIXME: Why 960? Need Refactoring?
audio_timestamp += 960;

View file

@ -193,7 +193,6 @@ private:
bool merge_nalus;
bool gso;
int max_padding;
public:
SrsRtcSenderThread(SrsRtcSession* s, SrsUdpMuxSocket* u, int parent_cid);
virtual ~SrsRtcSenderThread();
@ -218,7 +217,7 @@ private:
srs_error_t send_packets(SrsRtcPackets& packets);
srs_error_t send_packets_gso(SrsRtcPackets& packets);
private:
srs_error_t packet_opus(SrsSample* sample, SrsRtcPackets& packets);
srs_error_t packet_opus(SrsSample* sample, SrsRtcPackets& packets, int nn_max_payload);
private:
srs_error_t packet_fu_a(SrsSharedPtrMessage* msg, SrsSample* sample, int fu_payload_size, SrsRtcPackets& packets);
srs_error_t packet_nalus(SrsSharedPtrMessage* msg, SrsRtcPackets& packets);