mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
RTC: process twcc before srtp unprotected
This commit is contained in:
parent
121266ecbf
commit
6ff048ed35
3 changed files with 28 additions and 13 deletions
|
@ -1196,6 +1196,25 @@ srs_error_t SrsRtcPublisher::on_rtp(char* data, int nb_data)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (0 != twcc_ext_id_) {
|
||||||
|
SrsBuffer b0(data, nb_data); SrsRtpHeader h0;
|
||||||
|
h0.set_decode_only_header(true);
|
||||||
|
h0.set_extensions(&extension_types_);
|
||||||
|
if ((err = h0.decode(&b0)) != srs_success) {
|
||||||
|
return srs_error_wrap(err, "process twcc to decode rtp header");
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t twcc_sn = 0;
|
||||||
|
if ((err = h0.get_twcc_sequence_number(twcc_sn)) == srs_success) {
|
||||||
|
if((err = on_twcc(twcc_sn)) != srs_success) {
|
||||||
|
return srs_error_wrap(err, "fail to process twcc packet");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// TODO: FIXME: process no twcc seq number for audio ssrc
|
||||||
|
srs_error_reset(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Decrypt the cipher to plaintext RTP data.
|
// Decrypt the cipher to plaintext RTP data.
|
||||||
int nb_unprotected_buf = nb_data;
|
int nb_unprotected_buf = nb_data;
|
||||||
char* unprotected_buf = new char[kRtpPacketSize];
|
char* unprotected_buf = new char[kRtpPacketSize];
|
||||||
|
@ -1232,18 +1251,6 @@ srs_error_t SrsRtcPublisher::on_rtp(char* data, int nb_data)
|
||||||
if ((err = pkt->decode(&b)) != srs_success) {
|
if ((err = pkt->decode(&b)) != srs_success) {
|
||||||
return srs_error_wrap(err, "decode rtp packet");
|
return srs_error_wrap(err, "decode rtp packet");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (0 != twcc_ext_id_) {
|
|
||||||
uint16_t twcc_sn = 0;
|
|
||||||
if ((err = pkt->header.get_twcc_sequence_number(twcc_sn)) == srs_success) {
|
|
||||||
if((err = on_twcc(twcc_sn))) {
|
|
||||||
return srs_error_wrap(err, "fail to process twcc packet");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// TODO: FIXME: process no twcc seq number for audio ssrc
|
|
||||||
srs_error_reset(err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// For source to consume packet.
|
// For source to consume packet.
|
||||||
|
|
|
@ -319,6 +319,7 @@ SrsRtpHeader::SrsRtpHeader()
|
||||||
sequence = 0;
|
sequence = 0;
|
||||||
timestamp = 0;
|
timestamp = 0;
|
||||||
ssrc = 0;
|
ssrc = 0;
|
||||||
|
decode_only_header_ = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsRtpHeader::~SrsRtpHeader()
|
SrsRtpHeader::~SrsRtpHeader()
|
||||||
|
@ -376,7 +377,7 @@ srs_error_t SrsRtpHeader::decode(SrsBuffer* buf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (padding && !buf->empty()) {
|
if (padding && !buf->empty() && !decode_only_header_) {
|
||||||
padding_length = *(reinterpret_cast<uint8_t*>(buf->data() + buf->size() - 1));
|
padding_length = *(reinterpret_cast<uint8_t*>(buf->data() + buf->size() - 1));
|
||||||
if (!buf->require(padding_length)) {
|
if (!buf->require(padding_length)) {
|
||||||
return srs_error_new(ERROR_RTC_RTP_MUXER, "padding requires %d bytes", padding_length);
|
return srs_error_new(ERROR_RTC_RTP_MUXER, "padding requires %d bytes", padding_length);
|
||||||
|
@ -448,6 +449,11 @@ void SrsRtpHeader::set_extensions(const SrsRtpExtensionTypes* extmap)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SrsRtpHeader::set_decode_only_header(bool only_header)
|
||||||
|
{
|
||||||
|
decode_only_header_ = only_header;
|
||||||
|
}
|
||||||
|
|
||||||
srs_error_t SrsRtpHeader::get_twcc_sequence_number(uint16_t& twcc_sn)
|
srs_error_t SrsRtpHeader::get_twcc_sequence_number(uint16_t& twcc_sn)
|
||||||
{
|
{
|
||||||
if (extensions_.exists()) {
|
if (extensions_.exists()) {
|
||||||
|
|
|
@ -175,6 +175,7 @@ private:
|
||||||
uint32_t ssrc;
|
uint32_t ssrc;
|
||||||
uint32_t csrc[15];
|
uint32_t csrc[15];
|
||||||
SrsRtpExtensions extensions_;
|
SrsRtpExtensions extensions_;
|
||||||
|
bool decode_only_header_;
|
||||||
public:
|
public:
|
||||||
SrsRtpHeader();
|
SrsRtpHeader();
|
||||||
virtual ~SrsRtpHeader();
|
virtual ~SrsRtpHeader();
|
||||||
|
@ -199,6 +200,7 @@ public:
|
||||||
void set_padding(uint8_t v);
|
void set_padding(uint8_t v);
|
||||||
uint8_t get_padding() const;
|
uint8_t get_padding() const;
|
||||||
void set_extensions(const SrsRtpExtensionTypes* extmap);
|
void set_extensions(const SrsRtpExtensionTypes* extmap);
|
||||||
|
void set_decode_only_header(bool only_header);
|
||||||
srs_error_t get_twcc_sequence_number(uint16_t& twcc_sn);
|
srs_error_t get_twcc_sequence_number(uint16_t& twcc_sn);
|
||||||
srs_error_t set_twcc_sequence_number(uint8_t id, uint16_t sn);
|
srs_error_t set_twcc_sequence_number(uint8_t id, uint16_t sn);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue